From c49c0e39e4c11a438014a0b0732ecf0968fceb5e Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Fri, 27 Nov 2020 20:58:36 +0800
Subject: [PATCH] 出二级宝石的时间不对的bug

---
 Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs |  226 ++++++++++++++++++--------------------------------------
 1 files changed, 74 insertions(+), 152 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs
index 8e2e819..37e9c8a 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>
     /// 购买二级宝石的按钮贴图.
@@ -47,9 +39,6 @@
     // 开始出现技能塔的时间:
     public static float SKILL_TOWER_TIME = 30.0f;
 
-    // 购买之后直接出现2级宝石的时间.
-    public static float LEVELUP_TOWER_TIME = 10.0f;
-
     protected System.Random mRandom;
 
     protected int rTowerIdx = 2;
@@ -60,8 +49,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,27 +76,38 @@
 
         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 = Mathf.Min(EndlessGameUI.instance.MinLevel, 1);
 
-        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);
+        // });
     }
 
     /// <summary>
@@ -115,37 +116,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 +164,7 @@
             if (name == this.towerArray[ti].towerName)
                 return towerArray[ti];
 
-        return GetRandomTower(false);
+        return GetRandomTower(EFeatureTower.NULL);
     }
 
     /// <summary>
@@ -222,135 +192,87 @@
     /// <summary>
     /// 根据规则生成一个随机的塔
     /// </summary>
-    /// <param name="onlySpawnElf">是否仅产生精灵宝石,而不产生技能宝石</param>
     /// <returns></returns>
-    public Tower GetRandomTower(bool onlySpawnElf = true)
+    public Tower GetRandomTower(EFeatureTower towerType, bool isRandom = false)
     {
-        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)
+        if (GameConfig.IsNewbie)
         {
-            AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
+            AudioSourceManager.Ins.Play(AudioEnum.UI);
 
             return;
         }
 
         AudioSourceManager.Ins.Play(AudioEnum.UI);
 
-        // 还没到技能时间,忽略掉技能宝石
-        Tower newTower = GetRandomTower(EndlessUIStart.instance.GameStartTime <= SKILL_TOWER_TIME);
-        //Tower newTower = GetRandomTower(false);
+        Tower newTower = GetRandomTower(towerType, false);
 
         if (!newTower)
             throw new Exception("未能成功产生Tower");
 
+        RandomPlaceTower(newTower, -1, -1, -1, -1, true);
 
+        // 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 (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);
 
-            if (isFirstBuy)
-            {
-                //Debug.Log("首次购买:" + tmpTowerName);
+        //     }
+        //     else
+        //     {
+        //         //Debug.Log("购买了多次了:" + tmpTowerName);
+        //     }
+        //     RandomPlaceTower(newTower, -1, -1, -1, -1, isFirstBuy);
 
-            }
-            else
-            {
-                //Debug.Log("购买了多次了:" + tmpTowerName);
-            }
-            RandomPlaceTower(newTower, -1, -1, -1, -1, isFirstBuy);
+        // }
+        // else
+        // {
+        //     RandomPlaceTower(newTower, -1, -1, -1, -1, false);
+        // }
 
-        }
-        else
-        {
-            RandomPlaceTower(newTower, -1, -1, -1, -1, false);
-        }
     }
 
     private List<string> towerNameLis = new List<string>();//用来判断是否是首次购买宝石
@@ -366,7 +288,7 @@
         if (gameUI.isBuilding)
             gameUI.CancelGhostPlacement();
 
-        if (EndlessUIStart.instance.GameStartTime >= LEVELUP_TOWER_TIME)
+        if (EndlessUIStart.instance.GameStartTime >= JsonDataCenter.DOUBLE_GEM_TIME)
         {
             if (level == -1)
                 level = Mathf.Min(EndlessGameUI.instance.MinLevel, 1);

--
Gitblit v1.9.1