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 _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 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; // } // } }