//-------------------------------------------------------- // [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(); } } 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, } } }