ソースを参照

Merge remote-tracking branch 'origin/master'

DESKTOP-PG06IH1\Mr.AB 1 ヶ月 前
コミット
9d7124846c

+ 1 - 0
ActionTowerDefense/Assets/Scenes/Game.unity

@@ -22493,6 +22493,7 @@ MonoBehaviour:
   nowLevel: 0
   money: 0
   myTreasuresTag: 0000000000000000000000000000000000000000000000000000000000000000
+  maxTreasuresTag: 0
   gameTime: 0
   totalGameTime: 0
   gameType: 0

+ 32 - 4
ActionTowerDefense/Assets/Scripts/GameManager.cs

@@ -46,11 +46,30 @@ public class GameManager : MonoBehaviour
     [FoldoutGroup("金币结算")][LabelText("金币掉落字体")] public GameObject dropGoldText;
 
     [Header("商店刷新")]
+    [ValidateInput("CheckTagWeight","标签池子概率总和不是100%")]
+    [FoldoutGroup("Rogue")] [LabelText("标签池子比重(%)")] [Tooltip("最高标签池;标签池;公共池")] public List<float> tagWeight;
+    public bool CheckTagWeight(List<float> weights)
+    {
+        float num = 0;
+        for(int i = 0; i < 3; i++)
+        {
+            num += weights[i];
+        }
+        if(num == 100)
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+        
+    }
     [FoldoutGroup("Rogue")] [LabelText("第几关开始出现(%)")] public List<int> unlockLevel;
     [FoldoutGroup("Rogue")] [LabelText("基础几率(%)")] public List<float> baseChance;
     [FoldoutGroup("Rogue")] [LabelText("每关增加的几率(%)")] public List<float> chanceIncreasePerLevel;
     [FoldoutGroup("Rogue")] [LabelText("最大几率(%)")] public List<float> maximumChance ;
-    [FoldoutGroup("Rogue")] public List<List<SingleTreasureConfig>> treasuresList;
+    [FoldoutGroup("Rogue")] public List<List<List<SingleTreasureConfig>>> treasuresList;
     [FoldoutGroup("Rogue")] [DisplayOnly] public List<float> trueRefreshChance;
     [FoldoutGroup("Rogue")] [HideInInspector] public List<float> refreshChance;
     [Header("数值加成")]
@@ -73,6 +92,7 @@ public class GameManager : MonoBehaviour
     public int money;
     public List<Treasure> myTreasures;
     public List<int> myTreasuresTag;
+    public int maxTreasuresTag;
     public float gameTime;
     public float totalGameTime;
     public Tables allCfgData;
@@ -122,12 +142,16 @@ public class GameManager : MonoBehaviour
         }
         leveType = LeveType.Introduction;
         myTreasures = new List<Treasure>();
-        treasuresList = new List<List<SingleTreasureConfig>>();
+        treasuresList = new List<List<List<SingleTreasureConfig>>>();
         refreshChance = new List<float>();
         for (int i = 0; i < 4; i++)
         {
-            treasuresList.Add(new List<SingleTreasureConfig>());
+            treasuresList.Add(new List<List<SingleTreasureConfig>>());
             refreshChance.Add(baseChance[i]);
+            for(int j = 0; j < 9; j++)
+            {
+                treasuresList[i].Add(new List<SingleTreasureConfig>());
+            }
         }
         trueRefreshChance = new List<float>();
         for (int i = 0; i < 3; i++)
@@ -139,7 +163,11 @@ public class GameManager : MonoBehaviour
         for(int i = 0;i< cfgTreasureList.Count; i++)
         {
             SingleTreasureConfig singleTreasureConfig = cfgTreasureList[i];
-            treasuresList[singleTreasureConfig.Quality].Add(singleTreasureConfig);
+            treasuresList[singleTreasureConfig.Quality][0].Add(singleTreasureConfig);
+            for(int j = 0; j < singleTreasureConfig.Tag.Count;j++)
+            {
+                treasuresList[singleTreasureConfig.Quality][singleTreasureConfig.Tag[j]].Add(singleTreasureConfig);
+            }
         }
         nowLevel = 1;
     }

+ 42 - 13
ActionTowerDefense/Assets/Scripts/UI/ShopUI.cs

@@ -58,12 +58,46 @@ public class ShopUI : MonoBehaviour
                     break;
                 }
             }
-            int randId = Random.Range(0, gameManager.treasuresList[targetQualityID].Count);
-            SingleTreasureConfig singleTreasureConfig = gameManager.treasuresList[targetQualityID][randId];
-            while (randomTreasure.Exists(x => x == gameManager.treasuresList[targetQualityID][randId].ID))
+            int targetTag = 0;
+            if(targetQualityID != 0)
             {
-                randId = Random.Range(0, gameManager.treasuresList[targetQualityID].Count);
-                singleTreasureConfig = gameManager.treasuresList[targetQualityID][randId];
+                int targetTagWeight = -1;
+                float randomTagWeight = Random.Range(0f, 100f);
+                refreshChance = 0;
+                for (int j = 0; j < 3; j++)
+                {
+                    refreshChance += gameManager.trueRefreshChance[j];
+                    if (randomTagWeight <= refreshChance)
+                    {
+                        targetTagWeight = j;
+                        break;
+                    }
+                }
+                switch (targetTagWeight)
+                {
+                    case 0:
+                        targetTag = gameManager.maxTreasuresTag;
+                        break;
+                    case 1:
+                        List<int> targetTags = new List<int>();
+                        for(int j = 0; j < 8; j++)
+                        {
+                            if(gameManager.myTreasuresTag[j] > 0)
+                            {
+                                targetTags.Add(j + 1);
+                            }
+                        }
+                        targetTag = targetTags[Random.Range(0, targetTags.Count)];
+                        break;
+                }
+            }
+            
+            int randId = Random.Range(0, gameManager.treasuresList[targetQualityID][targetTag].Count);
+            SingleTreasureConfig singleTreasureConfig = gameManager.treasuresList[targetQualityID][targetTag][randId];
+            while (randomTreasure.Exists(x => x == gameManager.treasuresList[targetQualityID][targetTag][randId].ID))
+            {
+                randId = Random.Range(0, gameManager.treasuresList[targetQualityID][targetTag].Count);
+                singleTreasureConfig = gameManager.treasuresList[targetQualityID][targetTag][randId];
             }
             Sprite sprite = Resources.Load<Sprite>($"Textures/UI/Treasure/{singleTreasureConfig.SpriteName}");
             List<Sprite> tags = new List<Sprite>();
@@ -106,21 +140,16 @@ public class ShopUI : MonoBehaviour
 
     public void DrawUIPolygon()
     {
-        List<int> tagsId = GameManager.instance.myTreasuresTag;
-        int maxId = tagsId[0];
-        for (int i = 1; i < 8; i++)
-        {
-            maxId = Mathf.Max(maxId, tagsId[i]);
-        }
+        GameManager gameManager = GameManager.instance;
         int range = polygonInitMax;
-        while (range <= maxId)
+        while (range <= gameManager.maxTreasuresTag)
         {
             range += polygonMaxInterval;
         }
         List<float> polygon = new List<float>();
         for(int i = 0; i < 8; i++)
         {
-            float rate = tagsId[i] * 1f / range;
+            float rate = gameManager.myTreasuresTag[i] * 1f / range;
             polygon.Add(rate);
         }
         radarChart.SetRatioList(polygon);

+ 14 - 6
ActionTowerDefense/Assets/Scripts/UI/TreasuresSaleUI.cs

@@ -125,23 +125,31 @@ public class TreasuresSaleUI : MonoBehaviour
 
     public void Buy()
     {
-        if(GameManager.instance.money - treasure.price < 0)
+        GameManager gameManager = GameManager.instance; 
+        if(gameManager.money - treasure.price < 0)
         {
             return;
         }
-        GameManager.instance.money -= treasure.price;
-        shopUI.moneyText.text = $"{GameManager.instance.money}";
-        GameManager.instance.myTreasures.Add(treasure);
+        gameManager.money -= treasure.price;
+        shopUI.moneyText.text = $"{gameManager.money}";
+        gameManager.myTreasures.Add(treasure);
         for(int i = 0; i < treasure.tagsId.Count; i++)
         {
-            GameManager.instance.myTreasuresTag[treasure.tagsId[i] - 1]++;
+            gameManager.myTreasuresTag[treasure.tagsId[i] - 1]++;
         }
+        List<int> tagsId = gameManager.myTreasuresTag;
+        int maxId = tagsId[0];
+        for (int i = 1; i < 8; i++)
+        {
+            maxId = Mathf.Max(maxId, tagsId[i]);
+        }
+        gameManager.maxTreasuresTag = maxId;
         shopUI.DrawUIPolygon();
         shopUI.DrawBag();
         gameObject.SetActive(false);
         isNull = true;
         islock = false;
-        GameManager.instance.GetTreasure(treasure);
+        gameManager.GetTreasure(treasure);
     }