123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- using System.Collections.Generic;
- using System.Linq;
- using ET;
- namespace GFGGame
- {
- public class BattlePassTaskDataManager : SingletonBase<BattlePassTaskDataManager>
- {
- //是否初始化服务器数据
- public bool initedFromServer;
- //通行证赛季Id
- private int SeasonId;
- //是否购买通行证
- private bool IsBuy;
- private long SeasonEndTime;
- private SelectionCache<int, int> selectionCache;
- //已经领奖levelId
- private HashSet<int> NormalRewards = new HashSet<int>();
- //已经高级领奖levelId
- private HashSet<int> SuperRewards = new HashSet<int>();
- //所有特别奖励
- private List<KeyValuePair<int, int>> tempItems;
- 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);
- }
- 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)
- {
- //在需要时再初始化数据
- if(selectionCache == null)
- {
- SetSpecialCfgCache();
- }
- 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<Selection<int, int>>();
- foreach (var battlePassCfg in battlePassCfgs)
- {
- selections.Add(new Selection<int, int>(minIndex, battlePassCfg.level, battlePassCfg.level,
- Selection<int, int>.SelectionModel.AllInclude));
- minIndex = battlePassCfg.level + 1;
- }
- selectionCache = new SelectionCache<int, int>(battlePassCfgs[0].level);
- selectionCache.AddSelection(selections);
- }
- //获取所有特别奖励
- public List<KeyValuePair<int, int>> GetAllSpecialCfg()
- {
- //在需要时再初始化数据
- if (tempItems == null)
- {
- InitItemTemp();
- }
- return tempItems;
- }
- private void InitItemTemp()
- {
- tempItems = new List<KeyValuePair<int, int>>();
- var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByid(GetSeasonId());
- var items = new Dictionary<int, int>();
- 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()
- {
- if(!initedFromServer)
- {
- return false;
- }
- 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 = null;
- initedFromServer = false;
- }
- //一键获取是否领取状态
- public bool CheckStoreBrocadeWeavRed()
- {
- var battlePassCfgs = BattlePassCfgArray.Instance.GetCfgsByidAndisGood(GetSeasonId(), 1);
- var _rewardCfgs =new List<BattlePassCfg>( BattlePassCfgArray.Instance.GetCfgsByid(GetSeasonId()));
- var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy();
- for (int level = 1; level < _rewardCfgs.Count; level++) {
- var state = GetRewardState(level);
- bool normalRewardGet = (state == 1);
- if (normalRewardGet)
- return true;
- bool superLevelRewardGet = (isBuy && !CheckSuperLevelRewardGet(level) && state == 1);
- if (superLevelRewardGet)
- return true;
- }
- return false;
- }
- }
- }
|