From 19f81ceeecc5451763d9170469368d2743dba7cb Mon Sep 17 00:00:00 2001 From: chen Date: Mon, 3 Aug 2026 22:24:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20TimeSystem=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=9C=88/=E5=B9=B4=E4=BF=A1=E5=8F=B7=E4=B8=8E=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E8=AE=BE=E7=BD=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 month_passed/year_passed 信号,供俸禄与年度结算 - 新增 speed_changed/pause_changed 信号及 set_paused - 新增 set_date 接口,供读档恢复时间 --- src/Core/TimeSystem.gd | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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