少年修仙传客户端代码仓库
client_linchunjie
2018-09-14 a0ede150686a218c92b901b1f20aef12a9913890
System/OpenServerActivity/OpenServerRedEnvelopeWin.cs
@@ -1,287 +1,270 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, April 24, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI {
    public class OpenServerRedEnvelopeWin : Window
    {
        [SerializeField] Text m_OSRedTitle;
        [SerializeField] Text m_AchieveCoolDown;
        [SerializeField] RectTransform m_ContainerAchievement;
        [SerializeField] RectTransform m_ContainerEnvelope;
        [SerializeField] RectTransform m_ContainerNoEnvelope;
        [SerializeField] Text m_AllGetJade;
        [SerializeField] Text m_EnvelopeCount;
        [SerializeField] Text m_EnvelopeTime;
        [SerializeField] ScrollerController m_RedAchieveControl;
        [SerializeField] ScrollerController m_RedEnvelopeControl;
        OSRedEnvelopeModel m_Model;
        OSRedEnvelopeModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>());
            }
        }
        RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
        AchievementModel m_AchievementModel;
        AchievementModel achieveModel
        {
            get
            {
                return m_AchievementModel ?? (m_AchievementModel = ModelCenter.Instance.GetModel<AchievementModel>());
            }
        }
        private int m_SelectType = 1;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_RedEnvelopeControl.OnRefreshCell += OnRefreshCell;
        }
        protected override void OnPreOpen()
        {
            model.FuncChangeEvent += FuncChangeEvent;
            model.OSRedAchieveUpdateEvent += OSRedAchieveUpdateEvent;
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
            model.OSRedEnvelopeUpdateEvent += OSRedEnvelopeUpdateEvent;
            model.OSRedEnvelopeInfoEnvent += OSRedEnvelopeInfoEnvent;
            TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
            UpdateOSRed();
        }
        protected override void OnAfterOpen()
        {
            if (model.autoOpen && m_SelectType == 2)
            {
                for (int i = 0; i < model.m_OSRedEnvelopes.Count; i++)
                {
                    RedEnvelopeModel.RedEnvelope envelope;
                    if (envelopeModel.TryGetEnvelope(model.m_OSRedEnvelopes[i], out envelope)
                        && envelope.state == 1)
                    {
                        if (PlayerDatas.Instance.PlayerId == envelope.player
                            || model.getEnvelopeTimes > 0)
                        {
                            ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = envelope.id;
                            WindowCenter.Instance.Open<RedOPenBGMWin>();
                        }
                    }
                }
            }
            model.autoOpen = false;
        }
        protected override void OnPreClose()
        {
            model.FuncChangeEvent -= FuncChangeEvent;
            model.OSRedAchieveUpdateEvent -= OSRedAchieveUpdateEvent;
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
            model.OSRedEnvelopeUpdateEvent -= OSRedEnvelopeUpdateEvent;
            model.OSRedEnvelopeInfoEnvent -= OSRedEnvelopeInfoEnvent;
            TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
        }
        protected override void OnAfterClose()
        {
        }
        private float m_Time = 0.0f;
        private float m_DelayTime = 0.5f;
        bool IsOutOffTime = false;
        protected override void LateUpdate()
        {
            base.LateUpdate();
            m_Time += Time.deltaTime;
            if (m_Time > m_DelayTime)
            {
                if (TimeUtility.OpenDay < model.openDays)
                {
                    UpdateCoolDown();
                }
                if (!IsOutOffTime)
                {
                    if (m_SelectType == 2)
                    {
                        UpdateAddTime();
                    }
                }
                m_Time = 0;
            }
        }
        #endregion
        private void OnServerOpenDayRefresh()
        {
            UpdateCoolDown();
            UpdateAddTime();
        }
        private void UpdateCoolDown()
        {
            var t = model.overTime - TimeUtility.ServerNow;
            m_AchieveCoolDown.text = StringUtility.Contact(Language.Get("OSActivityCoolDown"),
                TimeUtility.SecondsToDHMSCHS((int)t.TotalSeconds));
            if (TimeUtility.OpenDay >= model.openDays)
            {
                m_AchieveCoolDown.color = UIHelper.GetUIColor(TextColType.NavyYellow);
                m_AchieveCoolDown.text = Language.Get("ActivityEnd");
            }
            else
            {
                m_AchieveCoolDown.color = UIHelper.GetUIColor(TextColType.LightGreen);
            }
        }
        private void FuncChangeEvent()
        {
            if (m_SelectType != model.selectType)
            {
                UpdateOSRed();
            }
        }
        private void OSRedAchieveUpdateEvent(int _achieve)
        {
            if (model.selectType != 1)
            {
                return;
            }
            Achievement achievement;
            if(achieveModel.TryGetAchievement(model.m_OSRedAchieveDict[_achieve].CurrentAchieve, out achievement))
            {
                if (Achievement.IsReach(achievement.id, achievement.progress))
                {
                    UpdateOSRed();
                    return;
                }
            }
            m_RedAchieveControl.m_Scorller.RefreshActiveCellViews();
        }
        private void OnFuncStateChangeEvent(int _func)
        {
            if (model.selectType == 1 && model.m_AllFuncs.Contains(_func))
            {
                UpdateOSRed();
            }
        }
        private void OSRedEnvelopeUpdateEvent()
        {
            if (model.selectType != 2)
            {
                return;
            }
            UpdateOSRed();
        }
        private void UpdateOSRed()
        {
            m_SelectType = model.selectType;
            m_OSRedTitle.text = m_SelectType == 1 ? Language.Get("OSAchievementTitle") : Language.Get("OSRedEnvelopeTitle");
            m_ContainerAchievement.gameObject.SetActive(m_SelectType == 1);
            m_ContainerEnvelope.gameObject.SetActive(m_SelectType == 2);
            IsOutOffTime = false;
            UpdateCoolDown();
            if (m_SelectType == 1)
            {
                m_RedAchieveControl.Refresh();
                model.m_OSRedAchieves.Sort(model.CompareAchievement);
                for (int i = 0; i < model.m_OSRedAchieves.Count; i++)
                {
                    var _cfg = ConfigManager.Instance.GetTemplate<OSRedAchieveConfig>(model.m_OSRedAchieves[i]);
                    if (_cfg.func == 0 || FuncOpen.Instance.IsFuncOpen(_cfg.func))
                    {
                        m_RedAchieveControl.AddCell(ScrollerDataType.Header, i);
                    }
                }
                m_RedAchieveControl.Restart();
            }
            else
            {
                m_RedEnvelopeControl.Refresh();
                var _line = Mathf.CeilToInt((float)model.m_OSRedEnvelopes.Count / 5);
                for (int i = 0; i < _line; i++)
                {
                    m_RedEnvelopeControl.AddCell(ScrollerDataType.Header, i);
                }
                m_RedEnvelopeControl.Restart();
                OSRedEnvelopeInfoEnvent();
                m_ContainerNoEnvelope.gameObject.SetActive(model.m_OSRedEnvelopes.Count == 0);
            }
        }
        private void OnRefreshCell(ScrollerDataType type, CellView _cell)
        {
            OSRedEnvelopeCell cell = _cell as OSRedEnvelopeCell;
            cell.Init(_cell.index);
        }
        private void OSRedEnvelopeInfoEnvent()
        {
            if (m_SelectType == 2)
            {
                m_AllGetJade.text = model.totalJadeGet.ToString();
                UpdateCounts();
                UpdateAddTime();
            }
        }
        private void UpdateAddTime()
        {
            var t = TimeUtility.ServerNow - model.coolDownTime;
            int _seconds = model.addSeconds - (int)t.TotalSeconds % model.addSeconds;
            if (TimeUtility.OpenDay >= model.openDays)
            {
                m_EnvelopeTime.color = UIHelper.GetUIColor(TextColType.NavyYellow);
                m_EnvelopeTime.text = StringUtility.Contact("(", Language.Get("ActivityEnd"), ")");
                IsOutOffTime = true;
            }
            else if (model.getEnvelopeTimes >= model.limitCount)
            {
                m_EnvelopeTime.color = UIHelper.GetUIColor(TextColType.LightGreen);
                m_EnvelopeTime.text = Language.Get("NumberOfArrivals_Z");
                IsOutOffTime = true;
            }
            else
            {
                m_EnvelopeTime.color = UIHelper.GetUIColor(TextColType.LightGreen);
                m_EnvelopeTime.text = StringUtility.Contact("(", TimeUtility.SecondsToHMS(_seconds), Language.Get("OSRedEnvelopeAddTimes"), ")");
            }
        }
        private void UpdateCounts()
        {
            if (model.getEnvelopeTimes < model.limitCount)
            {
                IsOutOffTime = false;
            }
            m_EnvelopeCount.text = Mathf.Min(model.limitCount, model.getEnvelopeTimes).ToString();
        }
    }
}
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, April 24, 2018
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI {
    public class OpenServerRedEnvelopeWin : Window
    {
        [SerializeField] Text m_OSRedTitle;
        [SerializeField] Text m_AchieveCoolDown;
        [SerializeField] RectTransform m_ContainerAchievement;
        [SerializeField] RectTransform m_ContainerEnvelope;
        [SerializeField] RectTransform m_ContainerNoEnvelope;
        [SerializeField] Text m_AllGetJade;
        [SerializeField] Text m_EnvelopeCount;
        [SerializeField] Text m_EnvelopeTime;
        [SerializeField] ScrollerController m_RedAchieveControl;
        [SerializeField] ScrollerController m_RedEnvelopeControl;
        OSRedEnvelopeModel m_Model;
        OSRedEnvelopeModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<OSRedEnvelopeModel>());
            }
        }
        RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
        AchievementModel m_AchievementModel;
        AchievementModel achieveModel
        {
            get
            {
                return m_AchievementModel ?? (m_AchievementModel = ModelCenter.Instance.GetModel<AchievementModel>());
            }
        }
        private int m_SelectType = 1;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_RedEnvelopeControl.OnRefreshCell += OnRefreshCell;
        }
        protected override void OnPreOpen()
        {
            model.FuncChangeEvent += FuncChangeEvent;
            model.OSRedAchieveUpdateEvent += OSRedAchieveUpdateEvent;
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
            model.OSRedEnvelopeUpdateEvent += OSRedEnvelopeUpdateEvent;
            model.OSRedEnvelopeInfoEnvent += OSRedEnvelopeInfoEnvent;
            TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
            WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
            UpdateOSRed();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            model.FuncChangeEvent -= FuncChangeEvent;
            model.OSRedAchieveUpdateEvent -= OSRedAchieveUpdateEvent;
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
            model.OSRedEnvelopeUpdateEvent -= OSRedEnvelopeUpdateEvent;
            model.OSRedEnvelopeInfoEnvent -= OSRedEnvelopeInfoEnvent;
            TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
            WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent;
        }
        protected override void OnAfterClose()
        {
        }
        private float m_Time = 0.0f;
        private float m_DelayTime = 0.5f;
        protected override void LateUpdate()
        {
            base.LateUpdate();
            m_Time += Time.deltaTime;
            if (m_Time > m_DelayTime)
            {
                if (TimeUtility.OpenDay < model.openDays)
                {
                    UpdateCoolDown();
                }
                m_Time = 0;
            }
        }
        #endregion
        private void WindowAfterOpenEvent(Window win)
        {
            if (win is OpenServerActivityWin)
            {
                AutoOpenRedpack();
            }
        }
        void AutoOpenRedpack()
        {
            if (model.autoOpen && m_SelectType == 2)
            {
                for (int i = 0; i < model.m_OSRedEnvelopes.Count; i++)
                {
                    RedEnvelopeModel.RedEnvelope envelope;
                    if (envelopeModel.TryGetEnvelope(model.m_OSRedEnvelopes[i], out envelope)
                        && envelope.state == 1)
                    {
                        if (PlayerDatas.Instance.PlayerId == envelope.player
                            || model.getEnvelopeTimes > 0)
                        {
                            ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = envelope.id;
                            WindowCenter.Instance.Open<RedOPenBGMWin>();
                        }
                    }
                }
            }
            model.autoOpen = false;
        }
        private void OnServerOpenDayRefresh()
        {
            UpdateCoolDown();
        }
        private void UpdateCoolDown()
        {
            var t = model.overTime - TimeUtility.ServerNow;
            m_AchieveCoolDown.text = StringUtility.Contact(Language.Get("OSActivityCoolDown"),
                TimeUtility.SecondsToDHMSCHS((int)t.TotalSeconds));
            if (TimeUtility.OpenDay >= model.openDays)
            {
                m_AchieveCoolDown.color = UIHelper.GetUIColor(TextColType.NavyYellow);
                m_AchieveCoolDown.text = Language.Get("ActivityEnd");
            }
            else
            {
                m_AchieveCoolDown.color = UIHelper.GetUIColor(TextColType.LightGreen);
            }
        }
        private void FuncChangeEvent()
        {
            if (m_SelectType != model.selectType)
            {
                UpdateOSRed();
            }
        }
        private void OSRedAchieveUpdateEvent(int _achieve)
        {
            if (model.selectType != 1)
            {
                return;
            }
            Achievement achievement;
            if(achieveModel.TryGetAchievement(model.m_OSRedAchieveDict[_achieve].CurrentAchieve, out achievement))
            {
                if (Achievement.IsReach(achievement.id, achievement.progress))
                {
                    UpdateOSRed();
                    return;
                }
            }
            m_RedAchieveControl.m_Scorller.RefreshActiveCellViews();
        }
        private void OnFuncStateChangeEvent(int _func)
        {
            if (model.selectType == 1 && model.m_AllFuncs.Contains(_func))
            {
                UpdateOSRed();
            }
        }
        private void OSRedEnvelopeUpdateEvent()
        {
            if (model.selectType != 2)
            {
                return;
            }
            UpdateOSRed();
        }
        private void UpdateOSRed()
        {
            m_SelectType = model.selectType;
            m_OSRedTitle.text = m_SelectType == 1 ? Language.Get("OSAchievementTitle") : Language.Get("OSRedEnvelopeTitle");
            m_ContainerAchievement.gameObject.SetActive(m_SelectType == 1);
            m_ContainerEnvelope.gameObject.SetActive(m_SelectType == 2);
            UpdateCoolDown();
            if (m_SelectType == 1)
            {
                m_RedAchieveControl.Refresh();
                model.m_OSRedAchieves.Sort(model.CompareAchievement);
                for (int i = 0; i < model.m_OSRedAchieves.Count; i++)
                {
                    var _cfg = Config.Instance.Get<OSRedAchieveConfig>(model.m_OSRedAchieves[i]);
                    if (_cfg.func == 0 || FuncOpen.Instance.IsFuncOpen(_cfg.func))
                    {
                        m_RedAchieveControl.AddCell(ScrollerDataType.Header, i);
                    }
                }
                m_RedAchieveControl.Restart();
            }
            else
            {
                m_RedEnvelopeControl.Refresh();
                var _line = Mathf.CeilToInt((float)model.m_OSRedEnvelopes.Count / 5);
                for (int i = 0; i < _line; i++)
                {
                    m_RedEnvelopeControl.AddCell(ScrollerDataType.Header, i);
                }
                m_RedEnvelopeControl.Restart();
                OSRedEnvelopeInfoEnvent();
                m_ContainerNoEnvelope.gameObject.SetActive(model.m_OSRedEnvelopes.Count == 0);
            }
        }
        private void OnRefreshCell(ScrollerDataType type, CellView _cell)
        {
            OSRedEnvelopeCell cell = _cell as OSRedEnvelopeCell;
            cell.Init(_cell.index);
        }
        private void OSRedEnvelopeInfoEnvent()
        {
            if (m_SelectType == 2)
            {
                m_AllGetJade.text = model.totalJadeGet.ToString();
                UpdateCounts();
                UpdateAddTime();
            }
        }
        private void UpdateAddTime()
        {
            m_EnvelopeTime.text = Language.Get("OSRedEnvelopeAddTimes", model.addCounts);
        }
        private void UpdateCounts()
        {
            m_EnvelopeCount.text = model.getEnvelopeTimes.ToString();
        }
    }
}