Просмотр исходного кода

convert banlist to online, #TODO implement safe guards for failure to load banlist

Michael8818 5 месяцев назад
Родитель
Сommit
f4d6e82496

+ 23 - 4
Assets/Scripts/Script/ContinuousController.cs

@@ -6,8 +6,8 @@ using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
 using UnityEngine;
-using UnityEngine.Events;
 using UnityEngine.EventSystems;
+using UnityEngine.Networking;
 using UnityEngine.SceneManagement;
 using Hashtable = ExitGames.Client.Photon.Hashtable;
 
@@ -122,9 +122,28 @@ public class ContinuousController : MonoBehaviour
     public CEntity_Base PetrificationToken { get; private set; }
     public CardRestriction BanList { get; private set; } = new CardRestriction(new List<CardLimitCount>(), new List<BannedPair>());
 
-    void LoadBanList()
+
+    async Task LoadBanListOnline()
     {
-        BanList = DataBase.ENGBanList;
+        string url = "https://www.dcgo.online/Banlist.json";
+        UnityWebRequest jsonWebRequest = UnityWebRequest.Get(url);
+
+        UnityWebRequestAsyncOperation operation = jsonWebRequest.SendWebRequest();
+
+        while (!operation.isDone)
+        {
+            await Task.Yield(); // Keep the method asynchronous without blocking
+        }
+
+        if (jsonWebRequest.result != UnityWebRequest.Result.Success)
+        {
+            Debug.Log(jsonWebRequest.error);
+        }
+        else
+        {
+            BanList root = JsonUtility.FromJson<BanList>(jsonWebRequest.downloadHandler.text);
+            BanList = root.ConvertToCardRestriction();
+        }
     }
 
     async Task CreateTokenData()
@@ -512,7 +531,7 @@ public class ContinuousController : MonoBehaviour
             ReverseCard_Digitama = reverseDigieggCardSprite;
         }
 
-        LoadBanList();
+        await LoadBanListOnline();
 
         // deck data
         //DeckDatas = PlayerPrefsUtil.LoadList<DeckData>(DeckDatasPlayerPrefsKey);

+ 38 - 0
Assets/Scripts/Script/DeckBuildingRule.cs

@@ -1,3 +1,4 @@
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using UnityEngine;
@@ -200,6 +201,43 @@ public class DeckBuildingRule : MonoBehaviour
     }
 }
 
+#region Banlist
+[Serializable]
+public class BanList
+{
+    public List<Pair> BannedPair;
+    public List<Restrictions> Restrictions;
+
+    public CardRestriction ConvertToCardRestriction()
+    {
+        List<CardLimitCount> CardLimit = new List<CardLimitCount>();
+        List<BannedPair> BannedPairs = new List<BannedPair>();
+
+        foreach (Pair pair in BannedPair)
+            BannedPairs.Add(new BannedPair(pair.id, pair.pairs));
+
+        foreach (Restrictions restrict in Restrictions)
+            CardLimit.Add(new CardLimitCount(restrict.id, restrict.limit));
+
+        return new CardRestriction(CardLimit, BannedPairs);
+    }
+}
+
+[Serializable]
+public class Pair
+{
+    public string id;
+    public List<string> pairs;
+}
+
+[Serializable]
+public class Restrictions
+{
+    public string id;
+    public int limit;
+}
+#endregion
+
 public class CardRestriction
 {
     public CardRestriction(List<CardLimitCount> cardLimitCounts, List<BannedPair> bannedPairs)