using System.Collections; using System.Collections.Generic; using System; using Snxxz.UI; public class BossRebornTask { public readonly int id; public int TotalTimes; // 可完成总次数,0表示不限次数 public int SingleTimes; // 单次领奖需要次数 public List rewards = new List(); int m_CompleteTimes = 0; public int completedTimes { get { return m_CompleteTimes; } set { if (m_CompleteTimes != value) { m_CompleteTimes = value; if (completeTimesChangeEvent != null) { completeTimesChangeEvent(); } } } } int m_GotRewardTimes = 0; public int gotRewardTimes { get { return m_GotRewardTimes; } set { if (m_GotRewardTimes != value) { m_GotRewardTimes = value; if (gotRewardTimesChangeEvent != null) { gotRewardTimesChangeEvent(); } } } } public event Action completeTimesChangeEvent; public event Action gotRewardTimesChangeEvent; public BossRebornTask(int _id) { this.id = _id; } public BossRebornTask(HAB04_tagMCBossRebornInfo.tagMCBossRebornTaskInfo _taskInfo) { this.id = _taskInfo.TaskID; ParseServerInfo(_taskInfo); } public void UpdateActivityData(int _completedTimes, int _gotRewardTimes) { this.completedTimes = _completedTimes; this.gotRewardTimes = _gotRewardTimes; } public void UpdateActivityBaseData(HAB04_tagMCBossRebornInfo.tagMCBossRebornTaskInfo _taskInfo) { ParseServerInfo(_taskInfo); } public State GetState() { var config = BossRebornConfig.Get(this.id); var totalTimes = TotalTimes == 0 ? int.MaxValue : TotalTimes; if (gotRewardTimes >= totalTimes) { return State.Completed; } else if (completedTimes - gotRewardTimes >= SingleTimes) { return State.Rewardable; } else { return State.Normal; } } private void ParseServerInfo(HAB04_tagMCBossRebornInfo.tagMCBossRebornTaskInfo _taskInfo) { this.TotalTimes = _taskInfo.TotalTimes; this.SingleTimes = _taskInfo.SingleTimes; this.rewards.Clear(); for (int i = 0; i < _taskInfo.AwardItemCount; i++) { var serverItem = _taskInfo.AwardItem[i]; this.rewards.Add(new Item((int)serverItem.ItemID, serverItem.ItemCount)); } } public static int SortCompare(BossRebornTask _lhs, BossRebornTask _rhs) { var stateA = _lhs.GetState(); var stateB = _rhs.GetState(); if (stateA == State.Rewardable && stateB != State.Rewardable) { return -1; } else if (stateA != State.Rewardable && stateB == State.Rewardable) { return 1; } else if (stateA == State.Normal && stateB != State.Normal) { return -1; } else if (stateA != State.Normal && stateB == State.Normal) { return 1; } else { var configA = BossRebornConfig.Get(_lhs.id); var configB = BossRebornConfig.Get(_rhs.id); return configA.order < configB.order ? -1 : 1; } } public enum State { Normal, Rewardable, Completed, } }