From e371272a7885723c7b0ef31a20ae5d0fbead1d30 Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Sat, 26 Dec 2020 16:58:41 +0800 Subject: [PATCH] 12.26第二次 --- Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs | 233 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 233 insertions(+), 0 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs b/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs index b12da2a..6a731c6 100644 --- a/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs +++ b/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs @@ -1,5 +1,6 @@ using UnityEngine; using TowerDefense.Level; +using Core.Utilities; namespace TowerDefense.UI.HUD { @@ -47,6 +48,34 @@ public Material destroyedMat; /// <summary> + /// 可以放置的塔位 + /// </summary> + public Renderer canPlaceRenderer; + + /// <summary> + /// 可以放置的 + /// </summary> + public Material canPlaceMat; + public Material canNotPlaceMat; + + /// <summary> + /// 放置在当前位置 + /// </summary> + public Material selectMat; + + //public ParticleSystem myPS;//可以升级的特效 + + public ParticleSystem myOpenPS;//购买后的特效 + public ParticleSystem myPutPS;//交换塔位置后的特效 + + public GameObject myDragSelectPS;//推拽时候移动到当前塔的特效 + + /// <summary> + /// 所在的格子坐标 + /// </summary> + public IntVector2 GridPosition { get; set; } + + /// <summary> /// Update the state of this placement tile /// </summary> public void SetState(PlacementTileState newState) @@ -68,6 +97,186 @@ } } + // 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); + + // } + // } + + // /// <summary> + // /// 设置是否可以放置 + // /// </summary> + // /// <param name="canPlace"></param> + // 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; + // } + // } + + // } + + // /// <summary> + // /// 设置当前材质 + // /// </summary> + // /// <param name="isSelect"></param> + // /// <param name="isEmpty"></param> + // 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; + // } + // } + + /// <summary> + /// 是否放置塔 + /// </summary> + /// <param name="isOn"></param> + /// <param name="towerName"></param> + public void SetRender(bool isOn, string towerName) + { + if (canPlaceRenderer.enabled != isOn) + { + canPlaceRenderer.enabled = isOn; + } + if (myDragSelectPS.activeSelf != isOn) + { + myDragSelectPS.SetActive(isOn); + } + // if (isOn) + // { + // myDragSelectPS.Play(); + // } + // else + // { + // myDragSelectPS.Stop(); + // } + + if (isOn && towerName != "") + { + //SetTowerVirtualshadow(towerName); + EndlessWaveLineManager.instance.SetWaveLineShow(GridPosition.x, true); + } + else if (!isOn) + { + towerVSRenderer.enabled = false; + EndlessWaveLineManager.instance.SetWaveLineShow(GridPosition.x, false); + } + + } + + public void SetWarning(bool isOn) + { + canPlaceRenderer.material = isOn ? canNotPlaceMat : canPlaceMat; + } + + /// <summary> + /// 塔的虚影 + /// </summary> + public Renderer towerVSRenderer; + + /// <summary> + /// 塔的虚影 + /// </summary> + public Material towerVSMat; + + public Texture fire, wood, water; + + private Vector3 fireScale = new Vector3(1f, 1f, 1f); + private Vector3 woodScale = new Vector3(0.8f, 1.12f, 1f); + private Vector3 waterScale = new Vector3(1.55f, 1.35f, 1f); + + private Vector3 fireOffectp = new Vector3(-0.05f, 0f, 0.15f); + private Vector3 woodOffectp = new Vector3(0.0f, 0f, 0.3f); + private Vector3 waterOffectp = new Vector3(0.0f, 0f, 0.47f); + + 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")) + { + //水元素 + if (!towerVSRenderer.enabled) towerVSRenderer.enabled = true; + + towerVSMat.SetTexture(shaderPropertyName, water); + towerVSRenderer.transform.localScale = waterScale; + towerVSRenderer.transform.localPosition = waterOffectp; + } + } + string shaderPropertyName; + + /// <summary> + /// Start is called on the frame when a script is enabled just before + /// any of the Update methods is called the first time. + /// </summary> + void Start() + { + // shaderPropertyName = ShaderUtil.GetPropertyName(towerVSMat.shader, 0); + shaderPropertyName = "_MainTex"; + //Debug.Log("获取到了Shader的名字" + shaderPropertyName); + towerVSRenderer.enabled = false; + } + + private GameObject buyMesh; + public GameObject BuyMesh + { + get + { + return buyMesh; + } + } /// <summary> /// 根据传入的参数来设置当前Grid对应的显示信息 @@ -79,10 +288,15 @@ switch (newtype) { case PlacementGridType.EGridWaitBuy: + GameObject prefab = Resources.Load<GameObject>("Prefabs/BuyMesh"); + buyMesh = Instantiate(prefab, transform); + //Debug.Log("未开启塔位" + buyMesh); + if (tileRenderer != null && waitBuyMat != null) tileRenderer.sharedMaterial = waitBuyMat; break; case PlacementGridType.EGridOpen: + //Debug.Log("开了塔" + EndlessLevelManager.instanceExists); if (EndlessLevelManager.instanceExists) { tileRenderer.enabled = false; @@ -92,6 +306,12 @@ if (tileRenderer != null && openMat != null) tileRenderer.sharedMaterial = openMat; } + + SetWarning(false); + if (buyMesh != null) + { + Destroy(buyMesh); + } break; case PlacementGridType.EGridDestroyed: if (tileRenderer != null && destroyedMat != null) @@ -99,5 +319,18 @@ break; } } + + public void BuyPs() + { + myOpenPS?.Play(); + AudioSourceManager.Ins.Play(AudioEnum.OpenTowerPlace); + EndlessRandomTower.instance.CheckMoney(); + } + + public void PutPs() + { + myPutPS?.Play(); + } + } } \ No newline at end of file -- Gitblit v1.9.1