diff --git a/src/Core/TimeSystem.gd b/src/Core/TimeSystem.gd index 8df5254..b9b61e8 100644 --- a/src/Core/TimeSystem.gd +++ b/src/Core/TimeSystem.gd @@ -1,6 +1,10 @@ extends Node signal day_passed(year, month, day) +signal month_passed(year, month) +signal year_passed(year) +signal speed_changed(speed_index) +signal pause_changed(paused) const SPEEDS := [1.0, 5.0, 20.0] const DAYS_PER_MONTH := 30 @@ -25,28 +29,45 @@ func _is_in_game() -> bool: return scene != null and scene.name == "MainGame" func _advance() -> void: + var new_month := false + var new_year := false GameState.day += 1 if GameState.day > DAYS_PER_MONTH: GameState.day = 1 GameState.month += 1 + new_month = true if GameState.month > MONTHS_PER_YEAR: GameState.month = 1 GameState.year += 1 + new_year = true day_passed.emit(GameState.year, GameState.month, GameState.day) + if new_month: + month_passed.emit(GameState.year, GameState.month) + if new_year: + year_passed.emit(GameState.year) func cycle_speed() -> float: speed_index = (speed_index + 1) % SPEEDS.size() speed = SPEEDS[speed_index] + speed_changed.emit(speed_index) return speed func set_speed_index(index: int) -> void: speed_index = clampi(index, 0, SPEEDS.size() - 1) speed = SPEEDS[speed_index] + speed_changed.emit(speed_index) func toggle_pause() -> bool: paused = not paused + pause_changed.emit(paused) return paused +func set_paused(value: bool) -> void: + if paused == value: + return + paused = value + pause_changed.emit(paused) + func get_speed_label() -> String: return "x%d" % int(speed) @@ -55,3 +76,8 @@ func get_current_date() -> Array: func get_date_text() -> String: return "%d年 %d月 %d日" % [GameState.year, GameState.month, GameState.day] + +func set_date(y: int, m: int, d: int) -> void: + GameState.year = y + GameState.month = m + GameState.day = d