Files
Billiards/controllers/game/modes/game_manager.gd
itdominator e3bdb21cd2 feat(game): add free ball mode and improve ball state handling
* add Free Ball game mode and lobby selection
* refactor base mode ball state tracking for reaped/sunk balls
* add player ownership tracking and colored-ball support
* add initial 9-ball mode implementation
* update 8-ball and snooker modes to use base ball handling
* replicate ball linear velocity for multiplayer synchronization
* improve ball collision sound propagation and physics settings
* reenable game music and initialize game signals
* improve lobby input focus and mode selection behavior
* adjust cue impulse origin and default game mode
2026-08-10 21:22:52 -05:00

30 lines
791 B
GDScript

class_name GameManager extends GamManagerMultiplayer
func _ready() -> void:
setup_signals()
setup_multiplayer()
func setup_signals() -> void:
Globals.game_state.balls_stopped_moving.connect(_balls_stopped_moving)
Globals.game_state.reap_ball.connect(_reap_ball)
Globals.game_state.process_ball.connect(_process_ball)
func _reap_ball(ball: Node3D) -> void:
if ball.name == "white_ball":
Globals.game_state.white_ball_needs_hard_reset.emit()
return
mode.reap_ball(ball)
rpc("reap_ball", str(ball.get_path()))
func _process_ball(ball: Node3D) -> void:
if ball.name == "white_ball":
# NOTE: Signal to reset 'white_ball' to 'white_ball_marker' global_pos
Globals.game_state.white_ball_sunk.emit()
return
mode.process_ball(ball)
rpc("reap_ball", str(ball.get_path()))