From bd0ba263761a866ca0d698169d2d83b6a11c35e7 Mon Sep 17 00:00:00 2001 From: CoderM <coderm@qq.com> Date: Thu, 10 Dec 2020 17:04:37 +0800 Subject: [PATCH] CoderM: 增加SDKJSON处理 --- Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs | 340 +++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 260 insertions(+), 80 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs b/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs index 1a86fad..c52587d 100644 --- a/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs +++ b/Assets/Scripts/TowerDefense/UI/HUD/PlacementTile.cs @@ -1,95 +1,275 @@ using UnityEngine; +using TowerDefense.Level; +using UnityEditor; +using KTGMGemClient; namespace TowerDefense.UI.HUD { - /// <summary> - /// States the placement tile can be in - /// </summary> - public enum PlacementTileState - { - Filled, - Empty - } - - /// <summary> - /// Simple class to illustrate tile placement locations - /// 主要功能是在场景内能够表示可以放置Tower的位置 - /// </summary> - public class PlacementTile : MonoBehaviour - { - /// <summary> - /// Material to use when this tile is empty - /// </summary> - public Material emptyMaterial; - /// <summary> - /// Material to use when this tile is filled - /// </summary> - public Material filledMaterial; - /// <summary> - /// The renderer whose material we're changing - /// </summary> - public Renderer tileRenderer; + /// <summary> + /// States the placement tile can be in + /// </summary> + public enum PlacementTileState + { + Filled, + Empty + } - /// <summary> - /// 等待购买的材质 - /// </summary> - public Material waitBuyMat; + /// <summary> + /// Simple class to illustrate tile placement locations + /// 主要功能是在场景内能够表示可以放置Tower的位置 + /// </summary> + public class PlacementTile : MonoBehaviour + { + /// <summary> + /// Material to use when this tile is empty + /// </summary> + public Material emptyMaterial; + /// <summary> + /// Material to use when this tile is filled + /// </summary> + public Material filledMaterial; + /// <summary> + /// The renderer whose material we're changing + /// </summary> + public Renderer tileRenderer; - /// <summary> - /// 已开放的材质. - /// </summary> - public Material openMat; + /// <summary> + /// 等待购买的材质 + /// </summary> + public Material waitBuyMat; - /// <summary> - /// 塔位已被破坏的材质 - /// </summary> - public Material destroyedMat; + /// <summary> + /// 已开放的材质. + /// </summary> + public Material openMat; - /// <summary> - /// Update the state of this placement tile - /// </summary> - 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; - } - } + /// <summary> + /// 塔位已被破坏的材质 + /// </summary> + public Material destroyedMat; + + /// <summary> + /// 可以放置的塔位 + /// </summary> + public Renderer canPlaceRenderer; + + /// <summary> + /// 可以放置的 + /// </summary> + public Material canPlaceMat; + + /// <summary> + /// 放置在当前位置 + /// </summary> + public Material selectMat; + + //public ParticleSystem myPS;//可以升级的特效 - /// <summary> - /// 根据传入的参数来设置当前Grid对应的显示信息 - /// WORK START: 从这个函数开始,替换相关的显示效果 - /// </summary> - /// <param name="newtype"></param> - public void SetTileType( PlacementGridType newtype) + /// <summary> + /// Update the state of this placement tile + /// </summary> + public void SetState(PlacementTileState newState) { - switch( newtype) + switch (newState) { - case PlacementGridType.EGridWaitBuy: - if (tileRenderer != null && waitBuyMat != null) - tileRenderer.sharedMaterial = waitBuyMat; - break; - case PlacementGridType.EGridOpen: - if (tileRenderer != null && openMat != null) - tileRenderer.sharedMaterial = openMat; - break; - case PlacementGridType.EGridDestroyed: - if (tileRenderer != null && destroyedMat != null) - tileRenderer.sharedMaterial = destroyedMat; - break; + 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); + + // } + // } + + // /// <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 (isOn && towerName != "") + { + SetTowerVirtualshadow(towerName); + } + else if (!isOn && towerVSRenderer.enabled) + { + towerVSRenderer.enabled = false; + } + + } + + /// <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; + } + + + /// <summary> + /// 根据传入的参数来设置当前Grid对应的显示信息 + /// WORK START: 从这个函数开始,替换相关的显示效果 + /// </summary> + /// <param name="newtype"></param> + 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; + } + } + } } \ No newline at end of file -- Gitblit v1.9.1