✨ Added event payload and Valuechange-handling
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
using System;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
|
||||
@@ -23,6 +22,26 @@ public partial class EventListener : Node
|
||||
/// The signal that is triggered when this listener is called by one of the <see cref="EventListener._eventResources"/>.
|
||||
/// </summary>
|
||||
[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>
|
||||
@@ -53,10 +72,24 @@ public partial class EventListener : Node
|
||||
/// 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 Invoke()
|
||||
public void EventInvoked(Variant payload)
|
||||
{
|
||||
if(_showLog)
|
||||
GD.Print("Event Raised on: " + Name);
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,24 @@ public partial class EventResource : Resource
|
||||
/// Log into console when this event resource is adding or removing listeners, and when it's raised.
|
||||
/// </summary>
|
||||
[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>
|
||||
/// Raise-Button Call with Editor Export for easier debugging.
|
||||
@@ -56,7 +74,22 @@ public partial class EventResource : Resource
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user