//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, October 31, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class ElderGodAreaWin : Window { [SerializeField] CyclicScroll m_Bosses; [SerializeField] ElderEliteMonsterBehaviour m_EliteMonsterBehaviour; [SerializeField] BossIntroduceBehaviour m_BossIntroduce; [SerializeField] Text m_Times; [SerializeField] Button m_Goto; [SerializeField] Button m_KillRecord; [SerializeField] ToggleButton m_Subscribe; [SerializeField] RectTransform m_NoDamageTip; ElderGodAreaModel model { get { return ModelCenter.Instance.GetModel(); } } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { 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); } protected override void OnPreOpen() { var enterTimes = dungeonModel.GetEnterTimes(ElderGodAreaModel.ELDERGODAREA_MAPID); var totalTimes = dungeonModel.GetTotalTimes(ElderGodAreaModel.ELDERGODAREA_MAPID); m_Times.text = Language.Get("Dungeon_LeavingTimes", totalTimes - enterTimes); } protected override void OnAfterOpen() { model.bossSelectedEvent += OnBossSelected; findPreciousModel.bossSubscribeChangeEvent += OnSubscribeBoss; } protected override void OnPreClose() { StopAllCoroutines(); model.bossSelectedEvent -= OnBossSelected; findPreciousModel.bossSubscribeChangeEvent -= OnSubscribeBoss; } protected override void OnAfterClose() { } protected override void OnActived() { base.OnActived(); ShowBosses(); CheckAchievementGuide(); } #endregion private void ShowBosses() { var bosses = new List(); bosses.AddRange(model.GetElderGodNpces()); model.selectedBoss = model.GetRecommendNpc(); DisplayNpcBaseInfo(true); m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss); m_Bosses.Init(bosses); m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss)); DisplayTip(model.selectedBoss); } private void ShowKillRecords() { ModelCenter.Instance.GetModel().ViewKillRecordsBoss = model.selectedBoss; WindowCenter.Instance.Open(); } private void GotoKillBoss() { var error = 0; if (TestEnterDungeon(out error)) { DungeonSuppliesLackWin.lackType = DungeonSuppliesLackWin.LackType.ElderGodArea; WindowCenter.Instance.Open(); } else { switch (error) { case 1: SysNotifyMgr.Instance.ShowTip("ElderGodNoTimes"); break; case 2: WindowCenter.Instance.Close(); var config = ElderGodAreaConfig.Get(model.selectedBoss); var targetNpc = config.MonsterType == 1 ? model.GetRecommendEliteNpc() : model.selectedBoss; MapTransferUtility.Instance.MoveToNPC(targetNpc); break; case 3: SysNotifyMgr.Instance.ShowTip("DungeonNoGO"); break; } } } private bool TestEnterDungeon(out int _error) { var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); if (dataMapId == ElderGodAreaModel.ELDERGODAREA_MAPID) { _error = 2; return false; } var enterTimes = dungeonModel.GetEnterTimes(ElderGodAreaModel.ELDERGODAREA_MAPID); var totalTimes = dungeonModel.GetTotalTimes(ElderGodAreaModel.ELDERGODAREA_MAPID); if (enterTimes >= totalTimes) { _error = 1; return false; } var mapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID); if (mapConfig.MapFBType != (int)MapType.OpenCountry) { _error = 3; return false; } _error = 0; return true; } private void SwitchSubscribeBoss() { if (findPreciousModel.IsBossSubscribed(model.selectedBoss)) { findPreciousModel.RequestDeSubscribeBoss(model.selectedBoss); } else { findPreciousModel.RequestSubscribeBoss(model.selectedBoss, false); } } private void OnSubscribeBoss(int _bossId) { m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss); } private void OnBossSelected(int bossId) { StopCoroutine("Co_DelayDisplayNpcBaseInfo"); StartCoroutine("Co_DelayDisplayNpcBaseInfo"); m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(bossId); DisplayTip(bossId); } private void DisplayNpcBaseInfo(bool immediately) { var npcId = model.selectedBoss; var config = ElderGodAreaConfig.Get(npcId); switch (config.MonsterType) { case 1: m_KillRecord.gameObject.SetActive(false); m_BossIntroduce.gameObject.SetActive(false); m_EliteMonsterBehaviour.gameObject.SetActive(true); m_EliteMonsterBehaviour.Display(npcId); break; case 2: m_KillRecord.gameObject.SetActive(true); m_BossIntroduce.gameObject.SetActive(true); m_EliteMonsterBehaviour.gameObject.SetActive(false); m_BossIntroduce.Display(npcId, immediately); break; default: break; } } IEnumerator Co_DelayDisplayNpcBaseInfo() { yield return WaitingForSecondConst.WaitMS300; DisplayNpcBaseInfo(false); } private void CheckAchievementGuide() { if (AchievementGoto.guideAchievementId != 0) { var config = SuccessConfig.Get(AchievementGoto.guideAchievementId); var condition = config.Type == 37 && config.Condition[0] == ElderGodAreaModel.ELDERGODAREA_MAPID; condition = condition || (config.Type == 4); if (condition) { var guideEffect = AchievementGuideEffectPool.Require(1); guideEffect.transform.SetParentEx(m_Goto.transform, Vector3.zero, Vector3.zero, Vector3.one); } } } private void DisplayTip(int bossId) { var realmLevel = PlayerDatas.Instance.baseData.realmLevel; var config = NPCConfig.Get(bossId); if (config.Realm > realmLevel) { m_NoDamageTip.gameObject.SetActive(true); } else { m_NoDamageTip.gameObject.SetActive(false); } } } }