Files
Gen_Hack-and-Slash-Roguelite/Client/Assets/Scripts/Base/PlayGameSceneControl.cs

126 lines
4.0 KiB
C#
Raw Normal View History

using System;
using Data;
using Entity;
using Managers;
using Map;
using UI;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Base
{
public class PlayGameSceneControl:MonoBehaviour,ITick
{
public Dimension dimensionPrefab;
public WaitStartUI waitStartUI;
public bool AllDimensionsLoaded => OutsideDimensionsLoaded && InsideDimensionsLoaded;
public bool OutsideDimensionsLoaded { get; private set; }
public bool InsideDimensionsLoaded { get; private set; }
public DimensionDef OutsideDef{get; private set;}
public DimensionDef InsideDef{get; private set;}
public Dimension OutsideDimension{get; private set;}
public Dimension InsideDimension{get; private set;}
public bool TaskCompleted{get; private set;}
private void Start()
{
OutsideDef = Program.Instance.OutsidePlayDimension;
InsideDef = Program.Instance.CurrentCharacter.insideDimensionDef ??
DefineManager.Instance.FindDefine<DimensionDef>(
Configs.ConfigManager.Instance.GetValue<string>("InsideDimension"));
if (OutsideDef == null || InsideDef == null)
{
MessageManager.Instance.DisplayMessage("初始化失败检查XML文件完整性",PromptDisplayCategory.ScreenCenterLargeText,Color.brown);
Invoke(nameof(ReturnMainMenu), 3);
}
OutsideDimension=Instantiate(dimensionPrefab);
InsideDimension = Instantiate(dimensionPrefab);
OutsideDimension.transform.localPosition = new Vector3(0, 0, 1);
InsideDimension.transform.localPosition = new Vector3(0, 1000, 1);
_ = OutsideDimension.ApplyDimensionDef(OutsideDef);
_ = InsideDimension.ApplyDimensionDef(InsideDef);
OutsideDimension.OnDimensionLoaded += OutsideDimensionLoaded;
OutsideDimension.OnDimensionLoaded += InsideDimensionLoaded;
Program.Instance.SetFocusedDimension(OutsideDimension.DimensionId);
Clock.AddTick(this);
}
private void OnDestroy()
{
Clock.RemoveTick(this);
}
private void StartGame()
{
if (!AllDimensionsLoaded)
{
return;
}
waitStartUI.Hide();
Program.Instance.PutPlayer();
if (OutsideDef.story != null)
{
EventManager.Instance.PlayStory(OutsideDef.story.defName, OutsideDimension.DimensionId);
}
if (InsideDef.story != null)
{
EventManager.Instance.PlayStory(InsideDef.story.defName, InsideDimension.DimensionId);
}
}
private void ReturnMainMenu()
{
EscUI.ReturnMainMenu();
}
private void OutsideDimensionLoaded(Dimension dimension)
{
OutsideDimensionsLoaded = true;
StartGame();
}
private void InsideDimensionLoaded(Dimension dimension)
{
InsideDimensionsLoaded = true;
StartGame();
}
public void Tick()
{
if(!AllDimensionsLoaded)
return;
if (EventManager.Instance.HasStoryDisplay || TaskCompleted)
return;
MessageManager.Instance.DisplayMessage("清理完毕!", PromptDisplayCategory.ScreenCenterLargeText,
Color.softYellow);
TaskCompleted = true;
Invoke(nameof(ReturnBase), 5);
var player = Program.Instance.FocusedEntity as Character;
if(!player)
return;
Program.Instance.CoinCount += player.Coin.Quantity;
}
public void ReturnBase()
{
Program.Instance.EndPlayGame();
SceneManager.LoadScene("Base");
}
}
}