From 51e5211590b58df92c4bbdb8974b14f96276690a Mon Sep 17 00:00:00 2001
From: wangguan <wangguan@kt007.com>
Date: Thu, 19 Nov 2020 12:02:06 +0800
Subject: [PATCH] 全新适配

---
 Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs |  205 +++++++++++++++++++-------------------------------
 1 files changed, 79 insertions(+), 126 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs
index b8ab7d7..554cd95 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs
+++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs
@@ -14,15 +14,7 @@
     // 当前类所在的Btn.
     public Button randomBtn;
 
-    /// <summary>
-    /// 倒计时对应的背景图片.
-    /// </summary>
-    public Image cdTimeBg;
-
-    /// <summary>
-    /// 倒计划对应的文字.
-    /// </summary>
-    public TextMeshProUGUI cdTimeText;
+    public Button skillBtn;
 
     /// <summary>
     /// 购买二级宝石的按钮贴图.
@@ -60,8 +52,9 @@
     // 所有宝石位置权重列表
     private List<int> weightList;
 
-    // 是否初始化过出战数据
-    private bool isInitFightData = false;
+    public Text NormalDesc;
+
+    public Text SkillDesc;
 
     // Start is called before the first frame update
     void Start()
@@ -86,24 +79,35 @@
 
         bSetBuyLvlUp = false;
         bCdTimeStart = false;
+        randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); });
+        skillBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.Skill_Bomb); });
+        UpdateDescDisplay();
+    }
 
-        cdTimeBg.gameObject.SetActive(false);
+    public void UpdateDescDisplay()
+    {
+        int minLevel = EndlessGameUI.instance.MinLevel;
 
-        cdTimeText.text = "";
-
-        randomBtn.onClick.AddListener(onClick);
-
+        NormalDesc.text = $"购买{minLevel + 1}级宝石";
+        //SkillDesc.text = $"购买{minLevel + 1}级技能宝石";
     }
 
     public void ChangeBtnClickNormal()
     {
         randomBtn.onClick.RemoveAllListeners();
-        randomBtn.onClick.AddListener(onClick);
+        skillBtn.onClick.RemoveAllListeners();
+        randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); });
+        skillBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.Skill_Bomb); });
     }
     public void ChangeBtnClick()
     {
         randomBtn.onClick.RemoveAllListeners();
+        skillBtn.onClick.RemoveAllListeners();
         randomBtn.onClick.AddListener(() =>
+        {
+            AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
+        });
+        skillBtn.onClick.AddListener(() =>
         {
             AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
         });
@@ -115,37 +119,6 @@
     public List<Tower> towerList
     {
         get { return this.towerArray; }
-    }
-
-    /// <summary>
-    /// 处理按钮升级相关.
-    /// </summary>
-    private void Update()
-    {
-        float gstime = EndlessUIStart.instance.GameStartTime;
-        if (gstime <= 0) return;
-
-        if ((!bCdTimeStart) && (LEVELUP_TOWER_TIME - gstime) <= JsonDataCenter.TOWERLVLUP_CDTIME)
-        {
-            bCdTimeStart = true;
-            btnLvlUpCdTime = LEVELUP_TOWER_TIME - gstime;
-            cdTimeBg.gameObject.SetActive(true);
-        }
-        if ((!bSetBuyLvlUp) && (gstime > LEVELUP_TOWER_TIME))
-        {
-            bSetBuyLvlUp = true;
-            this.randomBtn.GetComponent<Image>().sprite = buyBtnLevelUp;
-            cdTimeBg.gameObject.SetActive(false);
-            cdTimeText.text = "";
-        }
-
-        // 更新倒计时:
-        if ((!bSetBuyLvlUp) && bCdTimeStart)
-        {
-            btnLvlUpCdTime -= Time.deltaTime;
-            string distr = ((int)Math.Ceiling(btnLvlUpCdTime)).ToString() + "s";
-            cdTimeText.text = distr;
-        }
     }
 
     public void actionTest()
@@ -194,7 +167,7 @@
             if (name == this.towerArray[ti].towerName)
                 return towerArray[ti];
 
-        return GetRandomTower(false);
+        return GetRandomTower(EFeatureTower.NULL, true);
     }
 
     /// <summary>
@@ -222,81 +195,34 @@
     /// <summary>
     /// 根据规则生成一个随机的塔
     /// </summary>
-    /// <param name="onlySpawnElf">是否仅产生精灵宝石,而不产生技能宝石</param>
     /// <returns></returns>
-    public Tower GetRandomTower(bool onlySpawnElf = true)
+    public Tower GetRandomTower(EFeatureTower towerType, bool isRandom)
     {
-        if (!isInitFightData)
+        int[] indexArr = { 0, 1, 2, 3, 4 };
+
+        if (!isRandom)
         {
-            isInitFightData = true;
-            weightList = new List<int>();
-            List<posWeight> posWeight = JsonDataCenter.GetList<posWeight>();
-            randomTotalWeight = 0;
-
-            for (int i = 0; i < posWeight.Count; ++i)
+            if (towerType == EFeatureTower.NULL)
             {
-                weightList.Add(posWeight[i].weight);
-                randomTotalWeight += posWeight[i].weight;
+                // 只获得普通宝石
+                indexArr = new int[] { 0, 1, 2 };
             }
-
-            // 游戏开始之前先把出站组乱序
-            GameUtils.Shuffle(towerArray);
+            else
+            {
+                // 只获得技能宝石
+                indexArr = new int[] { 3, 4 };
+            }
         }
 
-        Tower ret = null;
+        int random = UnityEngine.Random.Range(0, indexArr.Length);
 
-        // 还没到技能时间,忽略掉技能宝石
-        if (onlySpawnElf)
-        {
-            // 精灵宝石位置索引列表
-            List<int> elfIndexList = new List<int>();
-
-            for (int i = 0; i < towerArray.Count; ++i)
-            {
-                if (towerArray[i].towerFeature == EFeatureTower.NULL)
-                    elfIndexList.Add(i);
-            }
-
-            // 没有上阵精灵宝石
-            if (elfIndexList.Count == 0)
-            {
-                Debug.LogError("--------------------- 没有上阵精灵宝石 ---------------------");
-                return null;
-            }
-
-            // 计算所有精灵宝石位置的总权重
-            int elfTotalWeight = 0;
-            // 精灵宝石位置权重列表
-            List<int> elfWeightList = new List<int>();
-
-            for (int i = 0; i < elfIndexList.Count; ++i)
-            {
-                elfTotalWeight += weightList[elfIndexList[i]];
-                elfWeightList.Add(weightList[elfIndexList[i]]);
-            }
-
-            // 所有精灵宝石位置的权重都为0,直接等概率出一个精灵宝石
-            int index = elfTotalWeight == 0 ? mRandom.Next(0, elfIndexList.Count) : GetRandomIndex(elfWeightList, elfTotalWeight);
-            ret = towerArray[elfIndexList[index]];
-        }
-        // 可以自由产生
-        else
-        {
-            int index = randomTotalWeight == 0 ? mRandom.Next(0, towerArray.Count) : GetRandomIndex(weightList, randomTotalWeight);
-            ret = towerArray[index];
-        }
-
-        // 生成宝石成功,需要调整宝石位置,把宝石放到队尾
-        towerArray.Remove(ret);
-        towerArray.Add(ret);
-
-        return ret;
+        return towerArray[indexArr[random]];
     }
 
     /// <summary>
     /// 随机购买Tower的入口,如果购买成功,则需要实时更新价格
     /// </summary>
-    public void onClick()
+    public void onClick(EFeatureTower towerType)
     {
         if (GameConfig.IsNewbie && !GameConfig.CanBuyNewTower)
         {
@@ -307,38 +233,65 @@
 
         AudioSourceManager.Ins.Play(AudioEnum.UI);
 
-        // 还没到技能时间,忽略掉技能宝石
-        Tower newTower = GetRandomTower(EndlessUIStart.instance.GameStartTime <= SKILL_TOWER_TIME);
+        Tower newTower = GetRandomTower(towerType, false);
 
         if (!newTower)
             throw new Exception("未能成功产生Tower");
 
-        RandomPlaceTower(newTower);
+        if (newTower.towerFeature == EFeatureTower.NULL)
+        {
+            string tmpTowerName = newTower.towerName;
+            towerNameLis.Add(tmpTowerName);
+            int count = 0;
+            bool isFirstBuy = true;
+            for (int i = 0; i < towerNameLis.Count; i++)
+            {
+                if (towerNameLis[i] == tmpTowerName)
+                {
+                    count++;
+                    if (count == 2)
+                    {
+                        isFirstBuy = false;
+                        break;
+                    }
+                }
+            }
+
+            if (isFirstBuy)
+            {
+                //Debug.Log("首次购买:" + tmpTowerName);
+
+            }
+            else
+            {
+                //Debug.Log("购买了多次了:" + tmpTowerName);
+            }
+            RandomPlaceTower(newTower, -1, -1, -1, -1, isFirstBuy);
+
+        }
+        else
+        {
+            RandomPlaceTower(newTower, -1, -1, -1, -1, false);
+        }
     }
+
+    private List<string> towerNameLis = new List<string>();//用来判断是否是首次购买宝石
 
     /// <summary>
     /// 随机找一个空白位置放置塔防
     /// </summary>
     /// <param name="tower"></param>
-    public bool RandomPlaceTower(Tower tower, int level = -1, int cost = -1, int posx = -1, int posy = -1)
+    public bool RandomPlaceTower(Tower tower, int level = -1, int cost = -1, int posx = -1, int posy = -1, bool isFirstAppear = false)
     {
         EndlessGameUI gameUI = EndlessGameUI.instance;
 
         if (gameUI.isBuilding)
             gameUI.CancelGhostPlacement();
 
-        if (EndlessUIStart.instance.GameStartTime >= LEVELUP_TOWER_TIME)
-        {
-            if (level == -1)
-                level = Mathf.Min(EndlessGameUI.instance.MinLevel, 1);
-        }
-        else
-        {
-            if (level == -1)
-                level = 0;
-        }
+        if (level == -1)
+            level = Mathf.Min(EndlessGameUI.instance.MinLevel, 1);
 
-        return gameUI.RandomPlaceTower(tower, posx, posy, level, cost);
+        return gameUI.RandomPlaceTower(tower, posx, posy, level, cost, false, isFirstAppear);
     }
 
     /// <summary>

--
Gitblit v1.9.1