using Godot;
using EinSoftworks.Events;
namespace Voider;
///
/// Example script demonstrating how to use the ConfigurableEventManager.
/// This would typically be attached to a Player, Enemy, or other game object.
///
public partial class EventExample : Node
{
// Reference to the ConfigurableEventManager in the scene
private ConfigurableEventManager _eventManager;
public override void _Ready()
{
// Get reference to the ConfigurableEventManager node
// (Assumes it's named "EventManager" in your scene tree)
_eventManager = GetNode("/root/Main/EventManager");
// Subscribe to events
SubscribeToEvents();
}
private void SubscribeToEvents()
{
// Example: Subscribe to a simple event with no parameters
_eventManager.Subscribe("GameStarted", OnGameStarted);
// Example: Subscribe to an event with one parameter (int score)
_eventManager.Subscribe("ScoreChanged", OnScoreChanged);
// Example: Subscribe to an event with two parameters (string playerName, int level)
_eventManager.Subscribe("PlayerLevelUp", OnPlayerLevelUp);
}
// Event handlers
private void OnGameStarted()
{
GD.Print("Game has started!");
}
private void OnScoreChanged(int newScore)
{
GD.Print($"Score changed to: {newScore}");
}
private void OnPlayerLevelUp(string playerName, int newLevel)
{
GD.Print($"{playerName} leveled up to level {newLevel}!");
}
// Example of raising events from code
public void SomeGameAction()
{
// Raise an event with no parameters
_eventManager.Raise("GameStarted");
// Raise an event with one parameter
_eventManager.Raise("ScoreChanged", 100);
// Raise an event with two parameters
_eventManager.Raise("PlayerLevelUp", "Player1", 5);
}
public override void _ExitTree()
{
// Always unsubscribe when node is removed
UnsubscribeFromEvents();
}
private void UnsubscribeFromEvents()
{
if (_eventManager != null)
{
_eventManager.Unsubscribe("GameStarted", OnGameStarted);
_eventManager.Unsubscribe("ScoreChanged", OnScoreChanged);
_eventManager.Unsubscribe("PlayerLevelUp", OnPlayerLevelUp);
}
}
}