using cfg.ActorCfg; using cfg.RedPoint; using Gameplay.Net; using System.Collections.Generic; /// /// 卡池数据 /// public sealed class DrawInfo : IRedPointTreeNode { #region 属性 /// /// 卡池配置数据 /// public DataGacha Cfg { get; private set; } /// /// 卡池累计抽取数据 /// public RaffleCount ServerData { get; private set; } /// /// 红点 /// public RedPointNode RedPoint { get; private set; } /// /// 有可以抽取的 /// public bool IsDraw { get { for (int i = 0; i < Cfg.DrawType.Length; ++i) { if (ListDrawButtonData[i].IsDraw) return true; } return false; } } /// /// 抽卡按钮数据 /// public List ListDrawButtonData { get; private set; } /// /// 剩余免费单抽次数 /// public int FreeOneCount { get { if (null == ServerData) return Cfg.DailyFreeCount; if (Cfg.DailyFreeCount <= ServerData.FreeCount) return 0; else return Cfg.DailyFreeCount - (int)ServerData.FreeCount; } } /// /// 剩余限定单抽次数 /// public int LimitOneCount { get { if (null == ServerData) return Cfg.LimitOneCount; if (Cfg.LimitOneCount <= ServerData.LimitOne) return 0; else return Cfg.LimitOneCount - (int)ServerData.LimitOne; } } /// /// 是否可以免费单抽 /// public bool IsFreeOne { get { return FreeOneCount > 0; } } /// /// 是否可以限定单抽 /// public bool IsLimitOne { get { return LimitOneCount > 0; } } /// /// 剩余限定十连抽次数 /// public int LimitTenCount { get { if (null == ServerData) return Cfg.LimitTenCount; if (Cfg.LimitTenCount <= ServerData.LimitTen) return 0; else return Cfg.LimitTenCount - (int)ServerData.LimitTen; } } /// /// 是否可以限定十连抽 /// public bool IsLimitTen { get { return LimitTenCount >= 1; } } #endregion public DrawInfo(DataGacha cfg) { Cfg = cfg; ListDrawButtonData = new(4) { new DrawButtonData(), new DrawButtonData(), new DrawButtonData(), new DrawButtonData(), }; ConstructRedPointTree(50); } public void Refresh() { ServerData = Actor.Instance.Raffle.GetRaffleInfo((uint)Cfg.Id); for (int i = 0; i < Cfg.DrawType.Length; ++i) { GachaDrawType gachaDrawType = Cfg.DrawType[i]; switch (gachaDrawType) { case GachaDrawType.NormalOne: { int count = (int)E_DrawCount.One; if (Actor.Instance.Item.GetItemCount(Cfg.TicketItemID) >= (uint)E_DrawCount.One) ListDrawButtonData[i] = new(Cfg, gachaDrawType, E_DrawCount.One, true, IsFreeOne, Cfg.TicketItemID, count, false); else ListDrawButtonData[i] = new(Cfg, gachaDrawType, E_DrawCount.One, true, IsFreeOne, Cfg.Cost[i].Id, Cfg.Cost[i].Count, true); } break; case GachaDrawType.NormalTen: { int count = (int)E_DrawCount.Ten; if (Actor.Instance.Item.GetItemCount(Cfg.TicketItemID) >= (uint)E_DrawCount.Ten) ListDrawButtonData[i] = new(Cfg, gachaDrawType, E_DrawCount.Ten, true, false, Cfg.TicketItemID, count, false); else ListDrawButtonData[i] = new(Cfg, gachaDrawType, E_DrawCount.Ten, true, false, Cfg.Cost[i].Id, Cfg.Cost[i].Count, true); } break; case GachaDrawType.LimitOne: { ListDrawButtonData[i] = new(Cfg, gachaDrawType, E_DrawCount.One, IsLimitOne, false, Cfg.Cost[i].Id, Cfg.Cost[i].Count, true); } break; case GachaDrawType.LimitTen: { ListDrawButtonData[i] = new(Cfg, gachaDrawType, E_DrawCount.Ten, IsLimitTen, false, Cfg.Cost[i].Id, Cfg.Cost[i].Count, true); } break; default: throw new System.Exception("未处理类型"); } } } public void ConstructRedPointTree(int parentID) { RedPoint = RedPointManager.Instance.AddDynamicNode(NodeType.Raffle, parentID, Cfg.Id); } public void ConstructRedPointTree(RedPointNode parent) { } }