//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, August 18, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class CrossServerBossWin : Window { [SerializeField] CyclicScroll m_Bosses; [SerializeField] CrossServerBossBoxBehaviour m_BoxBehaviour; [SerializeField] CrossServerBossEliteMonsterBehaviour m_EliteMonsterBehaviour; [SerializeField] BossIntroduceBehaviour m_BossIntroduce; [SerializeField] Button m_Goto; [SerializeField] Button m_KillRecord; [SerializeField] Transform m_SurpassLevel; [SerializeField] RectTransform m_NoDamageTip; [SerializeField] ToggleButton m_Subscribe; [SerializeField] RectTransform m_ContainerBoxCollectWeary; [SerializeField] TextEx m_BoxCollectWearyValue; [SerializeField] RectTransform m_ContainerBossKillWeary; [SerializeField] TextEx m_BossKillWearyValue; [SerializeField] Button m_AddTimes; CrossServerBossModel model { get { return ModelCenter.Instance.GetModel(); } } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Goto.AddListener(GotoKillBoss); m_KillRecord.AddListener(ShowKillRecords); m_Subscribe.AddListener(SwitchSubscribeBoss); m_AddTimes.AddListener(AddTimes); } private void AddTimes() { var wearyValueLimit = GeneralDefine.bossWearyValues[2]; if (wearyValueLimit + model.buyCnt - model.wearyValue >= wearyValueLimit) { ServerTipDetails.DisplayNormalTip(Language.Get("DemonJar18")); return; } if (model.buyCnt >= model.AddBossTimesCosts.Count) { ServerTipDetails.DisplayNormalTip(Language.Get("FairyLand_Func15")); return; } WindowCenter.Instance.Open(); } void ShowBossTimes() { DisplayTimes(model.selectedBoss); } protected override void OnPreOpen() { model.bossWearyValueChangeEvent += ShowBossTimes; } protected override void OnAfterOpen() { model.bossSelectedEvent += OnBossSelected; findPreciousModel.bossSubscribeChangeEvent += OnSubscribeBoss; } protected override void OnPreClose() { model.bossSelectedEvent -= OnBossSelected; findPreciousModel.bossSubscribeChangeEvent -= OnSubscribeBoss; model.bossWearyValueChangeEvent -= ShowBossTimes; } protected override void OnAfterClose() { } protected override void OnActived() { base.OnActived(); ShowBosses(); model.RequestBoxAndEliteSurplusInfo(); } #endregion private void ShowBosses() { var bosses = model.GetNpcIds(); model.selectedBoss = model.GetRecommendNpc(); m_Bosses.Init(bosses); m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss)); DisplayItemDropTip(model.selectedBoss); DisplayBossBaseInfo(model.selectedBoss); DisplayTimes(model.selectedBoss); } private void ShowKillRecords() { findPreciousModel.ViewKillRecordsBoss = model.selectedBoss; WindowCenter.Instance.Open(); } private void SwitchSubscribeBoss() { if (findPreciousModel.IsBossSubscribed(model.selectedBoss)) { findPreciousModel.RequestDeSubscribeBoss(model.selectedBoss); } else { findPreciousModel.RequestSubscribeBoss(model.selectedBoss, false); } } private void GotoKillBoss() { var error = 0; if (model.CanEnter(out error)) { if (PlayerDatas.Instance.baseData.MapID == CrossServerBossModel.DATA_MAPID) { WindowJumpMgr.Instance.ClearJumpData(); WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); var config = CrossServerBossConfig.Get(model.selectedBoss); switch (config.MonsterType) { case 1: case 2: case 3: break; case 4: MapTransferUtility.Instance.MoveToNPC(model.selectedBoss); break; } } else { model.RequestEnter(); } } else { model.ProcessEnterError(error); } } private void OnSubscribeBoss(int _bossId) { m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss); } private void OnBossSelected(int _bossId) { DisplayItemDropTip(_bossId); DisplayBossBaseInfo(_bossId); DisplayTimes(_bossId); } private void DisplayBossBaseInfo(int _bossId) { var config = CrossServerBossConfig.Get(_bossId); switch (config.MonsterType) { case 1: case 2: m_KillRecord.SetActive(false); m_BossIntroduce.Dispose(); m_BossIntroduce.SetActive(false); m_EliteMonsterBehaviour.Dispose(); m_EliteMonsterBehaviour.SetActive(false); m_BoxBehaviour.SetActive(true); m_BoxBehaviour.Display(); break; case 3: m_KillRecord.SetActive(false); m_BossIntroduce.Dispose(); m_BossIntroduce.SetActive(false); m_BoxBehaviour.SetActive(false); m_BoxBehaviour.Dispose(); m_EliteMonsterBehaviour.SetActive(true); m_EliteMonsterBehaviour.Display(); break; case 4: m_KillRecord.SetActive(true); m_BoxBehaviour.Dispose(); m_BoxBehaviour.SetActive(false); m_EliteMonsterBehaviour.Dispose(); m_EliteMonsterBehaviour.SetActive(false); m_BossIntroduce.SetActive(true); m_BossIntroduce.Display(_bossId, true); m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(_bossId); break; } DisplayGotoKillButton(model.selectedBoss); DisplaySubscribe(model.selectedBoss); } private void DisplayItemDropTip(int bossId) { var config = CrossServerBossConfig.Get(bossId); switch (config.MonsterType) { case 1: case 2: case 3: m_NoDamageTip.SetActive(false); m_SurpassLevel.SetActive(false); break; case 4: if (!findPreciousModel.IsBossUnlock(bossId)) { m_NoDamageTip.SetActive(true); m_SurpassLevel.SetActive(false); } else { m_NoDamageTip.SetActive(false); var dropConfig = NPCDropItemConfig.Get(bossId); var noDrop = dropConfig == null || (dropConfig.MaxLV != 0 && PlayerDatas.Instance.baseData.LV > dropConfig.MaxLV); m_SurpassLevel.SetActive(noDrop); } break; } } private void DisplayTimes(int bossId) { var config = CrossServerBossConfig.Get(bossId); switch (config.MonsterType) { case 1: case 2: m_ContainerBoxCollectWeary.SetActive(true); m_ContainerBossKillWeary.SetActive(false); var bigBoxCollectCountLimit = GeneralDefine.dogzBoxLimit; m_BoxCollectWearyValue.text = StringUtility.Contact(model.bigBoxCollectCount, "/", bigBoxCollectCountLimit); m_BoxCollectWearyValue.colorType = model.bigBoxCollectCount >= bigBoxCollectCountLimit ? TextColType.Red : TextColType.DarkGreen; break; case 3: case 4: m_ContainerBoxCollectWeary.SetActive(false); m_ContainerBossKillWeary.SetActive(true); var wearyValueLimit = GeneralDefine.bossWearyValues[2]; m_BossKillWearyValue.text = StringUtility.Contact(wearyValueLimit + model.buyCnt - model.wearyValue, "/", wearyValueLimit); m_BossKillWearyValue.colorType = model.wearyValue >= wearyValueLimit + model.buyCnt ? TextColType.Red : TextColType.DarkGreen; break; } } private void DisplayGotoKillButton(int bossId) { } private void DisplaySubscribe(int bossId) { var isUnLocked = findPreciousModel.IsBossUnlock(bossId); m_Subscribe.SetActive(isUnLocked); if (isUnLocked) { m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(bossId); } } } }