using cfg.ActorCfg; using Framework; using Gameplay; using Gameplay.Net; using PhxhSDK; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using static MagicaCloth2.TeamManager; /// /// 抽卡管理器 /// 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.CanRaffle) 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); } }