97 lines
3.1 KiB
Markdown
97 lines
3.1 KiB
Markdown
# ConfigurableEventManager Implementation Guide
|
|
|
|
## What is ConfigurableEventManager?
|
|
|
|
The ConfigurableEventManager is a Godot Node that provides a visual, inspector-based way to define and manage events in your game without writing code for each event.
|
|
|
|
## How to Set It Up
|
|
|
|
### Step 1: Add EventManager to Your Scene
|
|
|
|
1. Open `Scenes/Main.tscn` in Godot
|
|
2. The EventManager node should already be added as a child of Main
|
|
3. Select the EventManager node in the scene tree
|
|
|
|
### Step 2: Create GameEventResource Assets
|
|
|
|
You need to create `.tres` resource files that define your events:
|
|
|
|
1. In Godot, right-click in the FileSystem dock → **New Resource**
|
|
2. Search for **GameEventResource** and select it
|
|
3. Click **Create**
|
|
4. Save it in `Resources/Events/` (you may need to create this folder)
|
|
|
|
Example event resources to create:
|
|
|
|
#### GameStarted.tres
|
|
- **Event Name**: `GameStarted`
|
|
- **Description**: `Fired when the game begins`
|
|
- **Parameter Count**: `0`
|
|
- **Category**: `Game`
|
|
|
|
#### ScoreChanged.tres
|
|
- **Event Name**: `ScoreChanged`
|
|
- **Description**: `Fired when player score changes`
|
|
- **Parameter Count**: `1`
|
|
- **Parameter1 Type**: `int`
|
|
- **Parameter1 Description**: `The new score value`
|
|
- **Category**: `Player`
|
|
|
|
#### PlayerLevelUp.tres
|
|
- **Event Name**: `PlayerLevelUp`
|
|
- **Description**: `Fired when player gains a level`
|
|
- **Parameter Count**: `2`
|
|
- **Parameter1 Type**: `string`
|
|
- **Parameter1 Description**: `Player name`
|
|
- **Parameter2 Type**: `int`
|
|
- **Parameter2 Description**: `New level number`
|
|
- **Category**: `Player`
|
|
|
|
### Step 3: Configure EventManager in Inspector
|
|
|
|
1. Select the EventManager node in your scene
|
|
2. In the Inspector, find the **Events** array property
|
|
3. Click to expand it and set the **Size** to match your number of events (e.g., 3)
|
|
4. Drag your `.tres` event resource files into each array slot
|
|
5. Optionally enable **Enable Debug Logging** to see event activity in the console
|
|
|
|
### Step 4: Use Events in Your Scripts
|
|
|
|
See `Scripts/EventExample.cs` for a complete example of:
|
|
- Getting a reference to the EventManager
|
|
- Subscribing to events
|
|
- Raising events
|
|
- Unsubscribing from events
|
|
|
|
## Key Benefits
|
|
|
|
✅ **Visual Configuration** - Define events in the Inspector without code
|
|
✅ **Type Safety** - Still get compile-time checking in C#
|
|
✅ **Documentation** - Event descriptions and parameter info built-in
|
|
✅ **Debug Logging** - Optional logging for all event activity
|
|
✅ **Validation** - Warns if you subscribe with wrong parameter count
|
|
|
|
## Usage Pattern
|
|
|
|
```csharp
|
|
// 1. Get reference
|
|
_eventManager = GetNode<ConfigurableEventManager>("/root/Main/EventManager");
|
|
|
|
// 2. Subscribe
|
|
_eventManager.Subscribe<int>("ScoreChanged", OnScoreChanged);
|
|
|
|
// 3. Raise event somewhere
|
|
_eventManager.Raise("ScoreChanged", 100);
|
|
|
|
// 4. Unsubscribe when done
|
|
_eventManager.Unsubscribe<int>("ScoreChanged", OnScoreChanged);
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
1. Open the project in Godot 4.5
|
|
2. Create your GameEventResource assets in the editor
|
|
3. Add them to the EventManager's Events array
|
|
4. Use the example script as a template for your game objects
|
|
5. Enable debug logging to see events firing in real-time
|