少年修仙传客户端代码仓库
client_linchunjie
2019-04-16 6dde220aad8d90ef32128c5de178db8c3d9c3e26
System/HazyRegion/HazyGrassDungeonWin.cs
@@ -6,6 +6,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
@@ -15,10 +16,10 @@
    public class HazyGrassDungeonWin : Window
    {
        [SerializeField] DungeonTargetBehaviour m_DungeonTarget;
        [SerializeField] Text m_BasicGrassCount;
        [SerializeField] Text m_FairyGrassCount;
        [SerializeField] Text m_BasicGrassRefreshTime;
        [SerializeField] Text m_FairyGrassRefreshTime;
        [SerializeField] HazyGrassCountBeha[] m_GrassCountBehas;
        [SerializeField] Text[] m_GrassTimes;
        float timer = 0f;
        DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        HazyRegionModel hazyRegionModel { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } }
@@ -36,7 +37,11 @@
        {
            Display();
            timer = 0f;
            RequestGrassCount();
            GlobalTimeEvent.Instance.secondEvent += PerSecond;
            hazyGrassModel.onMapNpcCountRefresh += OnMapNpcCountRefresh;
        }
        protected override void OnAfterOpen()
@@ -46,10 +51,22 @@
        protected override void OnPreClose()
        {
            GlobalTimeEvent.Instance.secondEvent -= PerSecond;
            hazyGrassModel.onMapNpcCountRefresh -= OnMapNpcCountRefresh;
        }
        protected override void OnAfterClose()
        {
        }
        protected override void LateUpdate()
        {
            base.LateUpdate();
            timer += Time.deltaTime;
            if (timer >= 5f)
            {
                timer = 0f;
                RequestGrassCount();
            }
        }
        #endregion
@@ -72,19 +89,102 @@
            }
            DisplayGrassRefreshTime();
            DisplayGrassCount();
        }
        void DisplayGrassCount()
        {
            var mapId = hazyGrassModel.GetGrassMapId(hazyRegionModel.processingIncidentId);
            var npcInfos = hazyGrassModel.GetGrassNpcInfos(mapId);
            for (int i = 0; i < m_GrassCountBehas.Length; i++)
            {
                if (npcInfos != null && i < npcInfos.Count)
                {
                    m_GrassCountBehas[i].SetActive(true);
                    m_GrassCountBehas[i].Display(npcInfos[i].npcId,
                        hazyGrassModel.GetMapNpcCount(npcInfos[i].npcId));
                }
                else
                {
                    m_GrassCountBehas[i].SetActive(false);
                }
            }
        }
        void DisplayGrassRefreshTime()
        {
            var used = Mathf.Max(0, (int)(TimeUtility.ServerNow - hazyGrassModel.grassBornTime).TotalSeconds);
            var refreshSeconds = hazyGrassModel.grassRefreshSeconds - used % hazyGrassModel.grassRefreshSeconds;
            m_BasicGrassRefreshTime.text = Language.Get("HazyBasicGrassRefresh", TimeUtility.SecondsToMS(refreshSeconds));
            m_FairyGrassRefreshTime.text = Language.Get("HazyFairyGrassRefresh", TimeUtility.SecondsToMS(refreshSeconds));
            var mapId = hazyGrassModel.GetGrassMapId(hazyRegionModel.processingIncidentId);
            var npcInfos = hazyGrassModel.GetGrassNpcInfos(mapId);
            for (int i = 0; i < m_GrassTimes.Length; i++)
            {
                if (npcInfos != null && i < npcInfos.Count)
                {
                    m_GrassTimes[i].gameObject.SetActive(true);
                    var used = TimeUtility.Minute * 60 + TimeUtility.Second;
                    var refreshSeconds = npcInfos[i].refreshMinute * 60;
                    var seconds = refreshSeconds - used % refreshSeconds;
                    var npcConfig = NPCConfig.Get(npcInfos[i].npcId);
                    m_GrassTimes[i].text = string.Format("{0}{1}后刷新", npcConfig.charName,
                        TimeUtility.SecondsToMS(seconds));
                }
                else
                {
                    m_GrassTimes[i].gameObject.SetActive(false);
                }
            }
        }
        void RequestGrassCount()
        {
            if (!ClientDungeonStageUtility.isClientDungeon)
            {
                var config = HazyRegionConfig.Get(hazyRegionModel.processingIncidentId);
                if (config != null)
                {
                    var npcInfos = hazyGrassModel.GetGrassNpcInfos(config.dungeonId);
                    if (npcInfos != null)
                    {
                        int[] npcs = new int[npcInfos.Count];
                        for (int i = 0; i < npcInfos.Count; i++)
                        {
                            npcs[i] = npcInfos[i].npcId;
                        }
                        var pak = new CA227_tagCMQueryNPCCntInfo();
                        pak.MapID = (uint)config.dungeonId;
                        pak.LineID = (ushort)config.lineId;
                        pak.NPCIDList = LitJson.JsonMapper.ToJson(npcs);
                        pak.NPCIDListLen = (byte)pak.NPCIDList.Length;
                        GameNetSystem.Instance.SendInfo(pak);
                    }
                }
            }
        }
        private void OnMapNpcCountRefresh()
        {
            DisplayGrassCount();
        }
        [Serializable]
        public class HazyGrassCountBeha
        {
            [SerializeField] Transform m_Container;
            [SerializeField] Text m_Title;
            [SerializeField] Text m_Count;
            public void Display(int npcId, int count)
            {
                var npcConfig = NPCConfig.Get(npcId);
                m_Title.text = string.Format("剩余{0}数量:", npcConfig.charName);
                m_Count.text = count.ToString();
                m_Count.color = UIHelper.GetUIColor(count > 0 ? TextColType.Green : TextColType.Red);
            }
            public void SetActive(bool active)
            {
                m_Container.gameObject.SetActive(active);
            }
        }
    }