From 6432dca31a2e0977a20bbfef0a57b1e0b5ff6b3d Mon Sep 17 00:00:00 2001 From: JonShard Date: Thu, 20 Aug 2026 11:18:38 +0200 Subject: [PATCH] Fix queue in multiplayer --- Scenes/day_controller.gd | 22 +++++++++++++++------ Scenes/queue_controller.gd | 30 ++++++++++++++++++----------- Stations/table.gd | 6 ++---- addons/sweet-logger/sweet_logger.gd | 4 ++-- documentation/Notes.md | 4 ++++ global/GameManager.gd | 4 ++-- global/Signals.gd | 17 ++++++---------- 7 files changed, 51 insertions(+), 36 deletions(-) diff --git a/Scenes/day_controller.gd b/Scenes/day_controller.gd index 5996905..75be1d5 100644 --- a/Scenes/day_controller.gd +++ b/Scenes/day_controller.gd @@ -11,16 +11,21 @@ var customers_served: int = 0 func _ready() -> void: GameManager.set_game_state(GameManager.GameState.BUILDING) Signals.game_state_changed.connect(_on_game_state_changed) - + Signals.table_satisfied.connect(_on_table_statisfied) func _on_game_state_changed(new_state: GameManager.GameState) -> void: if new_state == GameManager.GameState.RUNNING: start_next_day() +func _on_table_statisfied(_table: Table) -> void: + customers_served += 1 + SweetLogger.info("Spawned: {0} served: {1}, per_day: {2} time_remaining: {3}, progress: {4}", [customers_spawned, customers_served, GameManager.customers_per_day, snappedf(day_time_remaining, 0.1), snappedf(get_day_progression(), 0.1)]) + + # Returns 0-1 progress of the day time func get_day_progression() -> float: - return 1 - (day_time_remaining / GameManager.day_length_seconds) + return clampf(1 - (day_time_remaining / GameManager.day_length_seconds), 0.0, 1.0) func _reset_values() -> void: @@ -39,18 +44,23 @@ func start_next_day() -> void: func finish_current_day() -> void: SweetLogger.info("Finishing current day") _reset_values() + GameManager.set_game_state(GameManager.GameState.BUILDING) func _process(delta: float) -> void: + if not NetworkManager.owns_world(): + return if GameManager.game_state != GameManager.GameState.RUNNING: return - - day_time_remaining -= delta + + if day_time_remaining > 0: + day_time_remaining -= delta + day_time_remaining = max(0, day_time_remaining) + var customers_at_this_time = GameManager.customers_per_day * get_day_progression() - #print("DayController: customers_at_this_time: ", customers_at_this_time) if customers_spawned < customers_at_this_time: customers_spawned += 1 - SweetLogger.info("Spawning customer") + SweetLogger.info("Requesting to spawn customer") Signals.request_customer_spawn.emit() # If day complete if GameManager.customers_per_day == customers_served and customers_spawned == GameManager.customers_per_day: diff --git a/Scenes/queue_controller.gd b/Scenes/queue_controller.gd index fe7a72e..3953d5c 100644 --- a/Scenes/queue_controller.gd +++ b/Scenes/queue_controller.gd @@ -6,10 +6,10 @@ extends Node3D @export var progress_bar_3d: ProgressBar3D @export var label_3d: Label3D - var _customers: Array[float] = [] # Temp. Array of their patience var _tables: Array[Node3D] = [] + func _ready() -> void: progress_bar_3d.override_fill_color(Color.YELLOW) progress_bar_3d.exponential = true @@ -21,6 +21,7 @@ func _on_game_state_changed(new_state: GameManager.GameState) -> void: if new_state == GameManager.GameState.RUNNING: _rebuild_table_list() + func _on_request_customer_spawn() -> void: spawn_customer() @@ -44,20 +45,27 @@ func _try_to_assign_customers() -> void: break +func _update_clients_display() -> void: + if not _customers.is_empty(): + everyone_set_queue_info.rpc("Customers in queue: " + str(_customers.size()), _customers.front() / queue_patience) + else: + everyone_set_queue_info.rpc("No Customers", 0) + + +@rpc("authority", "call_local", "unreliable") +func everyone_set_queue_info(label_text: String, progress: float) -> void: + label_3d.text = label_text + progress_bar_3d.set_progress(progress) + + func _process(delta: float) -> void: + if not NetworkManager.owns_world(): + return # Process customers patience for i in range(0, _customers.size()): _customers[i] -= delta if _customers[i] <= 0: + SweetLogger.info("Customer patience ran out, game over") GameManager.game_over() - _try_to_assign_customers() - - # Update visuals - if not _customers.is_empty(): - label_3d.text = "Customers in queue: " + str(_customers.size()) - progress_bar_3d.set_progress(_customers.front() / queue_patience) - else: - progress_bar_3d.set_progress(0) - label_3d.text = "No Customers" - + _update_clients_display() \ No newline at end of file diff --git a/Stations/table.gd b/Stations/table.gd index 45b0284..4444e14 100644 --- a/Stations/table.gd +++ b/Stations/table.gd @@ -200,10 +200,6 @@ func _on_object_dropped(_item) -> void: _unsatisfied_orders.append(food_item.id) -# original : burger cube, cube -# unsatisfied : burger cube -# table : - # There is no on_stay signal, we have to track player with bool func _on_player_enter(_body): _players_count += 1 @@ -358,6 +354,8 @@ func _state_end(oldState: TableState): clearAllFood() _set_snap_zones_enabled(true) _set_state(TableState.EMPTY) + SweetLogger.info("Table satisfied, emitting signal") + Signals.table_satisfied.emit(self) TableState.ORDERING, TableState.WAITING_PRIMARY, TableState.WAITING_FRIEND: SweetLogger.info("{0}: order timed out in state {1}, game over", [name, TableState.keys()[oldState]]) diff --git a/addons/sweet-logger/sweet_logger.gd b/addons/sweet-logger/sweet_logger.gd index 9627df1..c4b8fa3 100644 --- a/addons/sweet-logger/sweet_logger.gd +++ b/addons/sweet-logger/sweet_logger.gd @@ -1,6 +1,6 @@ extends Node -const enable_debug = true +const enable_debug = false var frame_count = 0 # Inside SweetLogger or a static helper class: static func get_current_function_name() -> String: @@ -98,7 +98,7 @@ const TIMESTAMP_BG_COLOR = "#1e3a5f" #===================================================================================# ## Column widths for alignment (in characters) const PEER_ID_COLUMN_WIDTH = 6 -const LOG_TYPE_COLUMN_WIDTH = 12 +const LOG_TYPE_COLUMN_WIDTH = 13 ## Default mm:ss:ms; with SHOW_TIMESTAMP_HOURS, hh:mm:ss:ms const TIMESTAMP_COLUMN_WIDTH_MMSSMS = 9 const TIMESTAMP_COLUMN_WIDTH_HHMMSSMS = 12 diff --git a/documentation/Notes.md b/documentation/Notes.md index 28fa618..2d3cfde 100644 --- a/documentation/Notes.md +++ b/documentation/Notes.md @@ -19,6 +19,10 @@ - Freshness - Fullbody tracking (Height calibration) +### Bugs +- Plate not locked on clinets by table +- Rare times, plate not cleared / has buger on it after table eaten. New customer didn't accept it, so must have been empty, but server and client visuals had burger on plate. +- Table does not accept clinet that was already in player detect zone ### Station inheritence suggestion Station diff --git a/global/GameManager.gd b/global/GameManager.gd index 3d1f178..1ee9a10 100644 --- a/global/GameManager.gd +++ b/global/GameManager.gd @@ -21,7 +21,7 @@ func server_set_money(value: int) -> void: set_money(value) func client_sync_money(value: int) -> void: money = value -var day_number: int = 1: +var day_number: int = 0: get: return day_number @@ -110,7 +110,7 @@ func client_sync_day_length_seconds(value: float) -> void: day_length_seconds = value -var customers_per_day: float = 5.0: +var customers_per_day: float = 3.0: get: return customers_per_day diff --git a/global/Signals.gd b/global/Signals.gd index fd15106..dcedfa6 100644 --- a/global/Signals.gd +++ b/global/Signals.gd @@ -1,12 +1,7 @@ extends Node - -@warning_ignore("unused_signal") -signal game_over -@warning_ignore("unused_signal") -signal restart_game -@warning_ignore("unused_signal") -signal game_state_changed(new_state: GameManager.GameState) -@warning_ignore("unused_signal") -signal station_bought(instance: Node3D) -@warning_ignore("unused_signal") -signal request_customer_spawn() +@warning_ignore("unused_signal") signal game_over +@warning_ignore("unused_signal") signal restart_game +@warning_ignore("unused_signal") signal game_state_changed(new_state: GameManager.GameState) +@warning_ignore("unused_signal") signal station_bought(instance: Node3D) +@warning_ignore("unused_signal") signal request_customer_spawn() +@warning_ignore("unused_signal") signal table_satisfied(table: Table)