using UnityEngine; using TowerDefense.Level; using UnityEditor; using KTGMGemClient; 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; //public ParticleSystem myPS;//可以升级的特效 /// /// 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 SetParticleSystem(bool isOn) // { // if (isOn) // { // if (myPS.gameObject.activeSelf != isOn) myPS.gameObject.SetActive(isOn); // myPS.Play(); // } // else // { // myPS.Stop(); // if (myPS.gameObject.activeSelf != isOn) myPS.gameObject.SetActive(isOn); // } // } /// /// 设置是否可以放置 /// /// public void CheckCanPlace(bool canPlace) { if (canPlaceRenderer) { if (canPlaceRenderer.enabled != canPlace) canPlaceRenderer.enabled = canPlace; if (canPlace) { SetSelect(false); } else if (towerVSRenderer.enabled) { towerVSRenderer.enabled = false; } } } /// /// 设置当前材质 /// /// /// public void SetSelect(bool isSelect) { if (isSelect) { if (canPlaceRenderer.material != selectMat) { canPlaceRenderer.material = selectMat; } } else { if (canPlaceRenderer.material != canPlaceMat) { canPlaceRenderer.material = canPlaceMat; } if (towerVSRenderer.enabled) towerVSRenderer.enabled = false; } } /// /// 塔的虚影 /// public Renderer towerVSRenderer; /// /// 塔的虚影 /// public Material towerVSMat; public Texture fire, wood; private Vector3 fireScale = new Vector3(1.02f, 0.926f, 1f); private Vector3 woodScale = new Vector3(0.82f, 1.03f, 1f); private Vector3 waterScale = new Vector3(1.0f, 1.0f, 1.88f); private Vector3 fireOffectp = new Vector3(-0.05f, 0f, 0f); private Vector3 woodOffectp = new Vector3(0.0f, 0f, 0.19f); public void SetTowerVirtualshadow(string towerName) { if (towerName.StartsWith("GrowUpTower")) { if (!towerVSRenderer.enabled) towerVSRenderer.enabled = true; //火元素 towerVSMat.SetTexture(shaderPropertyName, fire); towerVSRenderer.transform.localScale = fireScale; towerVSRenderer.transform.localPosition = fireOffectp; } else if (towerName.StartsWith("BlinkTower")) { if (!towerVSRenderer.enabled) towerVSRenderer.enabled = true; //木元素 towerVSMat.SetTexture(shaderPropertyName, wood); //木元素 towerVSRenderer.transform.localScale = woodScale; towerVSRenderer.transform.localPosition = woodOffectp; } else if (towerName.StartsWith("CopyCatTower")) { //水元素 } } string shaderPropertyName; /// /// Start is called on the frame when a script is enabled just before /// any of the Update methods is called the first time. /// void Start() { // shaderPropertyName = ShaderUtil.GetPropertyName(towerVSMat.shader, 0); shaderPropertyName = "_MainTex"; //Debug.Log("获取到了Shader的名字" + shaderPropertyName); towerVSRenderer.enabled = false; } /// /// 根据传入的参数来设置当前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; } } } }