using System.Collections.Generic; using System.Linq; using ET; namespace GFGGame { public class BattlePassTaskDataManager : SingletonBase { //通行证赛季Id private int SeasonId; //是否购买通行证 private bool IsBuy; private long SeasonEndTime; private SelectionCache selectionCache; //已经领奖levelId private HashSet NormalRewards = new HashSet(); //已经高级领奖levelId private HashSet SuperRewards = new HashSet(); //所有特别奖励 private List> tempItems = new List>(); public int GetSeasonId() { return SeasonId; } public void AddNormalReward(int levelId) { NormalRewards.Add(levelId); } public void AddSuperReward(int levelId) { SuperRewards.Add(levelId); } public void SetSeasonId(int seasonId) { SeasonId = seasonId; //设置赛季结束时间 //获取赛季配置 var seasonCfg = BattlePassOpenCfgArray.Instance.GetCfg(seasonId); if (seasonCfg == null) return; SeasonEndTime = TimeUtil.GetResetTimeSec(seasonCfg.endTime); SetSpecialCfgCache(); InitItemTemp(); } public void SetIsBuy(bool isBuy) { IsBuy = isBuy; } public bool GetIsBuy() { return IsBuy; } //0:未完成 1:可领取 2:已领取 3:继续领取 public int GetRewardState(int level) { var battlePassLevel = GetBattlePassLevel(); if (level > battlePassLevel) return 0; if (!NormalRewards.Contains(level)) return 1; if (!IsBuy) return 3; return SuperRewards.Contains(level) ? 2 : 1; } //检查普通领取状态 public bool CheckLevelRewardGet(int levelId) { return NormalRewards.Contains(levelId); } //检查高级领取状态 public bool CheckSuperLevelRewardGet(int levelId) { return SuperRewards.Contains(levelId); } //获取赛季结束时间 public long GetSeasonEndTime() { return SeasonEndTime; } //获取通行证当前等级 public int GetBattlePassLevel() { return GameGlobal.myNumericComponent.GetAsInt(NumericType.PassLevel); } //获取通行证当前经验 public long GetBattlePassExp() { return ItemDataManager.GetItemNum(ConstItemID.BATTLE_PASS_CURRENCY); } public BattlePassCfg GetSpecialCfg(int level) { var targetLevel = selectionCache.GetValueNoCache(level); return BattlePassCfgArray.Instance.GetCfgByidAndlevel(SeasonId, targetLevel); } private void SetSpecialCfgCache() { var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByidAndisGood(GetSeasonId(), 1); var minIndex = 0; var selections = new List>(); foreach (var battlePassCfg in battlePassCfgs) { selections.Add(new Selection(minIndex, battlePassCfg.level, battlePassCfg.level, Selection.SelectionModel.AllInclude)); minIndex = battlePassCfg.level + 1; } selectionCache = new SelectionCache(battlePassCfgs[0].level); selectionCache.AddSelection(selections); } //获取所有特别奖励 public List> GetAllSpecialCfg() { return tempItems; } private void InitItemTemp() { tempItems.Clear(); var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByid(GetSeasonId()); var items = new Dictionary(); foreach (var itemsInfo in battlePassCfgs.SelectMany(battlePassCfg => battlePassCfg.bonusSpecialArr)) { items.TryGetValue(itemsInfo[0], out var num); items[itemsInfo[0]] = num + itemsInfo[1]; } foreach (var item in items) { tempItems.Add(item); } } //获取升级奖励 public int[][] GetUpLevelReward(int upLevel) { var battlePassLevel = GetBattlePassLevel(); var seasonId = GetSeasonId(); int[][] rs = null; for (var i = upLevel; i > 0; i--) { var passLevel = battlePassLevel + i; var cfg = BattlePassCfgArray.Instance.GetCfgByidAndlevel(seasonId, passLevel); if (cfg == null) continue; var mergeBonus = ItemUtil.MergeBonus(cfg.bonusNormalArr, cfg.bonusSpecialArr); rs = ItemUtil.MergeBonus(rs, mergeBonus); } return rs; } public bool GetHadCanGetReward() { var battlePassLevel = GetBattlePassLevel(); var isBuy = GetIsBuy(); for (var i = 1; i < battlePassLevel; i++) { if (!NormalRewards.Contains(i)) return true; if (!isBuy) continue; if (!SuperRewards.Contains(i)) return true; } return false; } public void Clear() { SeasonId = 0; IsBuy = false; SeasonEndTime = 0; selectionCache = null; NormalRewards.Clear(); SuperRewards.Clear(); tempItems.Clear(); } } }