Fix queue in multiplayer
This commit is contained in:
@@ -11,16 +11,21 @@ var customers_served: int = 0
|
|||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
GameManager.set_game_state(GameManager.GameState.BUILDING)
|
GameManager.set_game_state(GameManager.GameState.BUILDING)
|
||||||
Signals.game_state_changed.connect(_on_game_state_changed)
|
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:
|
func _on_game_state_changed(new_state: GameManager.GameState) -> void:
|
||||||
if new_state == GameManager.GameState.RUNNING:
|
if new_state == GameManager.GameState.RUNNING:
|
||||||
start_next_day()
|
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
|
# Returns 0-1 progress of the day time
|
||||||
func get_day_progression() -> float:
|
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:
|
func _reset_values() -> void:
|
||||||
@@ -39,18 +44,23 @@ func start_next_day() -> void:
|
|||||||
func finish_current_day() -> void:
|
func finish_current_day() -> void:
|
||||||
SweetLogger.info("Finishing current day")
|
SweetLogger.info("Finishing current day")
|
||||||
_reset_values()
|
_reset_values()
|
||||||
|
GameManager.set_game_state(GameManager.GameState.BUILDING)
|
||||||
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
|
if not NetworkManager.owns_world():
|
||||||
|
return
|
||||||
if GameManager.game_state != GameManager.GameState.RUNNING:
|
if GameManager.game_state != GameManager.GameState.RUNNING:
|
||||||
return
|
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()
|
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:
|
if customers_spawned < customers_at_this_time:
|
||||||
customers_spawned += 1
|
customers_spawned += 1
|
||||||
SweetLogger.info("Spawning customer")
|
SweetLogger.info("Requesting to spawn customer")
|
||||||
Signals.request_customer_spawn.emit()
|
Signals.request_customer_spawn.emit()
|
||||||
# If day complete
|
# If day complete
|
||||||
if GameManager.customers_per_day == customers_served and customers_spawned == GameManager.customers_per_day:
|
if GameManager.customers_per_day == customers_served and customers_spawned == GameManager.customers_per_day:
|
||||||
|
|||||||
+19
-11
@@ -6,10 +6,10 @@ extends Node3D
|
|||||||
@export var progress_bar_3d: ProgressBar3D
|
@export var progress_bar_3d: ProgressBar3D
|
||||||
@export var label_3d: Label3D
|
@export var label_3d: Label3D
|
||||||
|
|
||||||
|
|
||||||
var _customers: Array[float] = [] # Temp. Array of their patience
|
var _customers: Array[float] = [] # Temp. Array of their patience
|
||||||
var _tables: Array[Node3D] = []
|
var _tables: Array[Node3D] = []
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
progress_bar_3d.override_fill_color(Color.YELLOW)
|
progress_bar_3d.override_fill_color(Color.YELLOW)
|
||||||
progress_bar_3d.exponential = true
|
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:
|
if new_state == GameManager.GameState.RUNNING:
|
||||||
_rebuild_table_list()
|
_rebuild_table_list()
|
||||||
|
|
||||||
|
|
||||||
func _on_request_customer_spawn() -> void:
|
func _on_request_customer_spawn() -> void:
|
||||||
spawn_customer()
|
spawn_customer()
|
||||||
|
|
||||||
@@ -44,20 +45,27 @@ func _try_to_assign_customers() -> void:
|
|||||||
break
|
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:
|
func _process(delta: float) -> void:
|
||||||
|
if not NetworkManager.owns_world():
|
||||||
|
return
|
||||||
# Process customers patience
|
# Process customers patience
|
||||||
for i in range(0, _customers.size()):
|
for i in range(0, _customers.size()):
|
||||||
_customers[i] -= delta
|
_customers[i] -= delta
|
||||||
if _customers[i] <= 0:
|
if _customers[i] <= 0:
|
||||||
|
SweetLogger.info("Customer patience ran out, game over")
|
||||||
GameManager.game_over()
|
GameManager.game_over()
|
||||||
|
|
||||||
_try_to_assign_customers()
|
_try_to_assign_customers()
|
||||||
|
_update_clients_display()
|
||||||
# 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"
|
|
||||||
|
|
||||||
+2
-4
@@ -200,10 +200,6 @@ func _on_object_dropped(_item) -> void:
|
|||||||
_unsatisfied_orders.append(food_item.id)
|
_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
|
# There is no on_stay signal, we have to track player with bool
|
||||||
func _on_player_enter(_body):
|
func _on_player_enter(_body):
|
||||||
_players_count += 1
|
_players_count += 1
|
||||||
@@ -358,6 +354,8 @@ func _state_end(oldState: TableState):
|
|||||||
clearAllFood()
|
clearAllFood()
|
||||||
_set_snap_zones_enabled(true)
|
_set_snap_zones_enabled(true)
|
||||||
_set_state(TableState.EMPTY)
|
_set_state(TableState.EMPTY)
|
||||||
|
SweetLogger.info("Table satisfied, emitting signal")
|
||||||
|
Signals.table_satisfied.emit(self)
|
||||||
|
|
||||||
TableState.ORDERING, TableState.WAITING_PRIMARY, TableState.WAITING_FRIEND:
|
TableState.ORDERING, TableState.WAITING_PRIMARY, TableState.WAITING_FRIEND:
|
||||||
SweetLogger.info("{0}: order timed out in state {1}, game over", [name, TableState.keys()[oldState]])
|
SweetLogger.info("{0}: order timed out in state {1}, game over", [name, TableState.keys()[oldState]])
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
const enable_debug = true
|
const enable_debug = false
|
||||||
var frame_count = 0
|
var frame_count = 0
|
||||||
# Inside SweetLogger or a static helper class:
|
# Inside SweetLogger or a static helper class:
|
||||||
static func get_current_function_name() -> String:
|
static func get_current_function_name() -> String:
|
||||||
@@ -98,7 +98,7 @@ const TIMESTAMP_BG_COLOR = "#1e3a5f"
|
|||||||
#===================================================================================#
|
#===================================================================================#
|
||||||
## Column widths for alignment (in characters)
|
## Column widths for alignment (in characters)
|
||||||
const PEER_ID_COLUMN_WIDTH = 6
|
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
|
## Default mm:ss:ms; with SHOW_TIMESTAMP_HOURS, hh:mm:ss:ms
|
||||||
const TIMESTAMP_COLUMN_WIDTH_MMSSMS = 9
|
const TIMESTAMP_COLUMN_WIDTH_MMSSMS = 9
|
||||||
const TIMESTAMP_COLUMN_WIDTH_HHMMSSMS = 12
|
const TIMESTAMP_COLUMN_WIDTH_HHMMSSMS = 12
|
||||||
|
|||||||
@@ -19,6 +19,10 @@
|
|||||||
- Freshness
|
- Freshness
|
||||||
- Fullbody tracking (Height calibration)
|
- 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 inheritence suggestion
|
||||||
Station
|
Station
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ func server_set_money(value: int) -> void: set_money(value)
|
|||||||
func client_sync_money(value: int) -> void: money = value
|
func client_sync_money(value: int) -> void: money = value
|
||||||
|
|
||||||
|
|
||||||
var day_number: int = 1:
|
var day_number: int = 0:
|
||||||
get:
|
get:
|
||||||
return day_number
|
return day_number
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ func client_sync_day_length_seconds(value: float) -> void:
|
|||||||
day_length_seconds = value
|
day_length_seconds = value
|
||||||
|
|
||||||
|
|
||||||
var customers_per_day: float = 5.0:
|
var customers_per_day: float = 3.0:
|
||||||
get:
|
get:
|
||||||
return customers_per_day
|
return customers_per_day
|
||||||
|
|
||||||
|
|||||||
+6
-11
@@ -1,12 +1,7 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
@warning_ignore("unused_signal") signal game_over
|
||||||
@warning_ignore("unused_signal")
|
@warning_ignore("unused_signal") signal restart_game
|
||||||
signal game_over
|
@warning_ignore("unused_signal") signal game_state_changed(new_state: GameManager.GameState)
|
||||||
@warning_ignore("unused_signal")
|
@warning_ignore("unused_signal") signal station_bought(instance: Node3D)
|
||||||
signal restart_game
|
@warning_ignore("unused_signal") signal request_customer_spawn()
|
||||||
@warning_ignore("unused_signal")
|
@warning_ignore("unused_signal") signal table_satisfied(table: Table)
|
||||||
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()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user