27 lines
1.7 KiB
C#
27 lines
1.7 KiB
C#
using UnityEngine;
|
|
namespace DepthsOfGreed.HandbookUI
|
|
{
|
|
public sealed class RangeArenaClip:MonoBehaviour
|
|
{
|
|
public WallBuildArea arena;
|
|
public Renderer[] outlines;
|
|
public Renderer fill;
|
|
public TestPlacementController placement;
|
|
CombatDefinition combat;bool ability;
|
|
MaterialPropertyBlock block;
|
|
public void Configure(HandbookTowerEntry entry){combat=entry.combat;ability=entry.use==BuildUse.Ability;}
|
|
void LateUpdate()
|
|
{
|
|
if(!arena || combat==null || !arena.TryGetRadii(out float radius,out _,out _))return;
|
|
float angle=transform.eulerAngles.z+combat.forwardAngleOffset;
|
|
if(block==null)block=new MaterialPropertyBlock();
|
|
block.Clear();block.SetVector("_ArenaCenter",arena.Center);block.SetFloat("_ArenaRadius",radius);
|
|
block.SetVector("_Tower",transform.position);block.SetFloat("_Minimum",ability?0:combat.minimumRange);block.SetFloat("_Maximum",ability?combat.areaRadius:combat.unlimitedRange?100000:combat.range);
|
|
block.SetVector("_Forward",new Vector4(Mathf.Cos(angle*Mathf.Deg2Rad),Mathf.Sin(angle*Mathf.Deg2Rad),0,0));block.SetFloat("_CosHalf",Mathf.Cos((ability?360:AttackRangeGeometry.CoverageAngle(combat))*.5f*Mathf.Deg2Rad));
|
|
block.SetFloat("_Fill",0);
|
|
for(int i=0;i<outlines.Length;i++){block.SetFloat("_Dashed",i==1?1:0);outlines[i].SetPropertyBlock(block);}
|
|
if(fill){fill.transform.position=arena.Center;fill.transform.rotation=Quaternion.identity;fill.transform.localScale=Vector3.one*(radius*2);block.SetFloat("_Fill",1);block.SetFloat("_Dashed",0);fill.SetPropertyBlock(block);}
|
|
}
|
|
}
|
|
}
|