Files
DepthsOfGreed/Assets/Scripts/HandbookUI/RangeArenaClip.cs
T

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);}
}
}
}