Fix queue in multiplayer
This commit is contained in:
@@ -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:
|
||||
|
||||
+19
-11
@@ -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()
|
||||
Reference in New Issue
Block a user