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 GetGodotMethodList() { return new List(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(SignalName.DoEvent, out var value)) { backing_DoEvent = value; } } [EditorBrowsable(EditorBrowsableState.Never)] internal static List GetGodotSignalList() { return new List(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); } }