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

126 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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");
}
}
}