using GFramework.Game.Abstractions.ui;
using GFramework.Godot.extensions;
using Godot;
namespace GFramework.Godot.ui;
///
/// 控制 UI 页面行为的泛型行为类,
/// 支持所有继承自 CanvasItem 的节点
///
/// CanvasItem 类型的视图节点
public class CanvasItemPageBehavior(T owner) : IPageBehavior
where T : CanvasItem
{
private readonly IUiPage? _page = owner as IUiPage;
///
/// 页面视图对象
///
public object View => owner;
///
/// 获取页面是否存活状态
///
public bool IsAlive => owner.IsValidNode();
///
/// 页面进入时调用
///
/// 页面进入参数
public void OnEnter(IUiPageEnterParam? param)
{
_page?.OnEnter(param);
}
///
/// 页面退出时调用
///
public void OnExit()
{
_page?.OnExit();
owner.QueueFreeX();
}
///
/// 页面暂停时调用
///
public void OnPause()
{
_page?.OnPause();
// 暂停节点的处理、物理处理和输入处理
owner.SetProcess(false);
owner.SetPhysicsProcess(false);
owner.SetProcessInput(false);
}
///
/// 页面恢复时调用
///
public void OnResume()
{
_page?.OnResume();
// 恢复节点的处理、物理处理和输入处理
owner.SetProcess(true);
owner.SetPhysicsProcess(true);
owner.SetProcessInput(true);
}
///
/// 页面隐藏时调用
///
public void OnHide()
{
_page?.OnHide();
owner.Hide();
}
///
/// 页面显示时调用
///
public void OnShow()
{
_page?.OnShow();
owner.Show();
OnResume();
}
}