//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Saturday, August 18, 2018
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
|
using System;
|
|
namespace vnxbqy.UI
|
{
|
|
public class CrossServerBossBreifInfoBehaviour : FindPreciousBossBriefInfoBehaviour
|
{
|
|
[SerializeField] Image m_Attention;
|
|
protected override int selectedBossId {
|
get {
|
return model.selectedBoss;
|
}
|
set {
|
model.selectedBoss = value;
|
}
|
}
|
|
protected override InteractorableState interactorableState {
|
get {
|
var selected = selectedBossId == bossId;
|
var config = CrossServerBossConfig.Get(bossId);
|
var dieOrLocked = false;
|
switch (config.MonsterType)
|
{
|
case 1:
|
case 2:
|
dieOrLocked = model.boxInfo.bigBoxSurplus <= 0;
|
break;
|
case 3:
|
dieOrLocked = model.eliteInfo.eliteSurplus <= 0;
|
break;
|
case 4:
|
case 5:
|
dieOrLocked = !model.IsBossUnLocked(bossId) || !findPreciousModel.IsBossAlive(bossId);
|
break;
|
}
|
|
if (!dieOrLocked)
|
{
|
return selected ? InteractorableState.NormalSelected : InteractorableState.NormalUnSelected;
|
}
|
else
|
{
|
return selected ? InteractorableState.DieOrLockedSelected : InteractorableState.DieOrLockedUnSelected;
|
}
|
}
|
set {
|
base.interactorableState = value;
|
}
|
}
|
|
protected override bool isUnLocked {
|
get {
|
return model.IsBossUnLocked(bossId);
|
}
|
}
|
|
CrossServerBossModel model { get { return ModelCenter.Instance.GetModel<CrossServerBossModel>(); } }
|
|
public override void Display(object _data)
|
{
|
base.Display(_data);
|
|
m_Attention.SetActive(findPreciousModel.IsBossSubscribed(bossId));
|
var config = CrossServerBossConfig.Get(bossId);
|
var npcConfig = NPCConfig.Get(bossId);
|
|
DrawBossBaseInfo(config.PortraitID, npcConfig.charName, npcConfig.NPCLV, npcConfig.Realm);
|
UpdateBossRebornCoolDown(isUnLocked);
|
UpdateBossPortrait(interactorableState);
|
OnSelected(bossId);
|
|
model.boxSurplusChangeEvent -= OnBoxInfoUpdate;
|
model.eliteSurplusChangeEvent -= OnGuardInfoUpdate;
|
model.boxInfo.refreshTimeEvent -= OnBoxRefreshTimeChange;
|
model.eliteInfo.refreshTimeEvent -= OnEliteRefreshTimeChange;
|
|
switch (config.MonsterType)
|
{
|
case 1:
|
case 2:
|
model.boxInfo.refreshTimeEvent += OnBoxRefreshTimeChange;
|
model.boxSurplusChangeEvent += OnBoxInfoUpdate;
|
break;
|
case 3:
|
model.eliteInfo.refreshTimeEvent += OnEliteRefreshTimeChange;
|
model.eliteSurplusChangeEvent += OnGuardInfoUpdate;
|
break;
|
}
|
|
model.bossSelectedEvent -= OnSelected;
|
model.bossSelectedEvent += OnSelected;
|
}
|
|
public override void Dispose()
|
{
|
base.Dispose();
|
model.bossSelectedEvent -= OnSelected;
|
model.boxSurplusChangeEvent -= OnBoxInfoUpdate;
|
model.eliteSurplusChangeEvent -= OnGuardInfoUpdate;
|
model.boxInfo.refreshTimeEvent -= OnBoxRefreshTimeChange;
|
model.eliteInfo.refreshTimeEvent -= OnEliteRefreshTimeChange;
|
}
|
|
protected override void UpdateBossRebornCoolDown(bool _isUnLocked)
|
{
|
if (_isUnLocked)
|
{
|
var config = CrossServerBossConfig.Get(bossId);
|
var refreshTime = TimeUtility.ServerNow;
|
switch (config.MonsterType)
|
{
|
case 1:
|
case 2:
|
refreshTime = model.boxInfo.refreshTime;
|
break;
|
case 3:
|
refreshTime = model.eliteInfo.refreshTime;
|
break;
|
case 4:
|
case 5:
|
FindPreciousModel.BossInfo bossInfo;
|
if (findPreciousModel.TryGetBossInfo(bossId, out bossInfo) && !bossInfo.IsBossAlive())
|
{
|
refreshTime = bossInfo.refreshTime;
|
}
|
break;
|
}
|
|
if (refreshTime > TimeUtility.ServerNow)
|
{
|
m_CoolDown.Begin((int)(refreshTime - TimeUtility.ServerNow).TotalSeconds, OnBossCoolDownCompleted);
|
}
|
else
|
{
|
m_CoolDown.SetActive(false);
|
}
|
}
|
else
|
{
|
m_CoolDown.SetActive(false);
|
}
|
}
|
|
|
private void OnBoxRefreshTimeChange()
|
{
|
UpdateBossRebornCoolDown(isUnLocked);
|
}
|
|
private void OnEliteRefreshTimeChange()
|
{
|
UpdateBossRebornCoolDown(isUnLocked);
|
}
|
|
private void OnGuardInfoUpdate()
|
{
|
UpdateBossPortrait(interactorableState);
|
}
|
|
private void OnBoxInfoUpdate()
|
{
|
UpdateBossPortrait(interactorableState);
|
}
|
|
protected override void DrawBossBaseInfo(string icon, string name, int level, int realm)
|
{
|
var config = CrossServerBossConfig.Get(bossId);
|
switch (config.MonsterType)
|
{
|
case 1:
|
case 2:
|
m_BossName.text = Language.Get("DogzMap1");
|
m_BossLevel.text = string.Empty;
|
break;
|
case 3:
|
m_BossName.text = Language.Get("DogzMap2");
|
m_BossLevel.text = string.Empty;
|
break;
|
case 4:
|
case 5:
|
m_BossName.text = name;
|
m_BossLevel.text = Language.Get("Z1024", level);
|
break;
|
}
|
|
m_Portrait.SetSprite(icon);
|
m_Portrait.SetNativeSize();
|
|
m_RealmContainer.SetActive(isUnLocked);
|
m_UnLockCondition.SetActive(!isUnLocked);
|
if (!isUnLocked)
|
{
|
var unLockRealm = findPreciousModel.GetBossUnLockRealm(bossId);
|
var realmConfig = RealmConfig.Get(unLockRealm);
|
m_UnLockRealm.SetSprite(realmConfig.Img);
|
}
|
else
|
{
|
if (m_Realm != null && m_RealmContainer != null)
|
{
|
if (realm > 0 && RealmConfig.Has(realm))
|
{
|
m_RealmContainer.SetActive(true);
|
var realmConfig = RealmConfig.Get(realm);
|
if (realmConfig != null)
|
{
|
m_Realm.SetSprite(realmConfig.Img);
|
}
|
}
|
else
|
{
|
m_RealmContainer.SetActive(false);
|
}
|
}
|
}
|
}
|
|
private void OnSelected(int _bossId)
|
{
|
UpdateBossNameLevelFont(interactorableState);
|
}
|
|
protected override void OnSubscribe(int _bossId)
|
{
|
base.OnSubscribe(_bossId);
|
if (bossId != _bossId)
|
{
|
return;
|
}
|
|
m_Attention.SetActive(findPreciousModel.IsBossSubscribed(bossId));
|
}
|
|
}
|
|
}
|