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()
{
EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessLevelCompleted);
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();
}
}
}