✨ Separated events from variables and adjusted test scene
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
using System.Collections.Generic;
|
||||
using Godot;
|
||||
|
||||
namespace Babushka.scripts.CSharp.Low_Code.Variables;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class VariableResource : Resource
|
||||
{
|
||||
/// <summary>
|
||||
/// 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;
|
||||
|
||||
private List<VariableListener> _varListeners = new ();
|
||||
|
||||
/// <summary>
|
||||
/// Adds an EventListener to the calling list for this event.
|
||||
/// </summary>
|
||||
/// <param name="listener"></param>
|
||||
public void RegisterListener(VariableListener listener)
|
||||
{
|
||||
if(_showLog)
|
||||
GD.Print("Registering listener " + listener);
|
||||
_varListeners.Add(listener);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes an Eventlistener from the calling list for this event.
|
||||
/// </summary>
|
||||
/// <param name="listener"></param>
|
||||
public void UnregisterListener(VariableListener listener)
|
||||
{
|
||||
if(_showLog)
|
||||
GD.Print("Unregistering listener " + listener);
|
||||
_varListeners.Remove(listener);
|
||||
}
|
||||
|
||||
/// <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 _varListeners)
|
||||
{
|
||||
eventListener.EventPayloadChanged(_payload, _lastPayload);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user