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