//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, November 09, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; namespace vnxbqy.UI { public class RuneTowerWin : Window { public static bool guideChallenge = false; public static bool guideSweep = false; [SerializeField] RuneTowerBehaviour m_Tower; [SerializeField] Transform m_ContainerBossInfo; [SerializeField] PositionTween m_BossShowTween; [SerializeField] Image m_BossRealm; [SerializeField] Text m_BossName; [SerializeField] Text m_BossLevel; [SerializeField] RawImage m_BossPortrait; [SerializeField] Transform m_ContainerReward; [SerializeField] PositionTween m_RewardShowTween; [SerializeField] Text m_FigthPower; [SerializeField] Text m_FloorRewardTitle; [SerializeField] ItemBehaviour m_ProductRune; [SerializeField] Button m_ViewProductRune; [SerializeField] ItemBehaviour m_Essence; [SerializeField] ItemBehaviour m_MagicEssence; [SerializeField] RunePreviewGroup m_RunePreviewGroup; [SerializeField] Button m_ViewBoss; [SerializeField] UIEffect m_ViewBossEffect; [SerializeField] UIEffect m_ChangableBossEffect; [SerializeField] Button m_ViewReward; [SerializeField] UIEffect m_ViewRewardEffect; [SerializeField] RuneTowerPassedInfoPanel m_PassedInfoPanel; [SerializeField] PositionTween m_PassInfoTween; [SerializeField] Button m_ViewPassedInfo; [SerializeField] UIEffect m_ViewPassedInfoEffect; [SerializeField] Button m_Challenge; [SerializeField] ImageEx m_ChallengeIcon; [SerializeField] Button m_Sweep; [SerializeField] Text m_SweepButtonDescription; [SerializeField] Text m_SweepTip; ShowType showType = ShowType.RewardInfo; int runeSweepActionId = 0; DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel(); } } RuneTowerModel model { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_ViewBoss.AddListener(PopupBossInfo); m_ViewReward.AddListener(PopupRewardInfo); m_ViewPassedInfo.AddListener(PopupTowerPassInfo); m_Challenge.AddListener(ChallengeTower); m_Sweep.AddListener(SweepTower); m_ViewProductRune.AddListener(ViewRuneProduct); } protected override void OnPreOpen() { WindowCenter.Instance.uiRoot.eventSystem.enabled = true; model.selectedFloor = model.currentFloor; var challengable = !model.allTowerCompleted && model.selectedFloor == model.currentFloor; m_ChallengeIcon.gray = !challengable; m_PassedInfoPanel.Display(); UpdateBossInfo(); UpdateFloorRewardInfo(); UpdateFightPower(); runeSweepActionId = DailyQuestConfig.Get((int)DailyQuestType.RuneTowerSweep).RelatedID; OnRuneTowerSweepResult(runeSweepActionId); model.selectedFloorEvent += OnSelectedFloorChange; dailyQuestModel.dailyQuestProgressUpdateEvent += OnRuneTowerSweepResult; } protected override void OnAfterOpen() { } protected override void OnPreClose() { guideChallenge = false; guideSweep = false; WindowCenter.Instance.uiRoot.eventSystem.enabled = true; m_Tower.Dispose(); UI3DModelExhibition.Instance.StopShow(); model.selectedFloorEvent -= OnSelectedFloorChange; dailyQuestModel.dailyQuestProgressUpdateEvent -= OnRuneTowerSweepResult; } protected override void OnAfterClose() { if (!WindowJumpMgr.Instance.IsJumpState) { WindowCenter.Instance.Open(); } } protected override void OnActived() { base.OnActived(); PopupRewardInfo(); if (model.wannaShowUnlockTower > 0) { WindowCenter.Instance.uiRoot.eventSystem.enabled = false; m_Tower.TowerCollapseShow(model.wannaShowUnlockTower, model.currentTower, OnTowerCollapseCompleted); } else { m_Tower.Display(model.currentTower); } CheckTaskGuide(); CheckSweepGuide(); CheckAchievementGuide(); } public override void CloseClick() { base.CloseClick(); } #endregion private void ChallengeTower() { if (!model.allTowerCompleted && model.currentFloor == model.selectedFloor) { var config = RuneTowerFloorConfig.Get(model.selectedFloor); if (PlayerDatas.Instance.baseData.FightPoint >= (ulong)NPCExConfig.Get(config.BossId).SuppressFightPower) { model.RequestChallengeTower(); } else { ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("RuneTower25", NPCExConfig.Get(config.BossId).SuppressFightPower), (bool ok) => { if (ok) { model.RequestChallengeTower(); } } ); } } } private void SweepTower() { var latestPassedFloor = model.yesterdayPassFloor; if (latestPassedFloor > 0) { var completedTime = dailyQuestModel.GetDailyQuestCompletedTimes((int)DailyQuestType.RuneTowerSweep); if (completedTime > 0) { WindowCenter.Instance.Open(); } else { dungeonModel.RequestSweep(new Dungeon(RuneTowerModel.RUNETOWER_MAPID, 0)); } } else { SysNotifyMgr.Instance.ShowTip("RuneTowerNoChalleng"); } } private void UpdateBossInfo() { var towerFloorConfig = RuneTowerFloorConfig.Get(model.selectedFloor); var npcConfig = NPCConfig.Get(towerFloorConfig.BossId); if (npcConfig.Realm > 0 && RealmConfig.Has(npcConfig.Realm)) { m_BossRealm.SetActive(true); var realmConfig = RealmConfig.Get(npcConfig.Realm); m_BossRealm.SetSprite(realmConfig.Img); } else { m_BossRealm.SetActive(false); } m_BossName.text = npcConfig.charName; m_BossLevel.text = Language.Get("HeadUpName_Monster", npcConfig.NPCLV); UI3DModelExhibition.Instance.ShowNPC(towerFloorConfig.BossId, new Vector3(0, 30, 0), m_BossPortrait); var challengable = !model.allTowerCompleted && model.selectedFloor == model.currentFloor; if (challengable) { m_ChangableBossEffect.Play(); } else { m_ChangableBossEffect.Stop(); } } private void UpdateFloorRewardInfo() { var towerConfig = RuneTowerConfig.Get(model.currentTower); var towerFloorConfig = RuneTowerFloorConfig.Get(model.selectedFloor); m_FloorRewardTitle.text = towerFloorConfig.RewardTitle; m_ProductRune.SetItem(towerConfig.ProductRune, 0); if (towerFloorConfig.RuneEssence > 0) { m_Essence.SetActive(true); m_Essence.SetItem(2106, towerFloorConfig.RuneEssence); } else { m_Essence.SetActive(false); } if (towerFloorConfig.RuneMagicEssence > 0) { m_MagicEssence.SetActive(true); m_MagicEssence.SetItem(4307, towerFloorConfig.RuneMagicEssence); } else { m_MagicEssence.SetActive(false); } var nextUnLockFloor = model.GetNextUnLockFloor(model.selectedFloor); m_RunePreviewGroup.Display(model.selectedFloor, nextUnLockFloor); } private void UpdateFightPower() { var towerConfig = RuneTowerConfig.Get(model.currentTower); var towerFloorConfig = RuneTowerFloorConfig.Get(model.selectedFloor); m_FigthPower.text = NPCExConfig.Get(towerFloorConfig.BossId).SuppressFightPower.ToString(); var reached = PlayerDatas.Instance.baseData.FightPoint >= (ulong)NPCExConfig.Get(towerFloorConfig.BossId).SuppressFightPower; m_FigthPower.color = UIHelper.GetUIColor(reached ? TextColType.Green : TextColType.Red); } private void PopupBossInfo() { showType = ShowType.BossInfo; UpdateUIElement(showType); UpdateBossInfo(); m_BossShowTween.Play(); } private void PopupRewardInfo() { showType = ShowType.RewardInfo; UpdateUIElement(showType); UpdateFloorRewardInfo(); UpdateFightPower(); m_RewardShowTween.Play(); } private void PopupTowerPassInfo() { showType = ShowType.PassedInfo; UpdateUIElement(showType); m_PassInfoTween.Play(); } private void OnSelectedFloorChange(int _floor) { var challengable = !model.allTowerCompleted && model.selectedFloor == model.currentFloor; m_ChallengeIcon.gray = !challengable; switch (showType) { case ShowType.BossInfo: UpdateBossInfo(); break; case ShowType.RewardInfo: UpdateFloorRewardInfo(); UpdateFightPower(); break; } } private void OnRuneTowerSweepResult(int _dailyQuestId) { if (_dailyQuestId == runeSweepActionId) { var dailyState = dailyQuestModel.GetQuestState((int)DailyQuestType.RuneTowerSweep); if (model.yesterdayPassFloor > 0) { m_Sweep.SetActive(true); m_Sweep.interactable = dailyState != DailyQuestModel.DailyQuestState.Completed; if (dailyState == DailyQuestModel.DailyQuestState.Completed) { m_SweepTip.text = Language.Get("RuneTower7"); m_SweepButtonDescription.text = Language.Get("RuneTower22"); } else { var floorConfig = RuneTowerFloorConfig.Get(model.yesterdayPassFloor); var towerConfig = RuneTowerConfig.Get(floorConfig.TowerId); m_SweepTip.text = Language.Get("RuneTower6", StringUtility.Contact(towerConfig.TowerName, floorConfig.FloorName)); var sweepTime = dailyQuestModel.GetDailyQuestCompletedTimes((int)DailyQuestType.RuneTowerSweep); m_SweepButtonDescription.text = Language.Get(sweepTime > 0 ? "RuneTower20" : "RuneTower22"); } } else { m_Sweep.SetActive(false); m_SweepTip.text = Language.Get("RuneTower4"); } } } private void UpdateUIElement(ShowType _showType) { m_ContainerBossInfo.SetActive(_showType == ShowType.BossInfo); m_ContainerReward.SetActive(_showType == ShowType.RewardInfo); m_PassedInfoPanel.SetActive(_showType == ShowType.PassedInfo); m_ViewBoss.transform.localScale = Vector3.one * (_showType == ShowType.BossInfo ? 1 : 0.8f); m_ViewReward.transform.localScale = Vector3.one * (_showType == ShowType.RewardInfo ? 1 : 0.8f); m_ViewPassedInfo.transform.localScale = Vector3.one * (_showType == ShowType.PassedInfo ? 1 : 0.8f); switch (_showType) { case ShowType.BossInfo: m_ViewBossEffect.Play(); m_ViewPassedInfoEffect.Stop(); m_ViewRewardEffect.Stop(); break; case ShowType.PassedInfo: m_ViewBossEffect.Stop(); m_ViewPassedInfoEffect.Play(); m_ViewRewardEffect.Stop(); break; case ShowType.RewardInfo: m_ViewBossEffect.Stop(); m_ViewPassedInfoEffect.Stop(); m_ViewRewardEffect.Play(); break; } } private void CheckTaskGuide() { if (guideChallenge) { var guideEffect = AchievementGuideEffectPool.Require(1); guideEffect.transform.SetParentEx(m_Challenge.transform, Vector3.zero, Vector3.zero, Vector3.one); } } private void CheckSweepGuide() { if (guideSweep && m_Sweep.gameObject.activeInHierarchy) { var guideEffect = AchievementGuideEffectPool.Require(1); guideEffect.transform.SetParentEx(m_Sweep.transform, Vector3.zero, Vector3.zero, Vector3.one); } } private void CheckAchievementGuide() { if (AchievementGoto.guideAchievementId != 0) { var config = SuccessConfig.Get(AchievementGoto.guideAchievementId); var condition = config.Type == 42; if (condition) { var guideEffect = AchievementGuideEffectPool.Require(1); guideEffect.transform.SetParentEx(m_Challenge.transform, Vector3.zero, Vector3.zero, Vector3.one); } } } private void ViewRuneProduct() { var towerConfig = RuneTowerConfig.Get(model.currentTower); RuneInfoWin.runeId = towerConfig.ProductRune; WindowCenter.Instance.Open(); } private void OnTowerCollapseCompleted() { WindowCenter.Instance.uiRoot.eventSystem.enabled = true; } public enum ShowType { BossInfo, RewardInfo, PassedInfo, } } }