460 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			460 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
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;
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 是否是拼图块
 | 
						||
        /// </summary>
 | 
						||
        /// <returns></returns>
 | 
						||
        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;
 | 
						||
        
 | 
						||
        /// <summary>
 | 
						||
        /// 是否是拼图块
 | 
						||
        /// </summary>
 | 
						||
        /// <returns></returns>
 | 
						||
        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<ALevel> _levelPoolList = new List<ALevel>();
 | 
						||
        //总关卡池字典
 | 
						||
        private Dictionary<string, ALevel> _levelPoolDict = new Dictionary<string, ALevel>();
 | 
						||
 | 
						||
        //每日挑战关卡池
 | 
						||
        private List<ALevel> _dailyLevelPoolList = new List<ALevel>();
 | 
						||
        //每日挑战关卡池字典
 | 
						||
        private Dictionary<string, ALevel> _dailyLevelPoolDict = new Dictionary<string, ALevel>();
 | 
						||
 | 
						||
        #endregion
 | 
						||
        
 | 
						||
        #region 主线本地已存储关卡列表
 | 
						||
 | 
						||
        //主线关卡列表
 | 
						||
        private List<ALevel> _mainlineDBList = new List<ALevel>();
 | 
						||
        //主线关卡字典
 | 
						||
        private Dictionary<string, ALevel> _mainlineDBDict = new Dictionary<string, ALevel>();
 | 
						||
 | 
						||
        #endregion
 | 
						||
        
 | 
						||
        #region Daily本地已存储关卡列表
 | 
						||
 | 
						||
        //每日挑战列表
 | 
						||
        private List<ALevel> _dailyLevelsDBList = new List<ALevel>();
 | 
						||
        //每日挑战字典
 | 
						||
        private Dictionary<string, ALevel> _dailyLevelsDBDict = new Dictionary<string, ALevel>();
 | 
						||
        //每日挑战日期和关卡对照字典
 | 
						||
        private Dictionary<string, ALevel> _dailyDT2Level = new Dictionary<string, ALevel>();
 | 
						||
 | 
						||
        #endregion
 | 
						||
        
 | 
						||
        
 | 
						||
        private string version = "";
 | 
						||
        public bool challengeConfigLoaded = false;
 | 
						||
        
 | 
						||
        public void Initialize()
 | 
						||
        {
 | 
						||
            
 | 
						||
        }
 | 
						||
        
 | 
						||
        /// <summary>
 | 
						||
        /// 通过PSDID获取关卡数据
 | 
						||
        /// </summary>
 | 
						||
        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;
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 获取关卡池第一个关卡
 | 
						||
        /// </summary>
 | 
						||
        /// <returns></returns>
 | 
						||
        public ALevel GetLevelPoolFirst()
 | 
						||
        {
 | 
						||
            ALevel aLevel = null;
 | 
						||
            if (_levelPoolList.Count > 0)
 | 
						||
            {
 | 
						||
                aLevel = _levelPoolList[0];
 | 
						||
            }
 | 
						||
            return aLevel;
 | 
						||
        }
 | 
						||
        
 | 
						||
        /// <summary>
 | 
						||
        /// 获取Daily关卡池第一个关卡
 | 
						||
        /// </summary>
 | 
						||
        /// <returns></returns>
 | 
						||
        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<string, APatch> ParsePatches(string txt)
 | 
						||
        {
 | 
						||
            Dictionary<string, APatch> patchesDB = new Dictionary<string, APatch>();
 | 
						||
            Debug.Log(txt);
 | 
						||
            Dictionary<string, APatch> patchesDB1 = Utility.Json.Deserialize<Dictionary<string, APatch>>(txt);
 | 
						||
            foreach (KeyValuePair<string, APatch> 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<string, APatch> 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;
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 通过关卡名称获取PSD ID
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="name">关卡名称</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public Tuple<string, LevelType> 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<string, LevelType>(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 "";
 | 
						||
        }
 | 
						||
    }
 | 
						||
} |