Files
dingyuntian 91ffbeb130 feat(ui): 添加录制工具面板
新增 RecordingToolPanel,按 Ctrl+R 唤出侧边栏,可独立控制光标、
版本号、Top Bar 与对话视觉的显隐。移除旧的
UIEventEnum.RecordingModeChanged 事件,改为各子系统提供显式
SetVisible API。在 Persistence 场景中配置面板层级与四个开关。
2026-07-15 16:51:55 +08:00

121 lines
3.4 KiB
C#

using UnityEngine;
using UnityEngine.UI;
namespace AibisDream.UI
{
public class MainPanel : MonoBehaviour, IUIPanel
{
public bool IsOpen => gameObject.activeSelf;
public bool IsCloseable => false;
private BoolButton _autoBtn;
private BoolButton _ffwdBtn;
private Transform _topBar;
private bool _topBarVisible = true;
#region 面板控制
public void Show()
{
gameObject.SetActive(true);
ApplyTopBarVisibility();
}
public void Hide()
{
gameObject.SetActive(false);
}
public void SetTopBarVisible(bool visible)
{
_topBarVisible = visible;
ApplyTopBarVisibility();
}
private void ApplyTopBarVisibility()
{
if (_topBar != null)
{
_topBar.gameObject.SetActive(_topBarVisible);
}
}
#endregion
private void Awake()
{
_topBar = transform.Find("Top Bar");
RegisterButton();
}
private void OnEnable()
{
if (DialogController.Instance != null)
{
DialogController.Instance.advanceMode.RegisterAndTrigger(OnAdvanceModeChanged);
}
}
private void OnDisable()
{
if (DialogController.Instance != null)
{
DialogController.Instance.advanceMode.UnRegister(OnAdvanceModeChanged);
}
}
private void OnAdvanceModeChanged(AdvanceMode mode)
{
_autoBtn.FreshState();
_ffwdBtn.FreshState();
}
private void Update()
{
if (Input.GetKey(KeyCode.Q) && Input.GetKeyDown(KeyCode.P))
{
var obj = transform.Find("Top Bar").Find("Quick Forward").gameObject;
var active = obj.activeSelf;
obj.SetActive(!active);
}
}
private void RegisterButton()
{
// 为按钮注册事件
var topBar = transform.Find("Top Bar");
topBar.Find("Setting").GetComponent<Button>().onClick.AddListener(OpenSettingPanel);
topBar.Find("Record").GetComponent<Button>().onClick.AddListener(OpenRecordPanel);
// 自动跳过和快进包括状态变换
_autoBtn = topBar.Find("Auto Skip").GetComponent<BoolButton>();
_autoBtn.OnClick.AddListener(AutoSkip);
_autoBtn.getBool = () => DialogController.Instance.advanceMode.Value.CurrentMode == AdvanceModeEnum.Auto;
_ffwdBtn = topBar.Find("Quick Forward").GetComponent<BoolButton>();
_ffwdBtn.OnClick.AddListener(QuickForward);
_ffwdBtn.getBool = () => DialogController.Instance.advanceMode.Value.CurrentMode == AdvanceModeEnum.Quick;
}
private void AutoSkip()
{
DialogController.Instance.SwitchAutoMode();
}
private void QuickForward()
{
DialogController.Instance.SwitchQuickMode();
}
private void OpenSettingPanel()
{
UIManager.Instance.GetPanel<InGameTerminalPanel>()?.Open(InGameTerminalPage.Setting);
}
private void OpenRecordPanel()
{
UIManager.Instance.GetPanel<InGameTerminalPanel>()?.Open(InGameTerminalPage.Record);
}
}
}