89 lines
2.3 KiB
C#
89 lines
2.3 KiB
C#
using Godot;
|
|
using System;
|
|
|
|
namespace Cosmobox
|
|
{
|
|
public partial class InputControl : Node
|
|
{
|
|
[Export] public TickControl tickControl; // 控制游戏暂停的节点
|
|
[Export] public Player player; // 玩家节点
|
|
[Export] public BagUI bagUI; // 背包 UI
|
|
[Export] public Control devUI; // 开发者 UI
|
|
|
|
public override void _Ready()
|
|
{
|
|
// 初始化状态
|
|
UpdatePauseState();
|
|
}
|
|
|
|
public override void _Process(double delta)
|
|
{
|
|
// 监听 "bag" 按键
|
|
if (Input.IsActionJustPressed("bag"))
|
|
{
|
|
ToggleBagUI();
|
|
}
|
|
|
|
// 监听开发者 UI 的切换(假设通过某个按键触发)
|
|
if (Input.IsActionJustPressed("dev_ui"))
|
|
{
|
|
ToggleDevUI();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 切换背包 UI 的打开/关闭状态
|
|
/// </summary>
|
|
private void ToggleBagUI()
|
|
{
|
|
if (bagUI.IsOpen)
|
|
{
|
|
bagUI.CloseBag(); // 关闭背包
|
|
}
|
|
else
|
|
{
|
|
// 如果开发者 UI 已打开,则先关闭开发者 UI
|
|
if (devUI.Visible)
|
|
{
|
|
devUI.Visible = false;
|
|
}
|
|
bagUI.OpenBag(); // 打开背包
|
|
}
|
|
|
|
// 更新暂停状态
|
|
UpdatePauseState();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 切换开发者 UI 的可见性
|
|
/// </summary>
|
|
private void ToggleDevUI()
|
|
{
|
|
if (devUI.Visible)
|
|
{
|
|
devUI.Visible = false; // 关闭开发者 UI
|
|
}
|
|
else
|
|
{
|
|
// 如果背包已打开,则先关闭背包
|
|
if (bagUI.IsOpen)
|
|
{
|
|
bagUI.CloseBag();
|
|
}
|
|
devUI.Visible = true; // 打开开发者 UI
|
|
}
|
|
|
|
// 更新暂停状态
|
|
UpdatePauseState();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新游戏的暂停状态
|
|
/// </summary>
|
|
private void UpdatePauseState()
|
|
{
|
|
// 如果背包或开发者 UI 任一打开,则暂停游戏
|
|
tickControl.pause = bagUI.IsOpen || devUI.Visible;
|
|
}
|
|
}
|
|
} |