151 lines
4.2 KiB
C#
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);
|
|
}
|
|
} |