70 lines
2.2 KiB
GDScript
70 lines
2.2 KiB
GDScript
class_name DayController
|
|
extends Node
|
|
|
|
# DayController Emits singals to spawn customers.
|
|
|
|
var day_time_remaining: float = 0.0
|
|
var customers_spawned: int = 0
|
|
var customers_served: int = 0
|
|
|
|
|
|
func _ready() -> void:
|
|
if NetworkManager.owns_world():
|
|
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 clampf(1 - (day_time_remaining / GameManager.day_length_seconds), 0.0, 1.0)
|
|
|
|
|
|
func _reset_values() -> void:
|
|
day_time_remaining = GameManager.day_length_seconds
|
|
customers_spawned = 0
|
|
customers_served = 0
|
|
|
|
|
|
func start_next_day() -> void:
|
|
SweetLogger.info("Starting next day")
|
|
_reset_values()
|
|
GameManager.set_customers_per_day(GameManager.customers_per_day + GameManager.customers_count_increase_per_day)
|
|
GameManager.set_day_number(GameManager.day_number + 1)
|
|
|
|
|
|
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
|
|
|
|
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()
|
|
if customers_spawned < customers_at_this_time:
|
|
customers_spawned += 1
|
|
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:
|
|
SweetLogger.info("Day complete")
|
|
finish_current_day()
|