Files
Cielonos/Assets/Scripts/MainGame/Managers/MainGameManager.cs
2026-05-10 11:47:55 -04:00

98 lines
2.9 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 Cielonos.Core;
using Cielonos.MainGame.Characters;
using SLSUtilities.General;
using SLSUtilities.UI;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Serialization;
namespace Cielonos.MainGame
{
public partial class MainGameManager : Singleton<MainGameManager>
{
public Player player;
public MainGameBaseCollection baseCollection;
public MainGameConfig mainGameConfig;
protected override void Awake()
{
base.Awake();
}
private void Start()
{
Application.targetFrameRate = 120;
// 订阅 UIPageManager 的输入阻塞事件,联动 isCursorLocked
if (UIPageManager.Instance != null)
{
UIPageManager.Instance.OnInputBlockChanged += OnUIInputBlockChanged;
}
// 场景加载完成后自动开始新一局 Run
RunManager.Instance.StartNewRun();
}
private void Update()
{
if (Keyboard.current != null && Keyboard.current.escapeKey.wasPressedThisFrame)
{
// 优先:如果有 UI 页面打开ESC 关闭栈顶页面
if (UIPageManager.Instance != null && UIPageManager.Instance.HasOpenPages)
{
UIPageManager.Instance.CloseTopPage();
return;
}
#if !UNITY_EDITOR
// 无页面打开时的 fallback切换鼠标锁定状态仅 Build
if (Cursor.lockState == CursorLockMode.Locked)
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
else
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
#endif
}
}
private void OnDestroy()
{
if (UIPageManager.Instance != null)
{
UIPageManager.Instance.OnInputBlockChanged -= OnUIInputBlockChanged;
}
}
/// <summary>
/// UIPageManager 输入阻塞回调。
/// blocked = true有页面打开 → 解锁鼠标,禁用游戏输入。
/// blocked = false所有页面关闭 → 锁定鼠标,恢复游戏输入。
/// </summary>
private void OnUIInputBlockChanged(bool blocked)
{
player.inputSc.isCursorLocked.Value = !blocked;
}
}
public partial class MainGameManager
{
public static Player Player => Instance.player;
public static AttributeSubmodule GlobalAttributeSm => Player.globalAttributeSm;
public static MainGameBaseCollection BaseCollection => Instance.baseCollection;
public static MainGameConfig Config => Instance.mainGameConfig;
public static string Seed;
}
}
namespace Cielonos.MainGame
{
}