176 lines
3.9 KiB
C#
176 lines
3.9 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using cfg.LevelCfg;
|
||
using cfg.RedPoint;
|
||
using Gameplay.Level;
|
||
using Gameplay.Net;
|
||
|
||
/// <summary>
|
||
/// 关卡组信息
|
||
/// </summary>
|
||
public class LevelGroupInfo : IRedPointTreeNode
|
||
{
|
||
#region 属性
|
||
/// <summary>
|
||
/// 关卡信息列表
|
||
/// </summary>
|
||
public List<LevelInfo> ListLevelInfo { get; private set; } = new();
|
||
|
||
/// <summary>
|
||
/// 关卡组配置
|
||
/// </summary>
|
||
public DataLevelGroup Cfg { get; private set; }
|
||
|
||
/// <summary>
|
||
/// 章节信息
|
||
/// </summary>
|
||
public ChapterInfo ChapterInfo
|
||
{
|
||
get { return LevelManager.Instance.GetChapterInfoByID(Cfg.ChapterID); }
|
||
}
|
||
|
||
public RedPointNode RedPoint { get; private set; }
|
||
|
||
/// <summary>
|
||
/// 当前已经领取的奖励的最大index,从1开始
|
||
/// </summary>
|
||
public int OwnRewardMaxIndex
|
||
{
|
||
get { return Actor.Instance.Level.GetChapterRewardIndex(Cfg.Id); }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 星星数量
|
||
/// </summary>
|
||
public int StarCount
|
||
{
|
||
get
|
||
{
|
||
int count = 0;
|
||
foreach (LevelInfo levelInfo in ListLevelInfo)
|
||
{
|
||
count += levelInfo.StarCount;
|
||
}
|
||
|
||
return count;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 最大星星数量
|
||
/// </summary>
|
||
public int StarMax
|
||
{
|
||
get { return ListLevelInfo.Count * (int)NLDPB.GlobalDefine.MaxLevelStar; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否锁住
|
||
/// </summary>
|
||
public bool IsLock
|
||
{
|
||
get
|
||
{
|
||
foreach (LevelInfo levelInfo in ListLevelInfo)
|
||
{
|
||
if (!levelInfo.IsLock)
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否有可以领取的奖励
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public bool IsHasGetReward
|
||
{
|
||
get
|
||
{
|
||
int curIndex = 1;
|
||
for (int i = 0; i < Cfg.StarList.Length; ++i)
|
||
{
|
||
if (StarCount < Cfg.StarList[i])
|
||
break;
|
||
|
||
curIndex = i + 1;
|
||
}
|
||
|
||
return curIndex > OwnRewardMaxIndex;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取下一个目标星级
|
||
/// </summary>
|
||
public int NextTargerStar
|
||
{
|
||
get
|
||
{
|
||
int target = StarCount;
|
||
for (int i = Cfg.StarList.Length - 1; i >= 0; --i)
|
||
{
|
||
if (Cfg.StarList[i] > StarCount)
|
||
target = Cfg.StarList[i];
|
||
else
|
||
break;
|
||
}
|
||
|
||
return target;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
public LevelGroupInfo(DataLevelGroup config)
|
||
{
|
||
Cfg = config;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加关卡
|
||
/// </summary>
|
||
/// <param name="levelInfo"></param>
|
||
public void AddLevel(LevelInfo levelInfo)
|
||
{
|
||
if (ListLevelInfo.Contains(levelInfo))
|
||
{
|
||
DebugUtil.LogError($"添加重复的关卡,关卡ID:{levelInfo.Cfg.Id}");
|
||
return;
|
||
}
|
||
|
||
ListLevelInfo.Add(levelInfo);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 是否可以获得某个章节奖励,index从1开始
|
||
/// </summary>
|
||
/// <param name="index"></param>
|
||
/// <returns></returns>
|
||
public bool IsGetReward(int index)
|
||
{
|
||
return index > 0 &&
|
||
index <= Cfg.StarList.Length &&
|
||
StarCount >= Cfg.StarList[index - 1] &&
|
||
OwnRewardMaxIndex < index;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 计算红点树
|
||
/// </summary>
|
||
/// <param name="parent"></param>
|
||
public void ConstructRedPointTree(RedPointNode parent)
|
||
{
|
||
RedPoint = RedPointManager.Instance.AddDynamicNode(NodeType.Normal, parent);
|
||
foreach (LevelInfo levelInfo in ListLevelInfo)
|
||
{
|
||
levelInfo.ConstructRedPointTree(RedPoint);
|
||
}
|
||
}
|
||
|
||
public void ConstructRedPointTree(int parentID)
|
||
{
|
||
|
||
}
|
||
} |