NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/FunctionLock/FunctionLockManager.cs

109 lines
3.1 KiB
C#
Raw Normal View History

2025-04-11 13:47:41 +08:00
using cfg.FunctionLockCfg;
using Framework;
using Framework.Condition;
2025-04-10 15:19:01 +08:00
using Gameplay.Net;
2025-04-11 13:47:41 +08:00
using Gameplay.PopUp;
2025-04-10 15:19:01 +08:00
using NLDPB;
2025-04-10 13:36:39 +08:00
using PhxhSDK;
2025-04-11 13:47:41 +08:00
using System.Collections.Generic;
2025-04-10 13:36:39 +08:00
namespace Gameplay.FunctionLock
{
/// <summary>
/// 功能锁管理器
/// </summary>
2025-04-11 13:47:41 +08:00
public sealed class FunctionLockManager : Singlenton<FunctionLockManager>, IInitable
2025-04-10 13:36:39 +08:00
{
2025-04-10 15:19:01 +08:00
/// <summary>
/// 服务器功能锁id(按位存)
/// </summary>
private int ServerFunctionLockId;
2025-04-11 13:47:41 +08:00
/// <summary>
/// 条件对应的功能锁配置字典key条件idvalue:功能锁
/// </summary>
private Dictionary<int, DataFunctionLock> dicReaction;
/// <summary>
/// 功能锁弹窗
/// </summary>
private FunctionUnlockPopUp functionUnlockPopUp;
public void Init()
{
dicReaction = new Dictionary<int, DataFunctionLock>();
EventManager.Instance.Register(EventManager.EventName.AllConfigLoad, OnInit);
}
public void Release()
{
EventManager.Instance.Unregister(EventManager.EventName.AllConfigLoad, OnInit);
dicReaction?.Clear();
}
2025-04-10 15:19:01 +08:00
/// <summary>
/// 初始化功能锁
/// </summary>
public void InitFunctionLock()
{
ServerFunctionLockId = (int)Actor.Instance.Logic.GetCount((uint)LogicID.LockStatus);
}
2025-04-10 13:36:39 +08:00
/// <summary>
/// 是否解锁
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public bool IsUnlock(int id)
{
2025-04-10 15:19:01 +08:00
return (id & ServerFunctionLockId) == id;
}
/// <summary>
/// 保存服务器
/// </summary>
/// <param name="flag"></param>
public void SaveServer(int flag)
{
int savaId = 1 << (flag - 1);
ServerFunctionLockId |= savaId;
NetHelper.SaveFunctionLock(ServerFunctionLockId);
2025-04-10 13:36:39 +08:00
}
2025-04-11 13:47:41 +08:00
/// <summary>
/// 初始化
/// </summary>
private void OnInit()
{
foreach (DataFunctionLock cfg in TableManager.Instance.Tables.FunctionLockConfig.DataList)
{
if (IsUnlock(cfg.ServerFlag)) // 已经解锁的不管
continue;
dicReaction[ConditionReactor.Instance.AddReaction(cfg.UnlockCondition, OnFunctionUnlockByCondition)] = cfg;
}
}
/// <summary>
/// 根据条件进行功能解锁
/// </summary>
private void OnFunctionUnlockByCondition(bool conditionResult, object callBackParam, int reactionID)
{
if (!conditionResult)
return;
if (!dicReaction.TryGetValue(reactionID, out DataFunctionLock cfg))
return;
ConditionReactor.Instance.RemoveReaction(reactionID);
dicReaction.Remove(reactionID);
if (null == functionUnlockPopUp)
functionUnlockPopUp = new FunctionUnlockPopUp();
functionUnlockPopUp.AddFunctionUnlockCfg(cfg);
PopUpManager.Instance.AddPopUp(functionUnlockPopUp);
}
2025-04-10 13:36:39 +08:00
}
}