using asap.core; using cfg; using GameCore; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Assertions; namespace game { public class EventScratchTicketChainPackData : IChainPackData { private const int SlotCount = 6; private List ChainList { get; set; } private Pack[] Packs { get; set; } public bool IsEndGame => ChainProgress > ChainList.Count - SlotCount; public int ChainListCount => ChainList.Count; private int m_ChainProgress = 0; public int ChainProgress { set { EventScratchTicketDataManager dataManager = GContext.container.Resolve(); m_ChainProgress = value; dataManager.SetChainProgress(m_ChainProgress); } get { EventScratchTicketDataManager dataManager = GContext.container.Resolve(); m_ChainProgress = dataManager.GetChainProgress(); return m_ChainProgress; } } //public int ChainProgress { get; set; } public int EventId { get; set; } private DateTime ExpireTime { get; set; } public TimeSpan RemainingTime => ExpireTime - ZZTimeHelper.UtcNow(); public bool IsChainPackDepleted => ChainProgress >= ChainListCount; public bool DoNeedPackRedPoint { get { if (!IsChainPackDepleted && ChainProgress < ChainListCount) return Packs[ChainProgress].IAPID == 0; return false; } } public string RedPointKey => RedPointName.Home_ScratchTicket + ".pack"; public EventScratchTicketChainPackData(List chainList, DateTime expireTime, Pack[] packs, int eventId, int chainProgress) { ChainList = chainList; ChainProgress = chainProgress; EventId = eventId; ExpireTime = expireTime; Packs = packs; } public Pack GetChainPackByChainProgress(int chainProgress) { // Debug.Log($"[EventBreak] chainProgress: {chainProgress}"); return Packs[chainProgress]; } public int GetChainProgressBySlotIdx(int slotIdx) { int res; if (ChainProgress > ChainList.Count - SlotCount) res = ChainList.Count - SlotCount + slotIdx; else res = ChainProgress + slotIdx; Assert.IsTrue(res < ChainList.Count, $"Progress {res} out of range: {ChainListCount}"); // Debug.Log($"[EventBreak] slotIdx: {slotIdx}, chainProgress: {res}"); return res; } // Is this needed or what? public List GetTokenProgressRewardAfterAddingToken(int tokenAdded) { throw new NotImplementedException(); } public void UploadData() { EventScratchTicketDataManager dataManager = GContext.container.Resolve(); dataManager.ScratchTicketData.ChainPackProgress = ChainProgress; dataManager.SyncData(); } public void OnBuySuccess() { ChainProgress++; UploadData(); } public List GetItemsByPackDropId(int dropId) { throw new NotImplementedException(); } } }