Files
deltarune-yellow-translation/Scripts-new/EventCaller.cs
2025-05-03 20:36:17 +08:00

132 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using Godot;
using Godot.Bridge;
using Godot.NativeInterop;
[ScriptPath("res://Scripts/Events/EventCaller.cs")]
public class EventCaller : Node
{
[Signal]
public delegate void DoEventEventHandler();
public new class MethodName : Node.MethodName
{
public static readonly StringName CallEvent = "CallEvent";
}
public new class PropertyName : Node.PropertyName
{
}
public new class SignalName : Node.SignalName
{
public static readonly StringName DoEvent = "DoEvent";
}
private DoEventEventHandler backing_DoEvent;
public event DoEventEventHandler DoEvent
{
add
{
backing_DoEvent = (DoEventEventHandler)Delegate.Combine(backing_DoEvent, value);
}
remove
{
backing_DoEvent = (DoEventEventHandler)Delegate.Remove(backing_DoEvent, value);
}
}
public void CallEvent()
{
EmitSignal(SignalName.DoEvent);
}
[EditorBrowsable(EditorBrowsableState.Never)]
internal static List<MethodInfo> GetGodotMethodList()
{
return new List<MethodInfo>(1)
{
new MethodInfo(MethodName.CallEvent, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, null, null)
};
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret)
{
if (method == MethodName.CallEvent && args.Count == 0)
{
CallEvent();
ret = default(godot_variant);
return true;
}
return base.InvokeGodotClassMethod(in method, args, out ret);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool HasGodotClassMethod(in godot_string_name method)
{
if (method == MethodName.CallEvent)
{
return true;
}
return base.HasGodotClassMethod(in method);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void SaveGodotObjectData(GodotSerializationInfo info)
{
base.SaveGodotObjectData(info);
info.AddSignalEventDelegate(SignalName.DoEvent, backing_DoEvent);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void RestoreGodotObjectData(GodotSerializationInfo info)
{
base.RestoreGodotObjectData(info);
if (info.TryGetSignalEventDelegate<DoEventEventHandler>(SignalName.DoEvent, out var value))
{
backing_DoEvent = value;
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
internal static List<MethodInfo> GetGodotSignalList()
{
return new List<MethodInfo>(1)
{
new MethodInfo(SignalName.DoEvent, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, null, null)
};
}
protected void EmitSignalDoEvent()
{
EmitSignal(SignalName.DoEvent);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void RaiseGodotClassSignalCallbacks(in godot_string_name signal, NativeVariantPtrArgs args)
{
if (signal == SignalName.DoEvent && args.Count == 0)
{
backing_DoEvent?.Invoke();
}
else
{
base.RaiseGodotClassSignalCallbacks(in signal, args);
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool HasGodotClassSignal(in godot_string_name signal)
{
if (signal == SignalName.DoEvent)
{
return true;
}
return base.HasGodotClassSignal(in signal);
}
}