NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Raffle/RaffleManager.cs

151 lines
4.2 KiB
C#

using cfg.ActorCfg;
using Framework;
using Gameplay.Net;
using PhxhSDK;
using System;
using System.Collections.Generic;
/// <summary>
/// 抽卡管理器
/// </summary>
public class RaffleManager : Singlenton<RaffleManager>, IInitable
{
/// <summary>
/// 按钮数量,最多
/// </summary>
public const int RAFFLE_BUTTON_COUNT = 2;
/// <summary>
/// 抽卡券道具id集合
/// </summary>
private HashSet<int> setRaffleItemId;
/// <summary>
/// 抽卡结果数据
/// </summary>
private RaffleResultData resultData;
/// <summary>
/// 所有卡池数据字典
/// </summary>
public Dictionary<int, RaffleData> DicRaffleData { get; private set; }
/// <summary>
/// 显示的卡池数据列表
/// </summary>
public List<RaffleData> ListShowRaffle { get; private set; }
public void Init()
{
DicRaffleData = new Dictionary<int, RaffleData>();
ListShowRaffle = new List<RaffleData>();
setRaffleItemId = new HashSet<int>();
EventManager.Instance.Register(EventManager.EventName.AllConfigLoad, LoadRaffleData);
EventManager.Instance.Register(EventManager.EventName.RaffleRefresh, RefreshData);
EventManager.Instance.Register<uint>(EventManager.EventName.ItemChange, CheckRefreshData);
EventManager.Instance.Register(EventManager.EventName.RaffleResult, (Action<ItemCounts>)OnRaffleResult);
}
public void Release()
{
EventManager.Instance.Unregister(EventManager.EventName.RaffleResult, (Action<ItemCounts>)OnRaffleResult);
EventManager.Instance.Unregister<uint>(EventManager.EventName.ItemChange, CheckRefreshData);
EventManager.Instance.Unregister(EventManager.EventName.RaffleRefresh, RefreshData);
EventManager.Instance.Unregister(EventManager.EventName.AllConfigLoad, LoadRaffleData);
if (null != ListShowRaffle)
{
ListShowRaffle.Clear();
ListShowRaffle = null;
}
if (null != DicRaffleData)
{
DicRaffleData.Clear();
DicRaffleData = null;
}
if (null != setRaffleItemId)
{
setRaffleItemId.Clear();
setRaffleItemId = null;
}
}
/// <summary>
/// 抽卡校验
/// </summary>
public async void CheckRaffle(RaffleButtonData data)
{
if (data.IsFreeOne || data.IsTicketRaffle)
{
Raffle(data);
return;
}
await UI_RaffleExChangeController.Open(data);
}
/// <summary>
/// 抽卡
/// </summary>
/// <param name="data"></param>
public void Raffle(RaffleButtonData data)
{
if (null == resultData)
resultData = new RaffleResultData(data.Cfg);
else
resultData.Reset(data.Cfg);
NetHelper.Raffle((uint)data.Cfg.Id, data.IsFreeOne, (uint)data.Count);
}
/// <summary>
/// 加载卡池数据
/// </summary>
private void LoadRaffleData()
{
for (int i = 0; i < TableManager.Instance.Tables.Gacha.DataList.Count; ++i)
{
DataGacha dataGacha = TableManager.Instance.Tables.Gacha.DataList[i];
DicRaffleData[TableManager.Instance.Tables.Gacha.DataList[i].Id] = new RaffleData(dataGacha);
setRaffleItemId.Add(dataGacha.TicketItemID);
}
}
/// <summary>
/// 刷新数据
/// </summary>
private void RefreshData()
{
ListShowRaffle.Clear();
foreach (RaffleData raffleData in DicRaffleData.Values)
{
raffleData.Refresh();
if (raffleData.IsOpen)
ListShowRaffle.Add(raffleData);
}
}
/// <summary>
/// 检测是否刷新数据
/// </summary>
/// <returns></returns>
private void CheckRefreshData(uint itemID)
{
if (!setRaffleItemId.Contains((int)itemID)) // 只有抽卡券才刷新数据
return;
RefreshData();
}
/// <summary>
/// 抽卡结果
/// </summary>
/// <param name="itemCounts"></param>
private async void OnRaffleResult(ItemCounts itemCounts)
{
resultData.SetInfo(itemCounts);
await UI_RaffleAnimController.Open(resultData);
}
}