geometry-tower-defense-base/src-ref/Entity/EntityLogic/TowerEntity.cs

78 lines
2.2 KiB
C#

using Components;
using GeometryTD.Definition;
using GeometryTD.Entity.EntityData;
using UnityGameFramework.Runtime;
namespace GeometryTD.Entity
{
public class TowerEntity : EntityBase
{
private TowerController _towerController;
public void SetAttackRangeVisible(bool visible)
{
_towerController?.SetAttackRangeVisible(visible);
}
public bool TryApplyStats(TowerStatsData stats, int towerLevel)
{
if (_towerController == null || stats == null)
{
return false;
}
_towerController.OnInit(stats, towerLevel);
return true;
}
protected override void OnInit(object userData)
{
base.OnInit(userData);
_towerController = GetComponent<TowerController>();
if (_towerController == null)
{
Log.Error("DefenseTowerController is missing on tower entity '{0}'.", name);
}
}
protected override void OnShow(object userData)
{
base.OnShow(userData);
if (_towerController == null)
{
return;
}
if (userData is not TowerData towerData)
{
Log.Warning("DefenseTowerData is invalid for tower entity '{0}'.", Id);
_towerController.OnReset();
GameEntry.Entity.HideEntity(Entity);
return;
}
_towerController.OnInit(
towerData.Stats,
towerData.TowerLevel,
towerData.MuzzleColor,
towerData.BearingColor,
towerData.BaseColor);
}
protected override void OnUpdate(float elapseSeconds, float realElapseSeconds)
{
base.OnUpdate(elapseSeconds, realElapseSeconds);
_towerController?.OnUpdate(elapseSeconds);
}
protected override void OnHide(bool isShutdown, object userData)
{
_towerController?.SetAttackRangeVisible(false);
_towerController?.OnReset();
base.OnHide(isShutdown, userData);
}
}
}