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 GameObject EffectPrefabObject; private GameObject effectObj; public void Init() { LazyLoad(); levelManager.LevelCompleted -= Victory; levelManager.LevelCompleted += Victory; } /// /// 回到主界面的功能,暂时也使用重新开启新关卡. /// public void ReturnToMainMenu() { // 清空所有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(); GameObject go = Instantiate(Resources.Load("UI/Final/FinalPanel"), GameObject.Find("MainUI").transform); FinalPanel panelUI = go.GetComponent(); panelUI.SetData($"成绩 {EndlessLevelManager.instance.CurrentLevel}关 {EndlessLevelManager.instance.WaveManager.CurrentWaveIndex}波", EndlessScoreData.CurrentSocre); GameObject.Find("BottomUI").GetComponent().enabled = false; return; RefreshFinalWave(); RefreshPropList(); SettlementUI.SetActive(true); PlayEffect(); } private void PlayEffect() { if (effectObj == null) { effectObj = Instantiate(EffectPrefabObject); GameObject particleSystemObject = GameObject.Find("ParticleSystemObject"); effectObj.transform.SetParent(particleSystemObject.transform, false); effectObj.transform.localPosition = new Vector3(0, 0, 36.6f); effectObj.transform.localScale = new Vector3(3, 3, 3); } ParticleSystem ps = effectObj.transform.GetChild(0).GetComponent(); ps.Play(); } /// /// Occurs when the level is sucessfully completed /// protected void Victory() { EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessLevelCompleted); EndlessUIStart.instance.Pause(); int showFavorite = PlayerPrefs.GetInt("GemBattleFavorite"); if (showFavorite == 0) { GameObject go = Instantiate(Resources.Load("UI/Favorite/FavoritePanel"), this.transform.root); FavoritePanelUI panelUI = go.GetComponent(); panelUI.SetAC(ShowPanel); } else { ShowPanel(); } } private void ShowPanel() { 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(); } } }