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

152 lines
3.5 KiB
C#
Raw Normal View History

2023-10-24 14:58:21 +08:00
using System.Collections;
using System.Collections.Generic;
2023-10-26 20:20:11 +08:00
using System.Linq;
2023-10-24 14:58:21 +08:00
using cfg.LevelCfg;
using cfg.RedPoint;
2023-10-24 14:58:21 +08:00
using UnityEngine;
2024-09-02 14:08:35 +08:00
/// <summary>
/// 章节信息
/// </summary>
public class ChapterInfo: IRedPointTreeNode
2023-10-24 14:58:21 +08:00
{
2024-09-02 14:08:35 +08:00
/// <summary>
/// 章节配置
/// </summary>
private DataChapter cfg;
/// <summary>
/// 关卡组信息列表
/// </summary>
private List<LevelGroupInfo> listLevelGroupInfo = new();
/// <summary>
/// 红点
/// </summary>
private RedPointNode redPointNode;
2023-10-24 14:58:21 +08:00
2024-09-02 14:08:35 +08:00
#region 属性
/// <summary>
/// 章节配置ID
/// </summary>
public int ID { get { return cfg.Id; } }
2023-10-24 14:58:21 +08:00
2024-09-02 14:08:35 +08:00
public E_ChapterType ChapterType => cfg.Type;
2024-01-18 16:02:45 +08:00
2024-09-02 14:08:35 +08:00
public string MaterialIcon => cfg.MaterialIcon;
2023-10-24 14:58:21 +08:00
2024-09-02 14:08:35 +08:00
public string Name => StringManager.Instance.GetLocalizeTextByKey(cfg.Name);
2023-10-24 14:58:21 +08:00
2024-09-02 14:08:35 +08:00
public string Desc => StringManager.Instance.GetLocalizeTextByKey(cfg.Desc);
2023-10-24 14:58:21 +08:00
2024-02-06 13:29:01 +08:00
//章节序号
2024-09-02 14:08:35 +08:00
public int Index => listLevelGroupInfo[0].FirstOrDefault()?.ChapterIndex ?? 0;
2024-01-18 16:02:45 +08:00
2024-09-02 14:08:35 +08:00
public RedPointNode RedPointNode => redPointNode;
2024-01-18 16:02:45 +08:00
2024-01-05 19:35:51 +08:00
public LevelGroupInfo EasyLevelGroup
2023-10-26 20:20:11 +08:00
{
2024-09-02 14:28:13 +08:00
get { return listLevelGroupInfo.FirstOrDefault((cfg) => cfg.LevelDifficulty == E_LevelDifficulty.Easy); }
2023-10-26 20:20:11 +08:00
}
2024-01-18 16:02:45 +08:00
2024-01-05 19:35:51 +08:00
public LevelGroupInfo HardLevelGroup
2023-10-26 20:20:11 +08:00
{
2024-09-02 14:28:13 +08:00
get { return listLevelGroupInfo.FirstOrDefault((cfg) => cfg.LevelDifficulty == E_LevelDifficulty.Hard); }
2024-07-10 18:23:40 +08:00
}
2023-10-26 20:20:11 +08:00
public int StarCount
{
get
{
var count = 0;
2024-09-02 14:08:35 +08:00
foreach (var lgi in listLevelGroupInfo)
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:35:51 +08:00
count += lgi.StarCount;
2023-10-26 20:20:11 +08:00
}
return count;
}
}
public int StarMax
{
get
{
var count = 0;
2024-09-02 14:08:35 +08:00
foreach (var lgi in listLevelGroupInfo)
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:35:51 +08:00
count += lgi.StarMax;
2023-10-26 20:20:11 +08:00
}
return count;
}
}
public bool IsLock
{
get
{
2024-09-02 14:08:35 +08:00
foreach (var lgi in listLevelGroupInfo)
2023-10-26 20:20:11 +08:00
{
2024-01-05 19:35:51 +08:00
if (!lgi.IsLock)
2023-10-26 20:20:11 +08:00
return false;
}
return true;
}
}
2024-01-18 16:02:45 +08:00
public IEnumerable<LevelInfo> AllLevelInfo
{
get
{
2024-09-02 14:08:35 +08:00
foreach (var levelGroupInfo in listLevelGroupInfo)
2024-01-18 16:02:45 +08:00
{
foreach (var levelInfo in levelGroupInfo)
{
yield return levelInfo;
}
}
}
}
2024-09-02 14:08:35 +08:00
#endregion
2024-01-18 16:02:45 +08:00
2024-01-05 19:15:21 +08:00
public ChapterInfo(DataChapter config)
2023-10-24 14:58:21 +08:00
{
2024-09-02 14:08:35 +08:00
cfg = config;
2023-10-24 14:58:21 +08:00
}
2024-01-05 19:35:51 +08:00
public void AddLevelGroup(LevelGroupInfo levelGroupInfo)
2023-10-24 14:58:21 +08:00
{
2024-09-02 14:08:35 +08:00
if (!listLevelGroupInfo.Contains(levelGroupInfo))
2023-10-24 14:58:21 +08:00
{
2024-09-02 14:08:35 +08:00
listLevelGroupInfo.Add(levelGroupInfo);
2023-10-24 14:58:21 +08:00
}
else
{
2024-01-05 19:35:51 +08:00
DebugUtil.LogError($"cant add levelGroup,levelGroupID:{levelGroupInfo.ID}");
2023-10-24 14:58:21 +08:00
}
}
public void ConstructRedPointTree(int parentID)
{
2024-09-02 14:08:35 +08:00
redPointNode = RedPointManager.Instance.AddDynamicNode(NodeType.Normal, parentID);
foreach (var lgi in listLevelGroupInfo)
{
2024-09-02 14:08:35 +08:00
lgi.ConstructRedPointTree(redPointNode);
}
}
2024-01-18 16:02:45 +08:00
public void ConstructRedPointTree(RedPointNode parent)
{
throw new System.NotImplementedException();
}
2024-02-06 13:29:01 +08:00
// 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;
// }
// }
2023-10-24 14:58:21 +08:00
}