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