using UnityEngine; using TowerDefense.Level; namespace TowerDefense.UI.HUD { /// /// States the placement tile can be in /// public enum PlacementTileState { Filled, Empty } /// /// Simple class to illustrate tile placement locations /// 主要功能是在场景内能够表示可以放置Tower的位置 /// public class PlacementTile : MonoBehaviour { /// /// Material to use when this tile is empty /// public Material emptyMaterial; /// /// Material to use when this tile is filled /// public Material filledMaterial; /// /// The renderer whose material we're changing /// public Renderer tileRenderer; /// /// 等待购买的材质 /// public Material waitBuyMat; /// /// 已开放的材质. /// public Material openMat; /// /// 塔位已被破坏的材质 /// public Material destroyedMat; /// /// 可以放置的塔位 /// public Renderer canPlaceRenderer; /// /// 可以放置的 /// public Material canPlaceMat; /// /// 放置在当前位置 /// public Material selectMat; /// /// Update the state of this placement tile /// public void SetState(PlacementTileState newState) { switch (newState) { case PlacementTileState.Filled: if (tileRenderer != null && filledMaterial != null) { tileRenderer.sharedMaterial = filledMaterial; } break; case PlacementTileState.Empty: if (tileRenderer != null && emptyMaterial != null) { tileRenderer.sharedMaterial = emptyMaterial; } break; } } /// /// 设置是否可以放置 /// /// public void CheckCanPlace(bool canPlace) { canPlaceRenderer.enabled = canPlace; if (canPlace) { SetSelect(false); } } /// /// 设置当前材质 /// /// public void SetSelect(bool isSelect) { canPlaceRenderer.material = isSelect ? selectMat : canPlaceMat; } /// /// 根据传入的参数来设置当前Grid对应的显示信息 /// WORK START: 从这个函数开始,替换相关的显示效果 /// /// public void SetTileType(PlacementGridType newtype) { switch (newtype) { case PlacementGridType.EGridWaitBuy: if (tileRenderer != null && waitBuyMat != null) tileRenderer.sharedMaterial = waitBuyMat; break; case PlacementGridType.EGridOpen: if (EndlessLevelManager.instanceExists) { tileRenderer.enabled = false; } else { if (tileRenderer != null && openMat != null) tileRenderer.sharedMaterial = openMat; } break; case PlacementGridType.EGridDestroyed: if (tileRenderer != null && destroyedMat != null) tileRenderer.sharedMaterial = destroyedMat; break; } } } }