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();
RefreshFinalWave();
RefreshPropList();
EndlessMaskUI.instance.Show();
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();
}
}
}