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 "";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|