| //--------------------------------------------------------  | 
| //    [Author]:           第二世界  | 
| //    [  Date ]:           Thursday, May 03, 2018  | 
| //--------------------------------------------------------  | 
| using UnityEngine;  | 
| using System.Collections;  | 
| using UnityEngine.UI;  | 
| using System;  | 
|   | 
|   | 
| namespace vnxbqy.UI  | 
| {  | 
|   | 
|     public class DungeonBossBriefInfoBehaviour : MonoBehaviour  | 
|     {  | 
|         [SerializeField] Button m_MoveTo;  | 
|   | 
|         [SerializeField] Text m_Level;  | 
|         [SerializeField] Text m_RebornTime;  | 
|         [SerializeField] Text m_Alive;  | 
|         [SerializeField] Text m_RebornAtOnce;  | 
|         [SerializeField] Text m_Locked;  | 
|   | 
|         [SerializeField] RebornRightNowBossInfoQuery m_BossInfoQuery;  | 
|   | 
|         int bossId = 0;  | 
|         FindPreciousModel model { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }  | 
|   | 
|         Action onMoveToBoss;  | 
|   | 
|         public void Display(int _bossId, Action _onMoveToBoss)  | 
|         {  | 
|             bossId = _bossId;  | 
|             onMoveToBoss = _onMoveToBoss;  | 
|             var config = NPCConfig.Get(bossId);  | 
|             m_Level.text = Language.Get("Z1024", config.NPCLV);  | 
|   | 
|             timer = 0f;  | 
|             m_BossInfoQuery.bossId = bossId;  | 
|             DisplayBossState();  | 
|             m_MoveTo.SetListener(MoveToNpc);  | 
|         }  | 
|   | 
|         public void Dispose()  | 
|         {  | 
|             onMoveToBoss = null;  | 
|             m_MoveTo.RemoveAllListeners();  | 
|         }  | 
|   | 
|         float timer = 0f;  | 
|         private void LateUpdate()  | 
|         {  | 
|             timer += Time.deltaTime;  | 
|             if (timer > 1f)  | 
|             {  | 
|                 timer = 0f;  | 
|                 DisplayBossState();  | 
|             }  | 
|         }  | 
|   | 
|         private void MoveToNpc()  | 
|         {  | 
|             var bossState = CalculateBossState();  | 
|             if (bossState == BossState.Locked)  | 
|             {  | 
|                 var config = NPCConfig.Get(bossId);  | 
|                 if (config != null)  | 
|                 {  | 
|                     SysNotifyMgr.Instance.ShowTip("BossRealmHint2", RealmConfig.Get(config.Realm).LvLarge);  | 
|                 }  | 
|                 return;  | 
|             }  | 
|   | 
|             if (PlayerDatas.Instance.hero != null)  | 
|             {  | 
|                 PlayerDatas.Instance.hero.StopPathFind();  | 
|             }  | 
|             MapTransferUtility.Instance.MoveToNPC(bossId);  | 
|   | 
|             if (onMoveToBoss != null)  | 
|             {  | 
|                 onMoveToBoss();  | 
|             }  | 
|         }  | 
|   | 
|         private BossState CalculateBossState()  | 
|         {  | 
|             FindPreciousModel.BossInfo bossInfo;  | 
|             if (!model.TryGetBossInfo(bossId, out bossInfo))  | 
|             {  | 
|                 return BossState.None;  | 
|             }  | 
|   | 
|             if (!model.IsBossUnlock(bossId))  | 
|             {  | 
|                 return BossState.Locked;  | 
|             }  | 
|   | 
|             var isAlive = bossInfo.IsBossAlive();  | 
|             if (isAlive)  | 
|             {  | 
|                 return BossState.Alive;  | 
|             }  | 
|   | 
|             if (bossInfo.refreshTime >= TimeUtility.ServerNow)  | 
|             {  | 
|                 return BossState.Dead;  | 
|             }  | 
|   | 
|             return BossState.RebornSoon;  | 
|         }  | 
|   | 
|         private void DisplayBossState()  | 
|         {  | 
|             var bossState = CalculateBossState();  | 
|   | 
|             m_Alive.SetActive(bossState == BossState.Alive);  | 
|             m_RebornTime.SetActive(bossState == BossState.Dead);  | 
|             m_RebornAtOnce.SetActive(bossState == BossState.RebornSoon);  | 
|             m_Locked.SetActive(bossState == BossState.Locked);  | 
|   | 
|             if (bossState == BossState.Dead)  | 
|             {  | 
|                 FindPreciousModel.BossInfo bossInfo;  | 
|                 model.TryGetBossInfo(bossId, out bossInfo);  | 
|                 var rebornCD = (int)(bossInfo.refreshTime - TimeUtility.ServerNow).TotalSeconds;  | 
|                 m_RebornTime.text = TimeUtility.SecondsToHMS(rebornCD);  | 
|             }  | 
|         }  | 
|   | 
|         public enum BossState  | 
|         {  | 
|             None,  | 
|             Locked,  | 
|             Alive,  | 
|             Dead,  | 
|             RebornSoon,  | 
|         }  | 
|   | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   |