//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, August 18, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; namespace Snxxz.UI { [XLua.Hotfix] 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.dogzDungeonBox.bigBoxSurplus <= 0; break; case 3: dieOrLocked = model.dogzDungeonElite.eliteSurplus <= 0; break; case 4: 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(); } } public override void Display(object _data) { base.Display(_data); m_Attention.gameObject.SetActive(findPreciousModel.IsBossSubscribed(bossId)); var config = CrossServerBossConfig.Get(bossId); var npcConfig = NPCConfig.Get(bossId); DrawBossBaseInfo(config.PortraitID, npcConfig.charName, npcConfig.NPCLV, npcConfig.ClientRealm); UpdateBossRebornCoolDown(isUnLocked); UpdateBossPortrait(interactorableState); OnSelected(bossId); model.boxSurplusChangeEvent -= OnBoxInfoUpdate; model.eliteSurplusChangeEvent -= OnGuardInfoUpdate; model.dogzDungeonBox.refreshTimeEvent -= OnBoxRefreshTimeChange; model.dogzDungeonElite.refreshTimeEvent -= OnEliteRefreshTimeChange; switch (config.MonsterType) { case 1: case 2: model.dogzDungeonBox.refreshTimeEvent += OnBoxRefreshTimeChange; model.boxSurplusChangeEvent += OnBoxInfoUpdate; break; case 3: model.dogzDungeonElite.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.dogzDungeonBox.refreshTimeEvent -= OnBoxRefreshTimeChange; model.dogzDungeonElite.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.dogzDungeonBox.refreshTime; break; case 3: refreshTime = model.dogzDungeonElite.refreshTime; break; case 4: 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.gameObject.SetActive(false); } } else { m_CoolDown.gameObject.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: m_BossName.text = _name; m_BossLevel.text = Language.Get("Z1024", _level); break; } m_Portrait.SetSprite(_icon); m_Portrait.SetNativeSize(); if (m_Realm != null && m_RealmContainer != null) { if (RealmConfig.Has(_realm)) { m_RealmContainer.gameObject.SetActive(true); var realmConfig = RealmConfig.Get(_realm); if (realmConfig != null) { m_Realm.SetSprite(realmConfig.Img); } } else { m_RealmContainer.gameObject.SetActive(false); } } } private void OnSelected(int _bossId) { UpdateBossNameLevelFont(interactorableState); } protected override void OnSubscribe(int _bossId) { base.OnSubscribe(_bossId); if (bossId != _bossId) { return; } m_Attention.gameObject.SetActive(findPreciousModel.IsBossSubscribed(bossId)); } } }