From 0320d98a73d8c2defe6f79ea89bfaae885efa6c1 Mon Sep 17 00:00:00 2001 From: chen Date: Mon, 3 Aug 2026 22:20:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=B5=81=E5=8A=A8=E5=AE=8C=E6=95=B4=E9=80=BB=E8=BE=91=E5=B9=B6?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=20HUD=20=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TimeSystem 支持月/年进位,仅游戏场景推进 - HUD 时间标签订阅 day_passed 实时更新 - 新游戏时重置年月日 --- src/Core/TimeSystem.gd | 29 +++++++++++++++++++++++------ src/UI/HUD/TopBarHUD.tscn | 2 ++ src/UI/HUD/top_bar_hud.gd | 5 +++++ src/UI/Panels/MainMenu/MainMenu.gd | 2 +- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/Core/TimeSystem.gd b/src/Core/TimeSystem.gd index fc0f886..8df5254 100644 --- a/src/Core/TimeSystem.gd +++ b/src/Core/TimeSystem.gd @@ -3,25 +3,36 @@ extends Node signal day_passed(year, month, day) const SPEEDS := [1.0, 5.0, 20.0] -var speed_index := 0 +const DAYS_PER_MONTH := 30 +const MONTHS_PER_YEAR := 12 -const DAY_LENGTH := 5.0 +var speed_index := 0 +const DAY_LENGTH := 0.5 var speed := 1.0 var paused := false var _elapsed := 0.0 func _process(delta: float) -> void: - if paused: + if paused or not _is_in_game(): return _elapsed += delta * speed if _elapsed >= DAY_LENGTH: _elapsed -= DAY_LENGTH _advance() +func _is_in_game() -> bool: + var scene := get_tree().current_scene + return scene != null and scene.name == "MainGame" + func _advance() -> void: - # GameState.year, GameState.month, GameState.day 推进 - GameState.day = GameState.day + 1; - day_passed.emit() + GameState.day += 1 + if GameState.day > DAYS_PER_MONTH: + GameState.day = 1 + GameState.month += 1 + if GameState.month > MONTHS_PER_YEAR: + GameState.month = 1 + GameState.year += 1 + day_passed.emit(GameState.year, GameState.month, GameState.day) func cycle_speed() -> float: speed_index = (speed_index + 1) % SPEEDS.size() @@ -38,3 +49,9 @@ func toggle_pause() -> bool: func get_speed_label() -> String: return "x%d" % int(speed) + +func get_current_date() -> Array: + return [GameState.year, GameState.month, GameState.day] + +func get_date_text() -> String: + return "%d年 %d月 %d日" % [GameState.year, GameState.month, GameState.day] diff --git a/src/UI/HUD/TopBarHUD.tscn b/src/UI/HUD/TopBarHUD.tscn index 770f57a..bd381d4 100644 --- a/src/UI/HUD/TopBarHUD.tscn +++ b/src/UI/HUD/TopBarHUD.tscn @@ -5,6 +5,7 @@ [sub_resource type="LabelSettings" id="LabelSettings_bn2o5"] font = ExtResource("1_pa2rn") +font_size = 32 [node name="TopBarHud" type="Control" unique_id=1115394694] layout_mode = 3 @@ -46,6 +47,7 @@ label_settings = SubResource("LabelSettings_bn2o5") layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 8 +size_flags_stretch_ratio = 2.0 label_settings = SubResource("LabelSettings_bn2o5") [node name="Label_Reputation" type="Label" parent="HBoxContainer" unique_id=985110673] diff --git a/src/UI/HUD/top_bar_hud.gd b/src/UI/HUD/top_bar_hud.gd index 9342999..257e31a 100644 --- a/src/UI/HUD/top_bar_hud.gd +++ b/src/UI/HUD/top_bar_hud.gd @@ -10,7 +10,12 @@ func _ready() -> void: for i in SPEED_BUTTONS.size(): var btn: Button = $HBoxContainer/SpeedGroup.get_node(SPEED_BUTTONS[i]) btn.button_up.connect(_on_speed_button_up.bind(i)) + TimeSystem.day_passed.connect(_on_day_passed) _update_speed_ui() + $HBoxContainer/Value_Time.text = TimeSystem.get_date_text() + +func _on_day_passed(_year: int, _month: int, _day: int) -> void: + $HBoxContainer/Value_Time.text = TimeSystem.get_date_text() func _on_button_return_button_up() -> void: sign_return_mainmenu.emit() diff --git a/src/UI/Panels/MainMenu/MainMenu.gd b/src/UI/Panels/MainMenu/MainMenu.gd index 187cf5c..5f37c94 100644 --- a/src/UI/Panels/MainMenu/MainMenu.gd +++ b/src/UI/Panels/MainMenu/MainMenu.gd @@ -1,8 +1,8 @@ extends Control func MainMenu_NewGame_ButtonUp() -> void: + GameState.request_new_game() get_tree().change_scene_to_file("res://src/Core/MainGame.tscn") - pass # Replace with function body. func MainMenu_LoadGame_ButtonUp() -> void: