//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, April 15, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class HazyGrassDungeonWin : Window { [SerializeField] DungeonTargetBehaviour m_DungeonTarget; [SerializeField] HazyGrassCountBeha[] m_GrassCountBehas; [SerializeField] Text[] m_GrassTimes; float timer = 0f; DungeonModel model { get { return ModelCenter.Instance.GetModel(); } } HazyRegionModel hazyRegionModel { get { return ModelCenter.Instance.GetModel(); } } HazyGrassModel hazyGrassModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { Display(); timer = 0f; RequestGrassCount(); GlobalTimeEvent.Instance.secondEvent += PerSecond; hazyGrassModel.onMapNpcCountRefresh += OnMapNpcCountRefresh; } protected override void OnAfterOpen() { } 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 private void PerSecond() { DisplayGrassRefreshTime(); } void Display() { if (ClientDungeonStageUtility.isClientDungeon) { var config = HazyRegionConfig.Get(hazyRegionModel.processingIncidentId); m_DungeonTarget.Init(config.dungeonId); } else { var mapId = PlayerDatas.Instance.baseData.MapID; m_DungeonTarget.Init(mapId); } 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 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); } } } }