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