Added event payload and Valuechange-handling

pull/19/head
kziolkowski 3 months ago
parent 5bcbee8865
commit ef56f79d5c

@ -1,8 +0,0 @@
[gd_resource type="Resource" script_class="EventResource" load_steps=2 format=3 uid="uid://bgfxakxxfmoxs"]
[ext_resource type="Script" uid="uid://ci3t5mvnopntg" path="res://scripts/CSharp/Low Code/Events/EventResource.cs" id="1_jm77s"]
[resource]
script = ExtResource("1_jm77s")
_showLog = true
metadata/_custom_type_script = "uid://ci3t5mvnopntg"

@ -1,4 +1,3 @@
using System;
using Godot; using Godot;
using Godot.Collections; using Godot.Collections;
@ -24,6 +23,26 @@ public partial class EventListener : Node
/// </summary> /// </summary>
[Signal] public delegate void EventRaisedEventHandler(); [Signal] public delegate void EventRaisedEventHandler();
/// <summary>
/// The signal that is triggered when this listener is called by one of the <see cref="EventListener._eventResources"/>.
/// </summary>
[Signal] public delegate void EventRaisedWithPayloadEventHandler(Variant payload);
/// <summary>
/// A signal that is triggered when the payload of one of the <see cref="EventListener._eventResources"/> changed.
/// </summary>
[Signal] public delegate void PayloadChangedEventHandler(Variant payload, Variant oldPayload);
/// <summary>
/// A signal that is triggered when the payload of one of the <see cref="EventListener._eventResources"/> changed.
/// </summary>
[Signal] public delegate void NewEventPayloadEventHandler(Variant payload);
/// <summary>
/// A signal that is triggered when the payload of one of the <see cref="EventListener._eventResources"/> changed.
/// </summary>
[Signal] public delegate void OldEventPayloadEventHandler(Variant oldPayload);
/// <summary> /// <summary>
/// Subscribes to all <see cref="EventResource"/>s present in the <see cref="_eventResources"/> array. /// Subscribes to all <see cref="EventResource"/>s present in the <see cref="_eventResources"/> array.
@ -53,10 +72,24 @@ public partial class EventListener : Node
/// Called by a <see cref="EventResource"/>s from the <see cref="_eventResources"/> array. /// Called by a <see cref="EventResource"/>s from the <see cref="_eventResources"/> array.
/// Propagates the event by emitting <see cref="EventRaised"/> signal. /// Propagates the event by emitting <see cref="EventRaised"/> signal.
/// </summary> /// </summary>
public void Invoke() public void EventInvoked(Variant payload)
{ {
if(_showLog) if(_showLog)
GD.Print("Event Raised on: " + Name); GD.Print("Event Raised on: " + Name);
EmitSignal(SignalName.EventRaised); EmitSignal(SignalName.EventRaised);
EmitSignal(SignalName.EventRaisedWithPayload, payload);
}
/// <summary>
/// Called by a <see cref="EventResource"/>s from the <see cref="_eventResources"/> array.
/// Propagates the event by emitting <see cref="EventRaised"/> signal.
/// </summary>
public void EventPayloadChanged(Variant payload, Variant oldPayload)
{
if(_showLog)
GD.Print($"Calling Event Payload Changed Signals on: " + Name);
EmitSignal(SignalName.PayloadChanged, payload, oldPayload);
EmitSignal(SignalName.NewEventPayload, payload);
EmitSignal(SignalName.OldEventPayload, oldPayload);
} }
} }

@ -15,6 +15,24 @@ public partial class EventResource : Resource
/// </summary> /// </summary>
[Export] private bool _showLog; [Export] private bool _showLog;
[Export]
public Variant Payload
{
get { return _payload; }
set
{
if (!_payload.Equals(value))
{
_lastPayload = _payload;
_payload = value;
ValueChangeHandler();
}
}
}
private Variant _payload;
private Variant _lastPayload;
/// <summary> /// <summary>
/// Raise-Button Call with Editor Export for easier debugging. /// Raise-Button Call with Editor Export for easier debugging.
/// Beware: This will only work with custom event listeners that register at edit-time. /// Beware: This will only work with custom event listeners that register at edit-time.
@ -56,7 +74,22 @@ public partial class EventResource : Resource
foreach (var eventListener in _eventListeners) foreach (var eventListener in _eventListeners)
{ {
eventListener.Invoke(); eventListener.EventInvoked(_payload);
} }
} }
/// <summary>
/// Called when the Payload value changed.
/// </summary>
public void ValueChangeHandler()
{
if(_showLog)
GD.Print($"Event payload changed from {_lastPayload} to {_payload} on event resource: " + ResourcePath.GetFile().TrimSuffix(".tres"));
foreach (var eventListener in _eventListeners)
{
eventListener.EventPayloadChanged(_payload, _lastPayload);
}
}
} }
Loading…
Cancel
Save