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

133 lines
3.1 KiB
C#
Raw 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;
using System.Collections.Generic;
using cfg.LevelCfg;
using cfg.RedPoint;
using Gameplay.Level;
using Gameplay.Net;
using UnityEngine;
/// <summary>
/// 关卡组信息
/// </summary>
public class LevelGroupInfo : IEnumerable<LevelInfo>, IRedPointTreeNode
{
/// <summary>
/// 关卡组配置
/// </summary>
private DataLevelGroup config;
/// <summary>
/// 关卡信息列表
/// </summary>
private List<LevelInfo> listLevelInfo = new();
/// <summary>
/// 红点
/// </summary>
private RedPointNode redPointNode;
/// <summary>
/// 关卡组配置ID
/// </summary>
public int ID { get { return config.Id; } }
/// <summary>
/// 章节ID
/// </summary>
public int ChapterID => config.ChapterID;
public ChapterInfo ChapterInfo => LevelManager.Instance.GetChapterInfoByID(ChapterID);
public E_LevelDifficulty LevelDifficulty => config.LevelDifficulty;
public int[] StarList => config.StarList;
public int[] Rewards => config.Rewards;
public RedPointNode RedPointNode => redPointNode;
/// <summary>
/// 当前已经领取的奖励的最大index,从1开始
/// </summary>
public int OwnRewardMaxIndex => Actor.Instance.Level.GetChapterRewardIndex(ID);
public int StarCount
{
get
{
var count = 0;
foreach (var levelInfo in listLevelInfo)
{
count += levelInfo.StarCount;
}
return count;
}
}
public int StarMax => listLevelInfo.Count * 3;
public bool IsLock
{
get
{
foreach (var levelInfo in listLevelInfo)
{
if (!levelInfo.IsLock)
return false;
}
return true;
}
}
public LevelGroupInfo(DataLevelGroup config)
{
this.config = config;
}
public void AddLevel(LevelInfo levelInfo)
{
if (!listLevelInfo.Contains(levelInfo))
{
listLevelInfo.Add(levelInfo);
}
else
{
DebugUtil.LogError($"cant add level,level id:{levelInfo.Cfg.Id}");
}
}
/// <summary>
/// 是否可以获得某个章节奖励index从1开始
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public bool CanGetReward(int index)
{
var alreadyGetIndex = OwnRewardMaxIndex;
return index > 0 && index <= StarList.Length && StarCount >= StarList[index - 1] && alreadyGetIndex < index;
}
public void ConstructRedPointTree(RedPointNode parent)
{
redPointNode = RedPointManager.Instance.AddDynamicNode(NodeType.Normal, parent);
foreach (var levelInfo in listLevelInfo)
{
levelInfo.ConstructRedPointTree(redPointNode);
}
}
public IEnumerator<LevelInfo> GetEnumerator()
{
return listLevelInfo.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public void ConstructRedPointTree(int parentID)
{
throw new System.NotImplementedException();
}
}