unity_art_puzzle_playable_luna/APPlayableLuna/Assets/Scripts/ConfigManager.cs

460 lines
12 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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