Angepasste Garage, verbessertes Icon Asset system, range der türme vorschau beim ziehen
This commit is contained in:
1 parent
5486444dde
commit
5af8655c97
59 files changed
+12079
-457
No files matched your search
@@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
namespace DepthsOfGreed.HandbookUI
|
||||
{
|
||||
[Serializable] public sealed class PreviewSpriteLayer
|
||||
{
|
||||
public Sprite sprite;
|
||||
public Vector2 offset;
|
||||
public Vector2 scale=Vector2.one;
|
||||
public float rotation;
|
||||
public bool rotateWithAim=true;
|
||||
}
|
||||
public sealed class LayeredTowerPreview:MonoBehaviour
|
||||
{
|
||||
readonly List<SpriteRenderer> renderers=new List<SpriteRenderer>();
|
||||
PreviewSpriteLayer[] layers;
|
||||
public void Show(HandbookTowerEntry entry,Sprite fallback)
|
||||
{
|
||||
layers=entry.previewLayers??Array.Empty<PreviewSpriteLayer>();
|
||||
Sprite reference=null;for(int i=layers.Length-1;i>=0;i--)if(layers[i]?.sprite){reference=layers[i].sprite;break;}
|
||||
bool empty=!reference;if(empty)reference=fallback;
|
||||
float size=entry.baseShape==BaseShape.Rectangle?entry.baseSize.x:entry.baseRadius*1.4142136f;
|
||||
float common=entry.previewScale>0?entry.previewScale:size/Mathf.Max(.001f,reference.bounds.size.x);
|
||||
int count=empty?1:layers.Length;
|
||||
while(renderers.Count<count){var go=new GameObject("PreviewLayer_"+renderers.Count);go.transform.SetParent(transform,false);renderers.Add(go.AddComponent<SpriteRenderer>());}
|
||||
for(int i=0;i<renderers.Count;i++)
|
||||
{
|
||||
var r=renderers[i];bool visible=i<count && (empty || layers[i]?.sprite);r.gameObject.SetActive(visible);if(!visible)continue;
|
||||
var layer=empty?new PreviewSpriteLayer{sprite=fallback}:layers[i];r.sprite=layer.sprite;r.sortingOrder=20+count-i;
|
||||
r.transform.localPosition=(Vector3)(layer.offset*common);r.transform.localScale=new Vector3(common*layer.scale.x,common*layer.scale.y,1);
|
||||
if(empty && entry.baseShape==BaseShape.Rectangle && entry.previewScale<=0)r.transform.localScale=new Vector3(entry.baseSize.x/reference.bounds.size.x,entry.baseSize.y/reference.bounds.size.y,1);
|
||||
}
|
||||
LateUpdate();
|
||||
}
|
||||
public void SetOpacity(float alpha){foreach(var r in renderers)r.color=new Color(1,1,1,alpha);}
|
||||
void LateUpdate()
|
||||
{for(int i=0;i<renderers.Count;i++)if(renderers[i].gameObject.activeSelf){var l=layers!=null && i<layers.Length?layers[i]:null;renderers[i].transform.localRotation=Quaternion.Euler(0,0,(l?.rotation??0)-(l!=null && !l.rotateWithAim?transform.eulerAngles.z:0));}}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user