//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, October 31, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class PersonalBossWin : Window { [SerializeField] CyclicScroll m_Bosses; [SerializeField] BossIntroduceBehaviour m_BossIntroduce; [SerializeField] Text m_Times; [SerializeField] Button m_Goto; [SerializeField] RectTransform m_NoDamageTip; [SerializeField] Text m_ButtonName; [SerializeField] Button m_BuyTimes; [SerializeField] Text m_WipeText; PersonalBossModel model { get { return ModelCenter.Instance.GetModel(); } } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } int enterTimes = 0; int totalTimes = 0; #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Goto.AddListener(GotoKillBoss); m_BuyTimes.AddListener(BuyTimes); } private void BuyTimes() { if ((totalTimes - enterTimes) >= model.maxBossTimes) { ServerTipDetails.DisplayNormalTip(Language.Get("DemonJar18")); } else { dungeonModel.currentDungeon = new Dungeon(PersonalBossModel.PERSONALBOSS_MAPID, 0); WindowCenter.Instance.Open(); } } protected override void OnPreOpen() { dungeonModel.updateDungeonBuyCnt += OnTimesOk; DTC0320_tagFBEnd.UpdateFBEndEvent += UpdateFBEnd; OnTimesOk(); } private void OnTimesOk() { totalTimes = dungeonModel.GetTotalTimes(PersonalBossModel.PERSONALBOSS_MAPID); enterTimes = dungeonModel.GetEnterTimes(PersonalBossModel.PERSONALBOSS_MAPID); m_Times.text = StringUtility.Contact(totalTimes - enterTimes, "/", model.maxBossTimes); m_Times.color = totalTimes - enterTimes <= 0 ? UIHelper.GetUIColor(TextColType.Red) : UIHelper.GetUIColor(TextColType.DarkGreen); } protected override void OnAfterOpen() { model.bossSelectedEvent += OnBossSelected; if (model.CanFBWipeOut(model.selectedBoss)) { m_ButtonName.text = Language.Get("RuneTower22"); } else { m_ButtonName.text = Language.Get("RealmPractice108"); } m_WipeText.text = Language.Get("PersonalBossWipeOut", model.WipeOutLV); } protected override void OnPreClose() { model.bossSelectedEvent -= OnBossSelected; dungeonModel.updateDungeonBuyCnt -= OnTimesOk; DTC0320_tagFBEnd.UpdateFBEndEvent -= UpdateFBEnd; } protected override void OnAfterClose() { } protected override void OnActived() { base.OnActived(); ShowBosses(); } #endregion private void UpdateFBEnd() { OnTimesOk(); model.UpdateRedpoint(); } private void ShowBosses() { var bosses = new List(); bosses.AddRange(model.GetPersonalBosses()); model.selectedBoss = model.GetRecommendBoss(); m_BossIntroduce.Display(model.selectedBoss, true); m_Bosses.Init(bosses); m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss)); DisplayGotoKillButton(model.selectedBoss); DisplayTip(model.selectedBoss); } private void GotoKillBoss() { var error = 0; if (TestEnterDungeon(out error)) { if (model.CanFBWipeOut(model.selectedBoss)) { var config = PersonalBossConfig.Get(model.selectedBoss); dungeonModel.RequestSweep(new Dungeon(PersonalBossModel.PERSONALBOSS_MAPID, config.lineId)); } else { model.RequestGotoDungeon(model.selectedBoss); } } else { switch (error) { case 1: dungeonModel.currentDungeon = new Dungeon(PersonalBossModel.PERSONALBOSS_MAPID, 0); WindowCenter.Instance.Open(); //WindowCenter.Instance.Open(); break; case 2: dungeonModel.currentDungeon = new Dungeon(PersonalBossModel.PERSONALBOSS_MAPID, 0); WindowCenter.Instance.Open(); //WindowCenter.Instance.Open(); break; case 3: SysNotifyMgr.Instance.ShowTip("BossRealmHint2", RealmConfig.Get(NPCConfig.Get(model.selectedBoss).Realm).LvLarge); break; case 4: SysNotifyMgr.Instance.ShowTip("DungeonNoGO"); break; case 5: SysNotifyMgr.Instance.ShowTip("DemonJar_Text2"); break; } } } private bool TestEnterDungeon(out int _error) { if (model.IsFreeTime(model.selectedBoss)) { _error = 0; return true; } if (totalTimes <= 0) { _error = 1; return false; } if (enterTimes >= totalTimes) { _error = 2; return false; } if (!findPreciousModel.IsBossUnlock(model.selectedBoss)) { _error = 3; return false; } if (!model.IsPlayerLevelEnough(model.selectedBoss)) { _error = 5; return false; } var mapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID); if (mapConfig.MapFBType != (int)MapType.OpenCountry && PlayerDatas.Instance.baseData.MapID != 31020) { _error = 4; return false; } _error = 0; return true; } private void OnBossSelected(int bossId) { m_BossIntroduce.Display(bossId, false); DisplayGotoKillButton(model.selectedBoss); DisplayTip(bossId); if (model.CanFBWipeOut(model.selectedBoss)) { m_ButtonName.text = Language.Get("RuneTower22"); } else { m_ButtonName.text = Language.Get("RealmPractice108"); } model.UpdateRedpoint(); } private void DisplayTip(int bossId) { if (!findPreciousModel.IsBossUnlock(bossId)) { m_NoDamageTip.SetActive(true); } else { m_NoDamageTip.SetActive(false); } } private void DisplayGotoKillButton(int bossId) { } } }