From aadfae81e6a511cd2c062ab0b05f3ee3419f1a7f Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Wed, 23 Dec 2020 20:15:14 +0800 Subject: [PATCH] 选中BUFF塔播放相应的特效 --- Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs | 210 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 186 insertions(+), 24 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs b/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs index 3628f72..1e532a8 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 { @@ -55,14 +56,24 @@ /// 可以放置的 /// </summary> public Material canPlaceMat; + public Material canNotPlaceMat; /// <summary> /// 放置在当前位置 /// </summary> public Material selectMat; - public ParticleSystem myPS;//可以升级的特效 + //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 @@ -86,42 +97,176 @@ } } - public void SetParticleSystem(bool isOn) + // 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 (isOn) + if (canPlaceRenderer.enabled != isOn) { - if (myPS.gameObject.activeSelf != isOn) myPS.gameObject.SetActive(isOn); - myPS.Play(); - + canPlaceRenderer.enabled = isOn; } - else + if (myDragSelectPS.activeSelf != isOn) { - myPS.Stop(); - if (myPS.gameObject.activeSelf != isOn) myPS.gameObject.SetActive(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> - /// <param name="canPlace"></param> - public void CheckCanPlace(bool canPlace) - { - canPlaceRenderer.enabled = canPlace; - if (canPlace) - { - SetSelect(false); - } - } + public Renderer towerVSRenderer; /// <summary> - /// 设置当前材质 + /// 塔的虚影 /// </summary> - /// <param name="isSelect"></param> - public void SetSelect(bool isSelect) + 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) { - canPlaceRenderer.material = isSelect ? selectMat : canPlaceMat; + 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; } @@ -139,6 +284,7 @@ tileRenderer.sharedMaterial = waitBuyMat; break; case PlacementGridType.EGridOpen: + //Debug.Log("开了塔" + EndlessLevelManager.instanceExists); if (EndlessLevelManager.instanceExists) { tileRenderer.enabled = false; @@ -148,6 +294,9 @@ if (tileRenderer != null && openMat != null) tileRenderer.sharedMaterial = openMat; } + + SetWarning(false); + break; case PlacementGridType.EGridDestroyed: if (tileRenderer != null && destroyedMat != null) @@ -155,5 +304,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