少年修仙传客户端代码仓库
client_linchunjie
2019-04-10 2c3ba44af2b76e327c473accc064d16a1433696f
System/FairyAu/AllianceBossEntranceWin.cs
@@ -14,218 +14,94 @@
    [XLua.Hotfix]
    public class AllianceBossEntranceWin : Window
    {
        [SerializeField] Text m_ActivityName;
        [SerializeField] Image m_Background;
        [SerializeField] AllianceBossBehaviour[] m_AllianceBosses;
        [SerializeField] Text m_OpenTime;
        [SerializeField] Text m_EnterTimes;
        [SerializeField] Text m_LimitLevel;
        [SerializeField] Text m_Description;
        [SerializeField] ItemBehaviour[] m_Items;
        [SerializeField] Button m_Goto;
        [SerializeField] Button m_Close;
        float timer = 0f;
        AllianceBossModel allianceBossModel { get { return ModelCenter.Instance.GetModel<AllianceBossModel>(); } }
        DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        public static int dailyQuestId = 0;
        MapModel mapModel { get { return ModelCenter.Instance.GetModel<MapModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Goto.AddListener(GotoAllianceBoss);
            m_Close.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            Display();
        }
            for (int i = 0; i < m_AllianceBosses.Length; i++)
            {
                m_AllianceBosses[i].Display(i);
            }
            DisplayTime();
            mapModel.RequestQueryMapLineState(AllianceBossModel.DATAMAPID);
            GlobalTimeEvent.Instance.secondEvent += PerSecond;
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            for (int i = 0; i < m_AllianceBosses.Length; i++)
            {
                m_AllianceBosses[i].Dispose();
            }
            GlobalTimeEvent.Instance.secondEvent -= PerSecond;
        }
        protected override void OnAfterClose()
        {
        }
        protected override void LateUpdate()
        {
            timer += Time.deltaTime;
            if (timer >= 5f)
            {
                timer = 0f;
                mapModel.RequestQueryMapLineState(AllianceBossModel.DATAMAPID);
            }
        }
        #endregion
        void Display()
        private void PerSecond()
        {
            DisplayBase();
            DisplayEnterTimes();
            DisplayTime();
        }
        void DisplayBase()
        void DisplayTime()
        {
            var config = DailyQuestConfig.Get(dailyQuestId);
            m_ActivityName.text = config.Title;
            DailyQuestOpenTime openTime;
            if (dailyQuestModel.TryGetOpenTime(dailyQuestId, out openTime))
            DailyQuestOpenTime dailyQuestOpenTime;
            if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.AllianceBoss, out dailyQuestOpenTime))
            {
                if (openTime.always)
                if (dailyQuestOpenTime.InOpenTime())
                {
                    m_OpenTime.text = Language.Get("DailyQuest_NoTimeLimit");
                    var seconds = 0;
                    HourMinute hourMinute;
                    if (dailyQuestOpenTime.TryGetTodayNearestOpenTime(out hourMinute))
                    {
                        var endTime = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day,
                            hourMinute.hourEnd, hourMinute.minuteEnd, 0);
                        seconds = Mathf.CeilToInt((float)(endTime - TimeUtility.ServerNow).TotalSeconds);
                        seconds = Mathf.Max(0, seconds);
                    }
                    m_OpenTime.text = Language.Get("AllianceBoss_3", TimeUtility.SecondsToHMS(seconds));
                }
                else
                {
                    var week = (int)TimeUtility.ServerNow.DayOfWeek;
                    var openTimes = openTime.GetHourMinuteByWeek(week);
                    if (openTimes != null)
                    {
                        var stringArray = new string[openTimes.Count];
                        for (int i = 0; i < openTimes.Count; i++)
                        {
                            stringArray[i] = openTimes[i].ToString();
                        }
                        m_OpenTime.text = string.Join(",", stringArray);
                    }
                    var seconds = dailyQuestOpenTime.GetNextSessionSurplusTime();
                    m_OpenTime.text = Language.Get("AllianceBoss_2", TimeUtility.SecondsToHMS(seconds));
                }
            }
            switch ((DailyQuestType)dailyQuestId)
            {
                case DailyQuestType.AllianceBoss1:
                    m_Background.SetSprite("AllianceBossBG1");
                    break;
                case DailyQuestType.AllianceBoss2:
                    m_Background.SetSprite("AllianceBossBG2");
                    break;
            }
            var dungeon = dungeonModel.currentDungeon;
            var dungeonId = dungeonModel.GetDungeonId(dungeon);
            var dungeonConfig = DungeonConfig.Get(dungeonId);
            if (dungeonConfig != null)
            {
                var levelLimitMin = dungeonConfig.LVLimitMin;
                var playerLevel = PlayerDatas.Instance.baseData.LV;
                m_LimitLevel.text = levelLimitMin.ToString();
                m_LimitLevel.color = playerLevel >= levelLimitMin ? UIHelper.GetUIColor(TextColType.NavyBrown) : UIHelper.GetUIColor(TextColType.Red, true);
                m_Description.text = dungeonConfig.Description;
                for (int i = 0; i < m_Items.Length; i++)
                {
                    var behaviour = m_Items[i];
                    if (i < dungeonConfig.Rewards.Length)
                    {
                        behaviour.gameObject.SetActive(true);
                        behaviour.showCount = false;
                        behaviour.SetItem(dungeonConfig.Rewards[i], 0);
                    }
                    else
                    {
                        behaviour.gameObject.SetActive(false);
                    }
                }
            }
        }
        void DisplayEnterTimes()
        {
            var enterTimes = dailyQuestModel.GetDailyQuestCompletedTimes(dailyQuestId);
            var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes(dailyQuestId);
            m_EnterTimes.text = StringUtility.Contact(totalTimes - enterTimes, "/", totalTimes);
            m_EnterTimes.color = (totalTimes - enterTimes) > 0 ? UIHelper.GetUIColor(TextColType.NavyBrown) : UIHelper.GetUIColor(TextColType.Red);
        }
        private void GotoAllianceBoss()
        {
            var error = 0;
            if (TestEnterAllianceBoss(dailyQuestId, out error))
            {
                if ((DailyQuestType)dailyQuestId == DailyQuestType.AllianceBoss1)
                {
                    dungeonModel.SingleChallenge(AllianceBossModel.DATAMAPID, 0);
                }
                else
                {
                    dungeonModel.SingleChallenge(AllianceBossModel.DATAMAPID, 1);
                }
            }
            else
            {
                DisplayErrorTip(error);
            }
        }
        bool TestEnterAllianceBoss(int id, out int error)
        {
            error = 0;
            var lineId = 0;
            var dungeonId = 0;
            switch ((DailyQuestType)id)
            {
                case DailyQuestType.AllianceBoss1:
                    lineId = 0;
                    break;
                case DailyQuestType.AllianceBoss2:
                    lineId = 1;
                    break;
            }
            dungeonId = dungeonModel.GetDungeonId(AllianceBossModel.DATAMAPID, lineId);
            var dungeonConfig = DungeonConfig.Get(dungeonId);
            if (dungeonConfig != null)
            {
                var playerLevel = PlayerDatas.Instance.baseData.LV;
                if (playerLevel < dungeonConfig.LVLimitMin)
                {
                    error = 1;
                    return false;
                }
            }
            if (CrossServerUtility.IsCrossServerBoss())
            {
                error = 3;
                return false;
            }
            if (allianceBossModel.isActivityOver)
            {
                error = 4;
                return false;
            }
            var dailyQuestState = dailyQuestModel.GetQuestState(dailyQuestId);
            if (dailyQuestState != DailyQuestModel.DailyQuestState.Normal)
            {
                error = 5;
                return false;
            }
            return true;
        }
        void DisplayErrorTip(int error)
        {
            switch (error)
            {
                case 1:
                    SysNotifyMgr.Instance.ShowTip("DemonJar_Text2");
                    break;
                case 2:
                    SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_268121", AllianceBossModel.DATAMAPID);
                    break;
                case 3:
                    SysNotifyMgr.Instance.ShowTip("CrossMap10");
                    break;
                case 4:
                    SysNotifyMgr.Instance.ShowTip("AllianceBossDead");
                    break;
                case 5:
                    SysNotifyMgr.Instance.ShowTip("Join_Space_Lost");
                    break;
            }
        }
    }