feat: HUD 增加时间流速控制,新增 Settings 持久化

- 顶栏改为暂停/1x/5x/20x 按钮组,当前档位高亮
- TimeSystem 支持暂停与档位切换
- 新增 Settings 单例,存档默认流速并开机应用
- GameState 补充年月日,支持 12x30 历法推进
This commit is contained in:
2026-08-03 22:01:35 +08:00
parent 404480ef00
commit 2a39bc6473
8 changed files with 103 additions and 1 deletions
+8
View File
@@ -5,9 +5,17 @@ enum GameMode { NEW_GAME, LOAD_GAME }
var mode: GameMode = GameMode.NEW_GAME
var save_id: String = ""
# 游戏内时间(12 月 × 30 天 = 360 天/年)
var year: int = 1
var month: int = 1
var day: int = 1
func request_new_game() -> void:
mode = GameMode.NEW_GAME
save_id = ""
year = 1
month = 1
day = 1
func request_load_game(id: String) -> void:
mode = GameMode.LOAD_GAME
+2
View File
@@ -1,6 +1,8 @@
extends Node
func _ready() -> void:
TimeSystem.speed_index = Settings.default_speed_index
TimeSystem.speed = TimeSystem.SPEEDS[TimeSystem.speed_index]
pass
+14
View File
@@ -0,0 +1,14 @@
extends Node
const SAVE_PATH := "user://settings.cfg"
var default_speed_index := 1 # 默认 5x
func load_settings() -> void:
var cfg := ConfigFile.new()
if cfg.load(SAVE_PATH) == OK:
default_speed_index = cfg.get_value("time", "speed_index", 1)
func save_settings() -> void:
var cfg := ConfigFile.new()
cfg.set_value("time", "speed_index", default_speed_index)
cfg.save(SAVE_PATH)
+1
View File
@@ -0,0 +1 @@
uid://exwk46qy4x6t
+22
View File
@@ -2,11 +2,17 @@ extends Node
signal day_passed(year, month, day)
const SPEEDS := [1.0, 5.0, 20.0]
var speed_index := 0
const DAY_LENGTH := 5.0
var speed := 1.0
var paused := false
var _elapsed := 0.0
func _process(delta: float) -> void:
if paused:
return
_elapsed += delta * speed
if _elapsed >= DAY_LENGTH:
_elapsed -= DAY_LENGTH
@@ -16,3 +22,19 @@ func _advance() -> void:
# GameState.year, GameState.month, GameState.day 推进
GameState.day = GameState.day + 1;
day_passed.emit()
func cycle_speed() -> float:
speed_index = (speed_index + 1) % SPEEDS.size()
speed = SPEEDS[speed_index]
return speed
func set_speed_index(index: int) -> void:
speed_index = clampi(index, 0, SPEEDS.size() - 1)
speed = SPEEDS[speed_index]
func toggle_pause() -> bool:
paused = not paused
return paused
func get_speed_label() -> String:
return "x%d" % int(speed)