using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using TableConfig; namespace Snxxz.UI { public class BossRebornModel : Model { int m_BossRebornIntegral = 0; public int bossRebornIntegral { get { return m_BossRebornIntegral; } set { if (m_BossRebornIntegral != value) { m_BossRebornIntegral = value; if (bossRebornIntergralEvent != null) { bossRebornIntergralEvent(); } } } } public int surplusSecond { get { return OperationTimeHepler.Instance.GetOperationSurplusTime(Operation.BossReborn); } } public event Action bossRebornIntergralEvent; public event Action bossTaskStateChangeEvent; Dictionary bossRebornTasks = new Dictionary(); const int bossRebornPointId = 20909; public Redpoint bossRebornPoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, bossRebornPointId); public override void Init() { ParseConfig(); } public override void UnInit() { } public bool IsOpen() { return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.BossReborn); } public int GetWorldLevel() { OperationBase operation; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.BossReborn, out operation)) { var bossOperation = operation as OperationBossReborn; return bossOperation != null ? bossOperation.worldLevel : 0; } else { return 0; } } public List GetTasks() { return new List(bossRebornTasks.Values); } public BossRebornTask GetTaskData(int _id) { if (!bossRebornTasks.ContainsKey(_id)) { bossRebornTasks[_id] = new BossRebornTask(_id); } return bossRebornTasks[_id]; } public int GetBossRebornNeedPoint() { var worldLevel = GetWorldLevel(); var index = 0; for (int i = 0; i < GeneralConfig.Instance.bossRebornTotalPointWorldLevelNeed.Count; i++) { if (worldLevel >= GeneralConfig.Instance.bossRebornTotalPointWorldLevelNeed[i]) { index = i + 1; } } return GeneralConfig.Instance.bossRebornTotalPoint[Mathf.Clamp(index, 0, GeneralConfig.Instance.bossRebornTotalPoint.Count - 1)]; } public void RequestTaskReward(int _id) { var sendInfo = new CA504_tagCMPlayerGetReward(); sendInfo.RewardType = (int)GotServerRewardType.Def_RewardType_BossReborn; sendInfo.DataEx = (uint)_id; sendInfo.DataExStrLen = 0; sendInfo.DataExStr = string.Empty; GameNetSystem.Instance.SendInfo(sendInfo); } public void UpdateTaskData(HAB03_tagMCBossRebornPlayerInfo _serverInfo) { foreach (var info in _serverInfo.DataList) { var id = info.ActID; var data = GetTaskData(id); var oldState = data.GetState(); data.UpdateActivityData(info.CurTimes, info.GotTimes); var newState = data.GetState(); if (oldState != newState && bossTaskStateChangeEvent != null) { bossTaskStateChangeEvent(id); } } UpdateRedpoint(); } private void UpdateRedpoint() { if (!IsOpen()) { bossRebornPoint.state = RedPointState.None; } else { var rewardable = false; foreach (var task in bossRebornTasks.Values) { if (task.GetState() == BossRebornTask.State.Rewardable) { rewardable = true; break; } } bossRebornPoint.state = rewardable ? RedPointState.Simple : RedPointState.None; } } private void ParseConfig() { var keys = ConfigManager.Instance.GetAllKeys(); foreach (var key in keys) { var id = int.Parse(key); bossRebornTasks[id] = new BossRebornTask(id); } } } }