132 lines
3.3 KiB
C#
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);
|
|
}
|
|
}
|