2023-10-19 15:00:19 +08:00
|
|
|
|
using Framework;
|
|
|
|
|
|
using System.Collections.Generic;
|
2023-10-26 20:20:11 +08:00
|
|
|
|
using System.Linq;
|
2024-01-18 16:02:45 +08:00
|
|
|
|
using cfg.LevelCfg;
|
2024-01-19 19:20:05 +08:00
|
|
|
|
using UnityEngine;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
|
|
|
|
|
namespace Gameplay.Level
|
|
|
|
|
|
{
|
2024-05-06 16:46:00 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 关卡管理器
|
|
|
|
|
|
/// </summary>
|
2023-10-19 15:00:19 +08:00
|
|
|
|
public partial class LevelManager
|
|
|
|
|
|
{
|
2024-01-19 19:20:05 +08:00
|
|
|
|
private const string LAST_FIGHT_LEVEL_PREFIX = "last_fight_level_";
|
|
|
|
|
|
|
2024-05-06 16:46:00 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 关卡信息字典
|
|
|
|
|
|
/// </summary>
|
2024-08-13 16:04:49 +08:00
|
|
|
|
private Dictionary<int, LevelInfo> dicLevelInfo = new();
|
2024-05-06 16:46:00 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 章节信息字典
|
|
|
|
|
|
/// </summary>
|
2024-08-13 16:04:49 +08:00
|
|
|
|
private Dictionary<int, ChapterInfo> dicChapterInfo = new();
|
2024-05-06 16:46:00 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 关卡组信息字典,key:关卡组id,value:关卡组信息
|
|
|
|
|
|
/// </summary>
|
2024-08-13 16:04:49 +08:00
|
|
|
|
private Dictionary<int, LevelGroupInfo> dicLevelGroupInfo = new();
|
2023-11-02 20:02:10 +08:00
|
|
|
|
private readonly int[] _levelGroupTypeRedPointIDArray = new[] { 101, 102, 103 };
|
2024-08-13 16:04:49 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 章节类型字典
|
|
|
|
|
|
/// </summary>
|
2024-09-02 14:08:35 +08:00
|
|
|
|
private Dictionary<E_ChapterType, List<ChapterInfo>> dicChapterType = new();
|
2024-01-19 14:00:42 +08:00
|
|
|
|
|
2024-07-09 13:37:27 +08:00
|
|
|
|
public List<LevelInfo> ListLevelInfo
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
get { return dicLevelInfo.Values.ToList(); }
|
2024-07-09 13:37:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private void InitData()
|
|
|
|
|
|
{
|
2024-09-02 14:55:43 +08:00
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.AllConfigLoad, OnAllConfigLoad);
|
|
|
|
|
|
EventManager.Instance.Register<int>(EventManager.EventName.NewLevelServerData, OnNewLevelServerData);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void ReleaseData()
|
|
|
|
|
|
{
|
2024-09-02 14:55:43 +08:00
|
|
|
|
EventManager.Instance.Unregister<int>(EventManager.EventName.NewLevelServerData, OnNewLevelServerData);
|
|
|
|
|
|
EventManager.Instance.Unregister(EventManager.EventName.AllConfigLoad, OnAllConfigLoad);
|
|
|
|
|
|
|
2023-11-02 20:02:10 +08:00
|
|
|
|
DisposeRedPointTree();
|
2024-08-13 16:04:49 +08:00
|
|
|
|
dicLevelInfo = null;
|
|
|
|
|
|
dicChapterInfo = null;
|
|
|
|
|
|
dicLevelGroupInfo = null;
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-13 16:04:49 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 加载配置
|
|
|
|
|
|
/// </summary>
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private void OnAllConfigLoad()
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-09-02 14:55:43 +08:00
|
|
|
|
LoadAllLevelInfo();
|
2023-10-24 14:58:21 +08:00
|
|
|
|
LoadAllLevelGroup();
|
2024-01-05 18:26:18 +08:00
|
|
|
|
LoadAllChapter();
|
2023-11-02 20:02:10 +08:00
|
|
|
|
ConstructRedPointTree();
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-13 16:04:49 +08:00
|
|
|
|
/// <summary>
|
2024-09-02 14:55:43 +08:00
|
|
|
|
/// 加载所有关卡信息
|
2024-08-13 16:04:49 +08:00
|
|
|
|
/// </summary>
|
2024-09-02 14:55:43 +08:00
|
|
|
|
private void LoadAllLevelInfo()
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
dicLevelInfo.Clear();
|
|
|
|
|
|
List<DataLevel> listAllLevelConfig = TableManager.Instance.Tables.Level.DataList;
|
|
|
|
|
|
|
|
|
|
|
|
foreach (DataLevel config in listAllLevelConfig)
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
dicLevelInfo.Add(config.Id, new LevelInfo(config));
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-06 16:46:00 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 加载所有章节
|
|
|
|
|
|
/// </summary>
|
2023-10-24 14:58:21 +08:00
|
|
|
|
private void LoadAllChapter()
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
dicChapterInfo.Clear();
|
|
|
|
|
|
foreach (LevelGroupInfo levelGroupInfo in dicLevelGroupInfo.Values)
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-09-02 18:51:47 +08:00
|
|
|
|
int chapterID = levelGroupInfo.Cfg.ChapterID;
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (!dicChapterInfo.TryGetValue(chapterID, out ChapterInfo chapterInfo))
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-05-06 16:46:00 +08:00
|
|
|
|
DataChapter config = TableManager.Instance.Tables.Chapter.Get(chapterID);
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (null != config)
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-01-05 19:15:21 +08:00
|
|
|
|
chapterInfo = new ChapterInfo(config);
|
2024-08-13 16:04:49 +08:00
|
|
|
|
dicChapterInfo.Add(chapterID, chapterInfo);
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
2024-08-13 16:04:49 +08:00
|
|
|
|
DebugUtil.LogError($"找不到章节配置,id:{chapterID}");
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-02 18:51:47 +08:00
|
|
|
|
chapterInfo?.AddLevelGroupInfo(levelGroupInfo);
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
2024-01-19 14:00:42 +08:00
|
|
|
|
|
2024-08-13 16:04:49 +08:00
|
|
|
|
foreach (ChapterInfo chapterInfo in dicChapterInfo.Values)
|
2024-01-19 14:00:42 +08:00
|
|
|
|
{
|
2024-09-02 18:51:47 +08:00
|
|
|
|
E_ChapterType chapterType = chapterInfo.Cfg.Type;
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (!dicChapterType.TryGetValue(chapterType, out List<ChapterInfo> list))
|
2024-01-19 14:00:42 +08:00
|
|
|
|
{
|
|
|
|
|
|
list = new();
|
2024-08-13 16:04:49 +08:00
|
|
|
|
dicChapterType.Add(chapterType, list);
|
2024-01-19 14:00:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
list.Add(chapterInfo);
|
|
|
|
|
|
}
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-06 16:46:00 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 加载所有关卡组信息
|
|
|
|
|
|
/// </summary>
|
2023-10-24 14:58:21 +08:00
|
|
|
|
private void LoadAllLevelGroup()
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
dicLevelGroupInfo.Clear();
|
|
|
|
|
|
foreach (LevelInfo levelInfo in dicLevelInfo.Values)
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-09-02 14:55:43 +08:00
|
|
|
|
int levelGroupID = levelInfo.Cfg.LevelGroupID;
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (!dicLevelGroupInfo.TryGetValue(levelGroupID, out LevelGroupInfo levelGroupInfo))
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-05-06 16:46:00 +08:00
|
|
|
|
DataLevelGroup config = TableManager.Instance.Tables.LevelGroupConfig.Get(levelGroupID);
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (null != config)
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-01-05 19:15:21 +08:00
|
|
|
|
levelGroupInfo = new LevelGroupInfo(config);
|
2024-08-13 16:04:49 +08:00
|
|
|
|
dicLevelGroupInfo.Add(levelGroupID, levelGroupInfo);
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
2024-08-13 16:04:49 +08:00
|
|
|
|
DebugUtil.LogError($"找不到关卡组配置, id: {levelGroupID}");
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-06 16:46:00 +08:00
|
|
|
|
levelGroupInfo?.AddLevel(levelInfo);
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-02 20:02:10 +08:00
|
|
|
|
private void ConstructRedPointTree()
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
foreach (ChapterInfo chapterInfo in dicChapterInfo.Values)
|
2023-11-02 20:02:10 +08:00
|
|
|
|
{
|
2024-09-02 18:51:47 +08:00
|
|
|
|
int index = (int)chapterInfo.Cfg.Type;
|
2023-11-02 20:02:10 +08:00
|
|
|
|
if (index < 0 || index > _levelGroupTypeRedPointIDArray.Length)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"index is out of range!index:{index}");
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-13 16:04:49 +08:00
|
|
|
|
int redPointParentID = _levelGroupTypeRedPointIDArray[index];
|
|
|
|
|
|
chapterInfo.ConstructRedPointTree(redPointParentID);
|
2023-11-02 20:02:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void DisposeRedPointTree()
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
foreach (ChapterInfo chapterInfo in dicChapterInfo.Values)
|
2023-11-02 20:02:10 +08:00
|
|
|
|
{
|
2024-09-02 18:51:47 +08:00
|
|
|
|
if (null != chapterInfo.RedPoint)
|
|
|
|
|
|
RedPointManager.Instance.RemoveDynamicNode(chapterInfo.RedPoint);
|
2023-11-02 20:02:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-13 16:04:49 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 新的关卡服务器数据
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="levelID"></param>
|
2023-10-19 15:00:19 +08:00
|
|
|
|
private void OnNewLevelServerData(int levelID)
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
LevelInfo levelInfo = GetLevelInfoByID(levelID);
|
|
|
|
|
|
levelInfo?.RefreshServerData(false);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-13 16:04:49 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 保存战斗关卡
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="levelInfo"></param>
|
2024-01-19 19:20:05 +08:00
|
|
|
|
private void SaveFightLevel(LevelInfo levelInfo)
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if(null == levelInfo)
|
2024-01-19 19:20:05 +08:00
|
|
|
|
return;
|
2024-08-13 16:04:49 +08:00
|
|
|
|
|
2024-09-02 14:55:43 +08:00
|
|
|
|
LevelGroupInfo levelGroupInfo = levelInfo.GroupInfo;
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if(null == levelGroupInfo)
|
2024-01-19 19:20:05 +08:00
|
|
|
|
return;
|
2024-08-13 16:04:49 +08:00
|
|
|
|
|
|
|
|
|
|
ChapterInfo chapterInfo = levelGroupInfo.ChapterInfo;
|
|
|
|
|
|
if(null == chapterInfo)
|
2024-01-19 19:20:05 +08:00
|
|
|
|
return;
|
2024-08-13 16:04:49 +08:00
|
|
|
|
|
2024-09-02 18:51:47 +08:00
|
|
|
|
PlayerPrefs.SetInt(GetChapterTypeSaveKey(chapterInfo.Cfg.Type), levelInfo.Cfg.Id);
|
2024-01-19 19:20:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-02 14:08:35 +08:00
|
|
|
|
private string GetChapterTypeSaveKey(E_ChapterType chapterType) => LAST_FIGHT_LEVEL_PREFIX + chapterType;
|
2024-01-19 19:20:05 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
#region API
|
2024-08-13 16:04:49 +08:00
|
|
|
|
public void RefreshAllLevelInfo()
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (LevelInfo levelInfo in dicLevelInfo.Values)
|
|
|
|
|
|
{
|
|
|
|
|
|
levelInfo?.RefreshServerData(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-10-24 14:58:21 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
public LevelInfo GetLevelInfoByID(int id)
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (!dicLevelInfo.TryGetValue(id, out var levelInfo))
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"找不到levelInfo,id:{id}");
|
|
|
|
|
|
}
|
2023-10-24 14:58:21 +08:00
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
return levelInfo;
|
|
|
|
|
|
}
|
2023-10-24 14:58:21 +08:00
|
|
|
|
|
2024-01-19 14:00:42 +08:00
|
|
|
|
public LevelGroupInfo GetLevelGroupInfoByID(int id)
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (!dicLevelGroupInfo.TryGetValue(id, out var chapterInfo))
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"找不到chapterInfo,id:{id}");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return chapterInfo;
|
|
|
|
|
|
}
|
2023-11-02 20:02:10 +08:00
|
|
|
|
|
2024-01-19 14:00:42 +08:00
|
|
|
|
public ChapterInfo GetChapterInfoByID(int id)
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (!dicChapterInfo.TryGetValue(id, out var levelGroupInfo))
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"找不到levelGroupInfo,id:{id}");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return levelGroupInfo;
|
|
|
|
|
|
}
|
2023-10-26 20:20:11 +08:00
|
|
|
|
|
2024-01-05 19:35:51 +08:00
|
|
|
|
public List<ChapterInfo> GetAllChapterInfo()
|
2023-10-26 20:20:11 +08:00
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
return dicChapterInfo.Values.ToList();
|
2023-10-26 20:20:11 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-04-07 16:22:58 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据章节类型获取章节信息
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="levelChapterType"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2024-09-03 19:22:47 +08:00
|
|
|
|
public bool TryGetChapterInfosByType(E_ChapterType type, out List<ChapterInfo> listChapterInfo)
|
2024-04-07 16:22:58 +08:00
|
|
|
|
{
|
2024-09-03 19:22:47 +08:00
|
|
|
|
if (dicChapterType.TryGetValue(type, out listChapterInfo) && null != listChapterInfo)
|
|
|
|
|
|
return true;
|
2024-04-07 16:22:58 +08:00
|
|
|
|
|
2024-09-03 19:22:47 +08:00
|
|
|
|
return false;
|
2024-04-07 16:22:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-10-26 20:20:11 +08:00
|
|
|
|
public List<LevelInfo> GetAllLevelInfo()
|
|
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
return dicLevelInfo.Values.ToList();
|
2023-10-26 20:20:11 +08:00
|
|
|
|
}
|
2023-11-02 20:02:10 +08:00
|
|
|
|
|
2024-01-05 19:35:51 +08:00
|
|
|
|
public List<LevelGroupInfo> GetAllLevelGroupInfo()
|
2023-10-26 20:20:11 +08:00
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
return dicLevelGroupInfo.Values.ToList();
|
2023-10-26 20:20:11 +08:00
|
|
|
|
}
|
2023-11-02 20:02:10 +08:00
|
|
|
|
|
2024-04-07 16:22:58 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取某种关卡类型的最新进度
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="type"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2024-09-02 14:08:35 +08:00
|
|
|
|
public LevelInfo GetLatestLevelInfo(E_ChapterType type)
|
2024-01-19 14:00:42 +08:00
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (dicChapterType.TryGetValue(type, out var list))
|
2024-01-19 14:00:42 +08:00
|
|
|
|
{
|
2024-08-26 19:33:13 +08:00
|
|
|
|
ChapterInfo latestChapterInfo = list.Where(chapterInfo => !chapterInfo.IsLock).ToList()[^1];
|
|
|
|
|
|
if (null == latestChapterInfo)
|
2024-01-19 14:00:42 +08:00
|
|
|
|
return null;
|
2024-08-26 19:33:13 +08:00
|
|
|
|
|
|
|
|
|
|
List<LevelInfo> allUnlockLevels = latestChapterInfo.AllLevelInfo.Where(level => !level.IsLock).ToList();
|
2024-09-02 14:55:43 +08:00
|
|
|
|
allUnlockLevels.Sort((a, b) => a.Cfg.Id.CompareTo(b.Cfg.Id));
|
2024-08-26 19:33:13 +08:00
|
|
|
|
|
2024-01-19 14:00:42 +08:00
|
|
|
|
return allUnlockLevels[^1];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-01-19 19:20:05 +08:00
|
|
|
|
//获取某种关卡类型上一次战斗的关卡
|
2024-09-02 14:08:35 +08:00
|
|
|
|
public LevelInfo GetLastFightLevelInfo(E_ChapterType type)
|
2024-01-19 19:20:05 +08:00
|
|
|
|
{
|
|
|
|
|
|
var key = GetChapterTypeSaveKey(type);
|
|
|
|
|
|
if (!PlayerPrefs.HasKey(key))
|
|
|
|
|
|
{
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var levelID = PlayerPrefs.GetInt(key);
|
|
|
|
|
|
var levelInfo = GetLevelInfoByID(levelID);
|
|
|
|
|
|
return levelInfo;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-24 14:21:28 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据关卡ID获取关卡所属章节类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="levelID"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2024-09-02 14:08:35 +08:00
|
|
|
|
public E_ChapterType GetLevelChapterType(int levelID)
|
2024-05-24 14:21:28 +08:00
|
|
|
|
{
|
2024-08-13 16:04:49 +08:00
|
|
|
|
if (!dicLevelInfo.ContainsKey(levelID))
|
2024-05-24 14:21:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("error level ID! ");
|
2024-09-02 14:08:35 +08:00
|
|
|
|
return E_ChapterType.Main;
|
2024-05-24 14:21:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
var levelInfo = GetLevelInfoByID(levelID);
|
2024-09-02 14:55:43 +08:00
|
|
|
|
int levelGroupID = levelInfo.Cfg.LevelGroupID;
|
2024-05-24 14:21:28 +08:00
|
|
|
|
DataLevelGroup config = TableManager.Instance.Tables.LevelGroupConfig.Get(levelGroupID);
|
|
|
|
|
|
|
|
|
|
|
|
DataChapter chapterCfg = TableManager.Instance.Tables.Chapter.Get(config.ChapterID);
|
|
|
|
|
|
var chapterInfo = new ChapterInfo(chapterCfg);
|
2024-09-02 18:51:47 +08:00
|
|
|
|
return chapterInfo.Cfg.Type;
|
2024-05-24 14:21:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 判断关卡是否解锁
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="levelID"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool CheckLevelUnlock(int levelID)
|
|
|
|
|
|
{
|
2024-05-24 14:50:10 +08:00
|
|
|
|
var levelInfo = GetLevelInfoByID(levelID);
|
|
|
|
|
|
if(levelInfo == null)
|
2024-05-24 14:21:28 +08:00
|
|
|
|
{
|
2024-05-24 14:50:10 +08:00
|
|
|
|
DebugUtil.LogError($"cant find levelInfo,id:{levelID}");
|
2024-05-24 14:21:28 +08:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2024-05-24 16:21:22 +08:00
|
|
|
|
return !levelInfo.IsLock;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string LevelIDToNum(int levelID)
|
|
|
|
|
|
{
|
|
|
|
|
|
var levelInfo = GetLevelInfoByID(levelID);
|
|
|
|
|
|
if(levelInfo == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"cant find levelInfo,id:{levelID}");
|
|
|
|
|
|
return string.Empty;
|
|
|
|
|
|
}
|
|
|
|
|
|
return levelInfo.ChapterIndex + "-" + levelInfo.LevelIndex;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string LevelIDToName(int levelID)
|
|
|
|
|
|
{
|
|
|
|
|
|
var levelInfo = GetLevelInfoByID(levelID);
|
|
|
|
|
|
if (levelInfo == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"cant find levelInfo,id:{levelID}");
|
|
|
|
|
|
return string.Empty;
|
|
|
|
|
|
}
|
|
|
|
|
|
return levelInfo.Name;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string GetLevelNum(LevelInfo info)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (info == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("info is null");
|
|
|
|
|
|
return string.Empty;
|
|
|
|
|
|
}
|
|
|
|
|
|
return info.ChapterIndex + "-" + info.LevelIndex;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string GetLevelName(LevelInfo info)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (info == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("info is null");
|
|
|
|
|
|
return string.Empty;
|
|
|
|
|
|
}
|
|
|
|
|
|
return info.Name;
|
2024-05-24 14:21:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|