2023-10-24 14:58:21 +08:00
|
|
|
|
using System.Collections;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using cfg.LevelCfg;
|
2023-11-02 20:02:10 +08:00
|
|
|
|
using cfg.RedPoint;
|
2024-01-19 14:00:42 +08:00
|
|
|
|
using Gameplay.Level;
|
2023-10-30 18:33:18 +08:00
|
|
|
|
using Gameplay.Net;
|
2023-10-24 14:58:21 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
2024-09-02 14:08:35 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 关卡组信息
|
|
|
|
|
|
/// </summary>
|
2024-06-27 18:55:53 +08:00
|
|
|
|
public class LevelGroupInfo : IEnumerable<LevelInfo>, IRedPointTreeNode
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-09-02 14:08:35 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 关卡组配置
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private DataLevelGroup config;
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 关卡信息列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private List<LevelInfo> listLevelInfo = new();
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 红点
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private RedPointNode redPointNode;
|
2023-11-02 20:02:10 +08:00
|
|
|
|
|
2024-09-02 14:08:35 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 关卡组配置ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int ID { get { return config.Id; } }
|
2023-10-24 14:58:21 +08:00
|
|
|
|
|
2024-09-02 14:08:35 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 章节ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int ChapterID => config.ChapterID;
|
2023-10-24 14:58:21 +08:00
|
|
|
|
|
2024-01-19 14:00:42 +08:00
|
|
|
|
public ChapterInfo ChapterInfo => LevelManager.Instance.GetChapterInfoByID(ChapterID);
|
2024-06-27 18:55:53 +08:00
|
|
|
|
|
2024-09-02 14:28:13 +08:00
|
|
|
|
public E_LevelDifficulty LevelDifficulty => config.LevelDifficulty;
|
2023-10-24 14:58:21 +08:00
|
|
|
|
|
2024-09-02 14:08:35 +08:00
|
|
|
|
public int[] StarList => config.StarList;
|
2023-10-24 14:58:21 +08:00
|
|
|
|
|
2024-09-02 14:08:35 +08:00
|
|
|
|
public int[] Rewards => config.Rewards;
|
2023-10-24 14:58:21 +08:00
|
|
|
|
|
2024-09-02 14:08:35 +08:00
|
|
|
|
public RedPointNode RedPointNode => redPointNode;
|
2023-11-02 20:02:10 +08:00
|
|
|
|
|
2023-10-30 18:33:18 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 当前已经领取的奖励的最大index,从1开始
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int OwnRewardMaxIndex => Actor.Instance.Level.GetChapterRewardIndex(ID);
|
|
|
|
|
|
|
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 levelInfo in listLevelInfo)
|
2023-10-26 20:20:11 +08:00
|
|
|
|
{
|
|
|
|
|
|
count += levelInfo.StarCount;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return count;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-02 14:08:35 +08:00
|
|
|
|
public int StarMax => listLevelInfo.Count * 3;
|
2023-10-26 20:20:11 +08:00
|
|
|
|
|
|
|
|
|
|
public bool IsLock
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
2024-09-02 14:08:35 +08:00
|
|
|
|
foreach (var levelInfo in listLevelInfo)
|
2023-10-26 20:20:11 +08:00
|
|
|
|
{
|
2023-11-01 13:33:20 +08:00
|
|
|
|
if (!levelInfo.IsLock)
|
2023-10-26 20:20:11 +08:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-01-05 19:15:21 +08:00
|
|
|
|
public LevelGroupInfo(DataLevelGroup config)
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-09-02 14:08:35 +08:00
|
|
|
|
this.config = config;
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void AddLevel(LevelInfo levelInfo)
|
|
|
|
|
|
{
|
2024-09-02 14:08:35 +08:00
|
|
|
|
if (!listLevelInfo.Contains(levelInfo))
|
2023-10-24 14:58:21 +08:00
|
|
|
|
{
|
2024-09-02 14:08:35 +08:00
|
|
|
|
listLevelInfo.Add(levelInfo);
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2024-09-02 14:55:43 +08:00
|
|
|
|
DebugUtil.LogError($"cant add level,level id:{levelInfo.Cfg.Id}");
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-10-26 20:20:11 +08:00
|
|
|
|
|
2023-10-30 18:33:18 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否可以获得某个章节奖励,index从1开始
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="index"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public bool CanGetReward(int index)
|
|
|
|
|
|
{
|
2024-01-18 17:16:20 +08:00
|
|
|
|
var alreadyGetIndex = OwnRewardMaxIndex;
|
|
|
|
|
|
return index > 0 && index <= StarList.Length && StarCount >= StarList[index - 1] && alreadyGetIndex < index;
|
2023-10-30 18:33:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-02 20:02:10 +08:00
|
|
|
|
public void ConstructRedPointTree(RedPointNode parent)
|
|
|
|
|
|
{
|
2024-09-02 14:08:35 +08:00
|
|
|
|
redPointNode = RedPointManager.Instance.AddDynamicNode(NodeType.Normal, parent);
|
|
|
|
|
|
foreach (var levelInfo in listLevelInfo)
|
2023-11-02 20:02:10 +08:00
|
|
|
|
{
|
2024-09-02 14:08:35 +08:00
|
|
|
|
levelInfo.ConstructRedPointTree(redPointNode);
|
2023-11-02 20:02:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-01-18 16:02:45 +08:00
|
|
|
|
|
|
|
|
|
|
public IEnumerator<LevelInfo> GetEnumerator()
|
|
|
|
|
|
{
|
2024-09-02 14:08:35 +08:00
|
|
|
|
return listLevelInfo.GetEnumerator();
|
2024-01-18 16:02:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
|
|
|
|
{
|
|
|
|
|
|
return GetEnumerator();
|
|
|
|
|
|
}
|
2024-06-27 18:55:53 +08:00
|
|
|
|
|
|
|
|
|
|
public void ConstructRedPointTree(int parentID)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new System.NotImplementedException();
|
|
|
|
|
|
}
|
2023-10-24 14:58:21 +08:00
|
|
|
|
}
|