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
This commit is contained in:
2026-08-10 21:22:52 -05:00
parent 26dcfe0d1b
commit e3bdb21cd2
19 changed files with 234 additions and 62 deletions

View File

@@ -10,6 +10,7 @@ const MATCH_ENTRY = preload("res://scenes/screens/lobb
@onready var search_vbox: VBoxContainer = $ui/body/left_body/search_vbox
@onready var match_search_input: LineEdit = $ui/body/left_body/search_vbox/search_hbox/match_search_input
@onready var match_search_bttn: Button = $ui/body/left_body/search_vbox/search_hbox/match_search_bttn
@onready var match_list: VBoxContainer = $ui/body/left_body/search_vbox/scroll_container/match_list
@onready var match_create_vbox: VBoxContainer = $ui/body/right_body
@@ -18,7 +19,7 @@ const MATCH_ENTRY = preload("res://scenes/screens/lobb
@onready var rpc_signals: Node = $rpc_signals
@onready var client: LobbyClient = $client
var active_mode: String = "snooker"
var active_mode: String = "freeball"
var active_match: HBoxContainer = null
@@ -56,8 +57,7 @@ func _on_match_create_bttn_pressed() -> void:
"type": active_mode
}
#MessageBus.emit_request.rpc_id(1, "match_list_add_entry", match_entry)
MessageBus.emit_request.rpc("match_list_add_entry", match_entry)
func _on_mode_bttn_pressed(button: Button) -> void:
active_mode = button.text.remove_chars("-").to_lower()
active_mode = button.name.remove_chars("_").to_lower()