Implemented first version of EventResources

This commit is contained in:
2025-10-13 09:57:49 +02:00
parent d6a2b586e4
commit 1e004b62b8
11 changed files with 128 additions and 3 deletions
+13
View File
@@ -0,0 +1,13 @@
using Godot;
namespace Babushka.scripts.CSharp.Events;
public partial class EventCaller : Node
{
[Export] EventResource eventResource;
public void RaiseEvent()
{
eventResource.Raise();
}
}
+1
View File
@@ -0,0 +1 @@
uid://b5dotkx17gvxg
+28
View File
@@ -0,0 +1,28 @@
using Godot;
namespace Babushka.scripts.CSharp.Events;
public partial class EventListener : Node
{
[Export] private EventResource _eventResource;
[Export] private bool _showLog;
[Signal] public delegate void EventRaisedEventHandler();
public override void _EnterTree()
{
_eventResource.RegisterListener(this);
}
public override void _ExitTree()
{
_eventResource.UnregisterListener(this);
}
public void RaiseEvent()
{
if(_showLog)
GD.Print("Event Raised on: " + Name);
EmitSignal(SignalName.EventRaised);
}
}
@@ -0,0 +1 @@
uid://bc6uaaxsx5k5p
+44
View File
@@ -0,0 +1,44 @@
using System.Collections.Generic;
using Godot;
namespace Babushka.scripts.CSharp.Events;
[GlobalClass] [Tool]
public partial class EventResource : Resource
{
[Export] private string Name
{
get { return ResourceName; }
set { ResourceName = value; }
}
[Export] private bool _showLog;
[ExportToolButton("Raise")] Callable _raiseAction => Callable.From(Raise);
private List<EventListener> _eventListeners = new ();
public void RegisterListener(EventListener listener)
{
if(_showLog)
GD.Print("Registering listener " + listener);
_eventListeners.Add(listener);
}
public void UnregisterListener(EventListener listener)
{
if(_showLog)
GD.Print("Unregistering listener " + listener);
_eventListeners.Remove(listener);
}
public void Raise()
{
if(_showLog)
GD.Print("Raising event: " + Name);
foreach (var eventListener in _eventListeners)
{
eventListener.RaiseEvent();
}
}
}
@@ -0,0 +1 @@
uid://ci3t5mvnopntg