NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Level/ChapterInfo.cs

137 lines
3.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using cfg.LevelCfg;
using cfg.RedPoint;
using UnityEngine;
public class ChapterInfo
{
private DataChapter _config;
private List<LevelGroupInfo> _levelGroupList = new();
private RedPointNode _redPointNode;
public int ID => _config.Id;
public LevelChapterType ChapterType => _config.Type;
public string MaterialIcon => _config.MaterialIcon;
public string Name => StringManager.Instance.GetLocalizeTextByKey(_config.Name);
public string Desc => StringManager.Instance.GetLocalizeTextByKey(_config.Desc);
//章节序号
public int Index => _levelGroupList[0].FirstOrDefault()?.ChapterIndex ?? 0;
public RedPointNode RedPointNode => _redPointNode;
public LevelGroupInfo PlotLevelGroup
{
get { return _levelGroupList.FirstOrDefault((lgi) => lgi.LevelType == LevelType.Plot); }
}
public LevelGroupInfo EasyLevelGroup
{
get { return _levelGroupList.FirstOrDefault((lgi) => lgi.LevelType == LevelType.Easy); }
}
public LevelGroupInfo HardLevelGroup
{
get { return _levelGroupList.FirstOrDefault((lgi) => lgi.LevelType == LevelType.Hard); }
}
public int StarCount
{
get
{
var count = 0;
foreach (var lgi in _levelGroupList)
{
count += lgi.StarCount;
}
return count;
}
}
public int StarMax
{
get
{
var count = 0;
foreach (var lgi in _levelGroupList)
{
count += lgi.StarMax;
}
return count;
}
}
public bool IsLock
{
get
{
foreach (var lgi in _levelGroupList)
{
if (!lgi.IsLock)
return false;
}
return true;
}
}
public IEnumerable<LevelInfo> AllLevelInfo
{
get
{
foreach (var levelGroupInfo in _levelGroupList)
{
foreach (var levelInfo in levelGroupInfo)
{
yield return levelInfo;
}
}
}
}
public ChapterInfo(DataChapter config)
{
_config = config;
}
public void AddLevelGroup(LevelGroupInfo levelGroupInfo)
{
if (!_levelGroupList.Contains(levelGroupInfo))
{
_levelGroupList.Add(levelGroupInfo);
}
else
{
DebugUtil.LogError($"cant add levelGroup,levelGroupID:{levelGroupInfo.ID}");
}
}
public void ConstructRedPointTree(int parentID)
{
_redPointNode = RedPointManager.Instance.AddDynamicNode(NodeType.Normal, parentID);
foreach (var lgi in _levelGroupList)
{
lgi.ConstructRedPointTree(_redPointNode);
}
}
// public void InitAllLevelSortIndex()
// {
// var allLevelInfo = AllLevelInfo.ToList();
// allLevelInfo.Sort((a, b) => a.ID.CompareTo(b.ID));
// for (int i = 0; i < allLevelInfo.Count; i++)
// {
// allLevelInfo[i].LevelIndex = i;
// }
// }
}