Files
Billiards/scenes/data/game_data.gd
itdominator ed6f243b93 Refactor game mode scoring and win conditions
* Add overridable hooks for sunk/reaped ball handling and turn behavior.
* Implement default scoring and game-over messaging across game modes.
* Add pretty game mode names for win-condition messages.
* Update Free Ball, Last Ball, and Snooker modes to return win-condition messages.
* Move the reset button lookup to the scene root for multiplayer setup.
* Move camera controller scene to shared base UI. Move parts of it to new game_data UI node.
* Add commented test state generation for end-state testing.
2026-08-14 03:38:04 -05:00

71 lines
1.3 KiB
GDScript

class_name GameData extends Node
var client1: int
var client2: int
var player_id: String = ""
var game_address: String = "0.0.0.0"
var game_port: int = 8080
var game_mode: String = "freeball"
enum PlayerType {
Player1,
Player2
}
enum GameModeType {
BALL_8,
BALL_9,
SNOOKER,
FREE_BALL
}
const MATCH_TYPES: Dictionary = {
"8ball": GameModeType.BALL_8,
"9ball": GameModeType.BALL_9,
"snooker": GameModeType.SNOOKER,
"freeball": GameModeType.FREE_BALL
}
var GameMode: Dictionary = {
GameModeType.BALL_8: Ball8,
GameModeType.BALL_9: Ball9,
GameModeType.SNOOKER: Snooker,
GameModeType.FREE_BALL: FreeBall
}
var SelectedGameMode: GameModeType = GameModeType.FREE_BALL
func _init() -> void:
Globals.game_data = self
func get_mode_pretty() -> String:
match game_mode:
"8ball":
return "8-Ball"
"9ball":
return "9-Ball"
"snooker":
return "Snooker"
"freeball":
return "Free Ball"
_:
return ""
@rpc("authority", "reliable")
func set_game_address(address: String) -> void:
game_address = address
@rpc("authority", "reliable")
func set_game_port(port: String) -> void:
game_port = int(port)
func set_game_mode(mode: String) -> void:
SelectedGameMode = MATCH_TYPES[mode]
func set_player_id(is_player_1: bool) -> void:
player_id = "Player 1" if is_player_1 else "Player 2"