Start encounter feature
This commit is contained in:
95
scripts/event_bus.gd
Normal file
95
scripts/event_bus.gd
Normal file
@@ -0,0 +1,95 @@
|
||||
## Global event bus for signal-based communication across systems.
|
||||
##
|
||||
## Centralizes game events to decouple systems and simplify event handling.
|
||||
## Register as autoload singleton: Project Settings → Autoload → EventBus
|
||||
extends Node
|
||||
|
||||
# ============================================================================
|
||||
# Game State Events
|
||||
# ============================================================================
|
||||
|
||||
## Emitted when game state changes
|
||||
signal state_changed(new_state: int, old_state: int)
|
||||
|
||||
## Emitted when draft phase begins
|
||||
signal draft_started(available_tetrominoes: Array[Resource])
|
||||
|
||||
## Emitted when placement phase begins
|
||||
signal placement_started(tetromino: Resource)
|
||||
|
||||
## Emitted when telegraph phase begins
|
||||
signal telegraph_started(wave_config: Resource)
|
||||
|
||||
## Emitted when combat phase begins
|
||||
signal combat_started(wave_number: int)
|
||||
|
||||
## Emitted when escalation phase begins
|
||||
signal escalation_started(wave_number: int)
|
||||
|
||||
# ============================================================================
|
||||
# Wave & Enemy Events
|
||||
# ============================================================================
|
||||
|
||||
## Emitted when enemy spawns
|
||||
signal enemy_spawned(enemy: Node3D)
|
||||
|
||||
## Emitted when enemy is defeated
|
||||
signal enemy_died(enemy: Node3D)
|
||||
|
||||
## Emitted when all enemies in wave are defeated
|
||||
signal wave_completed(wave_number: int)
|
||||
|
||||
## Emitted when wave fails (enemies reach board/health depleted)
|
||||
signal wave_failed(wave_number: int)
|
||||
|
||||
# ============================================================================
|
||||
# Combat Events
|
||||
# ============================================================================
|
||||
|
||||
## Emitted when tower fires projectile
|
||||
signal tower_fired(tower: Node3D, target: Node3D)
|
||||
|
||||
## Emitted when projectile hits enemy
|
||||
signal projectile_hit(projectile: Node3D, enemy: Node3D, damage: int)
|
||||
|
||||
## Emitted when tower takes damage from enemy
|
||||
signal tower_damaged(tower: Node3D, damage: int)
|
||||
|
||||
## Emitted when synergy is activated
|
||||
signal synergy_activated(towers: Array[Node3D], bonus_type: String, bonus_value: float)
|
||||
|
||||
# ============================================================================
|
||||
# Player Resource Events
|
||||
# ============================================================================
|
||||
|
||||
## Emitted when player gold changes
|
||||
signal gold_changed(amount: int)
|
||||
|
||||
## Emitted when player health changes
|
||||
signal health_changed(amount: int)
|
||||
|
||||
## Emitted when tower is placed
|
||||
signal tower_placed(tower: Node3D, position: Vector3)
|
||||
|
||||
## Emitted when tower is moved/repositioned
|
||||
signal tower_moved(tower: Node3D, new_position: Vector3, old_position: Vector3)
|
||||
|
||||
# ============================================================================
|
||||
# Game End Events
|
||||
# ============================================================================
|
||||
|
||||
## Emitted when player wins the encounter
|
||||
signal game_won
|
||||
|
||||
## Emitted when player loses the encounter
|
||||
signal game_lost
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
# Ensure this is a singleton
|
||||
if get_tree().root.get_child_count() > 1:
|
||||
for i in range(get_tree().root.get_child_count()):
|
||||
var child = get_tree().root.get_child(i)
|
||||
if child is EventBus and child != self:
|
||||
queue_free()
|
||||
return
|
||||
Reference in New Issue
Block a user