using System.Collections.Generic; using UnityEngine; using System; using System.Linq; namespace GuruClient { public enum StartMode { //继续 Continue, //重玩 Replay, //查看 View } public enum LevelType { None, MainLine, Daily, Story, UA, Activity } [Serializable] public class ALevel { //关卡ID public int level; //关卡类型:0-主线关卡 1-每日挑战关卡 2-活动关卡 public LevelType type; public string psdID; public string gameGeneration; //关卡ab对应的hash public string gameHash; public string thumbnailBadGeneration; public string thumbnailFinishGeneration; //Daily public string dateTime; public bool pass; //Activity public int unlockStar; public int unlockCoin; //1,渐现,2缩放 public int animType = 2; //标签 public string tags; public string GameABName() { return $"330_assets_bundles_levels_{psdID}.ab?generation={gameGeneration}"; } public string ThumbanilBadABName() { return $"331_assets_bundles_textures_thumbnail_{psdID}_bad_png.ab?generation={thumbnailBadGeneration}"; } public string ThumbanilFinishABName() { return $"331_assets_bundles_textures_thumbnail_{psdID}_finish_png.ab?generation={thumbnailFinishGeneration}"; } public string GetLevelName() { if (type == LevelType.MainLine) { return $"MainLine_PSDID_{psdID}"; } if (type == LevelType.Daily) { return $"Daily_PSDID_{psdID}"; } if (type == LevelType.Story) { return $"Story_PSDID_{psdID}"; } if (type == LevelType.Activity) { return $"Activity_PSDID_{psdID}"; } return psdID; } public string GetTypeName() { if (type == LevelType.MainLine) { return $"MainLine"; } if (type == LevelType.Daily) { return $"Daily"; } if (type == LevelType.Story) { return $"Story"; } if (type == LevelType.Activity) { return $"Activity"; } return ""; } } [Serializable] public class APatch { public string name; public Vector2 pos1; public float[] pos; public int stage; public int sub_stage; public string tag; public bool isValid() { return !string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(tag); } public void SetName(string nameIn) { this.name = nameIn; } /// /// 是否是拼图块 /// /// public bool IsPatch() { return tag == "patch"; } public bool IsLine() { return tag == "line"; } public bool IsAuto() { return tag == "auto"; } public bool IsFinish() { return tag == "finish"; } } [Serializable] public class PatchData { public string name; public Vector2 pos; public int stage; public int sub_stage; public string parent; public string tag; //用于info public float mapWidth; public float mapHeight; /// /// 是否是拼图块 /// /// public bool IsPatch() { return tag == "patch"; } public bool IsSubPatch() { return tag == "spatch"; } public bool IsAuto() { return tag == "auto"; } public bool IsFinish() { return tag == "finish"; } public bool IsBase() { return tag == "base"; } public bool IsBad() { return tag == "bad"; } public bool IsSubBad() { return tag == "sbad"; } public bool IsEntry() { return tag == "entry"; } public bool IsInfo() { return name == "info"; } public bool IsRole() { return tag == "role"; } } public class ConfigManager { private static ConfigManager _instance; public static ConfigManager Instance { get { if (_instance == null) { _instance = new ConfigManager(); } return _instance; } } #region 关卡池 //总关卡池 private List _levelPoolList = new List(); //总关卡池字典 private Dictionary _levelPoolDict = new Dictionary(); //每日挑战关卡池 private List _dailyLevelPoolList = new List(); //每日挑战关卡池字典 private Dictionary _dailyLevelPoolDict = new Dictionary(); #endregion #region 主线本地已存储关卡列表 //主线关卡列表 private List _mainlineDBList = new List(); //主线关卡字典 private Dictionary _mainlineDBDict = new Dictionary(); #endregion #region Daily本地已存储关卡列表 //每日挑战列表 private List _dailyLevelsDBList = new List(); //每日挑战字典 private Dictionary _dailyLevelsDBDict = new Dictionary(); //每日挑战日期和关卡对照字典 private Dictionary _dailyDT2Level = new Dictionary(); #endregion private string version = ""; public bool challengeConfigLoaded = false; public void Initialize() { } /// /// 通过PSDID获取关卡数据 /// public ALevel GetLevel(string psdID, LevelType levelType, string dateTime = "", bool readOnly = false) { ALevel ret = new ALevel(); ret.psdID = "395"; ret.level = 1; ret.type = LevelType.MainLine; ret.tags = ""; Debug.Log($"获取 GetLevel 失败,未找到 psd_id=" + psdID); return ret; } /// /// 获取关卡池第一个关卡 /// /// public ALevel GetLevelPoolFirst() { ALevel aLevel = null; if (_levelPoolList.Count > 0) { aLevel = _levelPoolList[0]; } return aLevel; } /// /// 获取Daily关卡池第一个关卡 /// /// public ALevel GetDailyLevelPoolFirst() { ALevel aLevel = null; if (_dailyLevelPoolList.Count > 0) { aLevel = _dailyLevelPoolList[0]; } if (aLevel == null) { aLevel = GetLevelPoolFirst(); } return aLevel; } public ALevel GetDailyLevelByDT(string dt) { if (_dailyDT2Level.TryGetValue(dt, out var value)) { return value; } return null; } public Dictionary ParsePatches(string txt) { Dictionary patchesDB = new Dictionary(); Debug.Log(txt); Dictionary patchesDB1 = Utility.Json.Deserialize>(txt); foreach (KeyValuePair aItem in patchesDB1) { aItem.Value.SetName(aItem.Key); } // for (int i = 0; i < patchesDB1.Count(); i++) // { // // patchesDB1.ElementAt(i).Value.name = patchesDB1.ElementAt(i).Key; // KeyValuePair kv = patchesDB1.ElementAt(i); // kv.Value.SetName(kv.Key); // } // foreach (var item1 in js) // { // string key1 = item1.Key; // JObject value1 = (JObject)js[key1]; // APatch pe = new APatch(); // pe.name = key1; // foreach (var item2 in value1) // { // string key2 = item2.Key; // var value2 = value1[key2]; // // if ((key2).Equals("pos")) // { // double x = (double)value2[0]; // double y = (double)value2[1]; // // pe.pos.x = (float)x; // pe.pos.y = (float)y; // }else if((key2).Equals("tag")) // { // pe.tag = (string)value2; // }else if((key2).Equals("stage")) // { // pe.stage = int.Parse((string)value2); // }else if((key2).Equals("sub_stage")) // { // pe.sub_stage = int.Parse(((string)value2)); // } // } // patchesDB.Add((string)key1, pe); // } return patchesDB1; } /// /// 通过关卡名称获取PSD ID /// /// 关卡名称 /// public Tuple GetPSDIDByLevelName(string name) { string psdID = ""; LevelType levelType = LevelType.None; string[] arr = name.Split('_'); if (arr.Length == 3) { psdID = arr[2]; if (arr[0] == "MainLine") { levelType = LevelType.MainLine; } else if (arr[0] == "Daily") { levelType = LevelType.Daily; } else if (arr[0] == "Story") { levelType = LevelType.Story; } else if (arr[0] == "Activity") { levelType = LevelType.Activity; } else { levelType = LevelType.None; } } return new Tuple(psdID, levelType);; } public void OnDestroy() { } public string GetTypeNameByType(LevelType type) { if (type == LevelType.MainLine) { return $"MainLine"; } if (type == LevelType.Daily) { return $"Daily"; } if (type == LevelType.Story) { return $"Story"; } if (type == LevelType.Activity) { return $"Activity"; } return ""; } } }