using UnityEngine; using UnityEngine.UI; using TowerDefense.UI.HUD; using DG.Tweening; using TowerDefense.Towers.Placement; using UnityEngine.SceneManagement; using TowerDefense.Level; /** * 无尽模式结算 * @Author: chenxin * @Date: 2020-10-19 17:11:03 */ namespace KTGMGemClient { public class EndlessSettlement : MonoBehaviour { public AudioClip VictoryAudio; public AudioSource AudioSource; /// /// Name of level select screen /// public string menuSceneName = "MainManuScene"; /// /// Reference to the /// protected EndlessLevelManager levelManager; /// /// 最终波次文本 /// public Text FinalWaveText; /// /// 道具列表UI /// public GameObject PropListUI; public GameObject SettlementUI; public void Init() { LazyLoad(); levelManager.LevelCompleted -= Victory; levelManager.LevelCompleted += Victory; } /// /// 回到主界面的功能,暂时也使用重新开启新关卡. /// public void ReturnToMainMenu() { if (GameConfig.IsNewbieGuideCompleted) GameConfig.IsNewbie = false; // 清空所有Tween数据: DOTween.Clear(); EndlessUIStart.bFirstLoaded = false; EndlessUIStart.bGameStart = false; TowerPlacementGridEndless.GRID_OPENCASH = 100; SafelyUnsubscribe(); SceneManager.LoadScene(menuSceneName); } /// /// Shows the end game screen /// protected void OpenEndGameScreen(bool victory) { if (!EndlessGameUI.instanceExists) return; if (EndlessGameUI.instance.state == EndlessGameUI.State.Building) EndlessGameUI.instance.CancelGhostPlacement(); RefreshFinalWave(); RefreshPropList(); SettlementUI.SetActive(true); } /// /// Occurs when the level is sucessfully completed /// protected void Victory() { EndlessUIStart.instance.Pause(); OpenEndGameScreen(true); if (VictoryAudio != null && AudioSource != null) AudioSource.PlayOneShot(VictoryAudio); } /// /// Safely unsubscribes from events. /// protected void OnDestroy() { SafelyUnsubscribe(); if (EndlessGameUI.instanceExists) EndlessGameUI.instance.Unpause(); } // /// Ensure that events are unsubscribed from when necessary /// protected void SafelyUnsubscribe() { LazyLoad(); levelManager.LevelCompleted -= Victory; } /// /// Ensure is not null /// protected void LazyLoad() { if (levelManager == null && EndlessLevelManager.instanceExists) levelManager = EndlessLevelManager.instance; } /// /// 刷新最终波次信息 /// /// 关卡等级 /// 波次 private void RefreshFinalWave() { int level = EndlessLevelManager.instance.CurrentLevel; int wave = EndlessLevelManager.instance.WaveManager.CurrentWaveIndex; FinalWaveText.text = $"最终波次:第{level}关,第{wave}波"; } private void RefreshPropList() { EndlessSettlementPropList list = PropListUI.GetComponent(); list.RefreshList(); } } }