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