// Confirm dialog
// Created by nwhasd
// 2021/8/29
// MIT license
using Godot;
// 模态确认框
public class ConfirmationDialogEx : ConfirmationDialog
{
// 回调函数类型定义
public delegate void CfmDlgCallBackFunc();
// 点击确认按钮后的回调函数
private CfmDlgCallBackFunc _confirmFunc;
// 点击取消按钮后的回调函数
private CfmDlgCallBackFunc _cancelFunc;
// 显示提示
public static void ShowTips(Node parent, string tips, CfmDlgCallBackFunc confirmFunc, CfmDlgCallBackFunc cancelFunc = null)
{
ConfirmationDialogEx dlg = new ConfirmationDialogEx();
dlg.SetTips(parent, tips, confirmFunc, cancelFunc);
}
// 设置提示
private void SetTips(Node parent, string tips, CfmDlgCallBackFunc confirmFunc, CfmDlgCallBackFunc cancelFunc = null)
{
if (null == parent || null == confirmFunc)
return;
parent.AddChild(this);
DialogText = tips;
PopupExclusive = true;
WindowTitle = "提示";
GetOk().Text = "确定";
GetCancel().Text = "取消";
PopupCentered();
Connect("popup_hide", this, nameof(OnClose));
GetOk().Connect("pressed", this, nameof(OnOk));
GetCancel().Connect("pressed", this, nameof(OnCancel));
GetCloseButton().Connect("pressed", this, nameof(OnCancel));
_confirmFunc = confirmFunc;
_cancelFunc = cancelFunc;
}
// 点击确认按钮
private void OnOk()
{
if (null != _confirmFunc)
_confirmFunc();
}
// 点击取消(关闭)按钮
private void OnCancel()
{
if (null != _cancelFunc)
_cancelFunc();
}
// 关闭对话框
private void OnClose()
{
Node parent = GetParent();
if (null != parent)
parent.RemoveChild(this);
QueueFree();
}
}
使用:
using Godot;
public class Main : Control
{
public override void _Ready()
{
GetNode("Button").Connect("pressed", this, "OnClick");
}
void OnClick()
{
ConfirmationDialogEx.ShowTips(this, "你好吗?",
() => {
GD.Print("我很好!");
},
() => {
GD.Print("不太好。");
});
}
}