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