NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Guide/GuideManager.cs

96 lines
2.7 KiB
C#
Raw Normal View History

2024-05-22 16:31:29 +08:00
using cfg.GuideCfg;
2024-05-22 15:41:05 +08:00
using Framework;
using PhxhSDK;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 新手引导管理器
/// </summary>
public class GuideManager : Singlenton<GuideManager>, IInitable
{
2024-05-22 16:31:29 +08:00
/// <summary>
/// 新手引导配置字典key引导组Value引导步骤配置链表
/// </summary>
private Dictionary<int, LinkedList<DataGuideCfg>> dicGuideCfg;
/// <summary>
/// 是否启用新手引导
/// </summary>
public bool IsEnable { get; private set; }
2024-05-22 15:41:05 +08:00
/// <summary>
/// 是否引导中
/// </summary>
public bool IsGuiding { get; private set; }
public void Init()
{
EventManager.Instance.Register(EventManager.EventName.AllConfigLoad, InitData);
}
public void Release()
{
EventManager.Instance.Unregister(EventManager.EventName.AllConfigLoad, InitData);
}
/// <summary>
/// 初始化数据
/// </summary>
private void InitData()
{
2024-05-22 16:31:29 +08:00
IsGuiding = false;
dicGuideCfg = new();
foreach (DataGuideCfg cfg in TableManager.Instance.Tables.GuideConfig.DataList)
{
if (dicGuideCfg.ContainsKey(cfg.GroupId) && !IsFirstStep(cfg))
continue;
DataGuideCfg addCfg = cfg; // 记录要添加进链表的引导步骤配置
LinkedList<DataGuideCfg> linkCfg = new();
dicGuideCfg[cfg.GroupId] = linkCfg;
2024-05-22 15:41:05 +08:00
2024-05-22 19:08:14 +08:00
while (null != addCfg)
2024-05-22 16:31:29 +08:00
{
linkCfg.AddLast(addCfg);
addCfg = TableManager.Instance.Tables.GuideConfig.Get(addCfg.NextId);
}
}
#region 检验每个引导组的步骤顺序是否正常
foreach (LinkedList<DataGuideCfg> linkCfg in dicGuideCfg.Values)
{
DataGuideCfg preCfg = null;
foreach (DataGuideCfg cfg in linkCfg)
{
if (null == preCfg)
{
preCfg = cfg;
continue;
}
if (preCfg.NextId != cfg.Id)
{
Debug.LogError($"新手引导配置出错组id:{cfg.GroupId}, 当前步骤id:{preCfg.Id}, 实际下一步步骤id{preCfg.NextId}, 当前下一步步骤id{cfg.Id}");
IsEnable = false;
return;
}
else
preCfg = cfg;
}
}
#endregion
}
/// <summary>
/// 是否是引导组的第一步
/// </summary>
/// <returns></returns>
private bool IsFirstStep(DataGuideCfg dataGuideCfg)
{
return dataGuideCfg.Id == dataGuideCfg.GroupId;
2024-05-22 15:41:05 +08:00
}
}