53 lines
1.5 KiB
GDScript
53 lines
1.5 KiB
GDScript
## 全局游戏状态(Autoload 单例)。
|
||
## 负责场景间参数传递与会话状态管理,不持有游戏内数据。
|
||
extends Node
|
||
|
||
## 进入游戏的方式。
|
||
enum GameMode { NEW_GAME, LOAD_GAME }
|
||
|
||
## 当前进入游戏的方式。
|
||
var mode: GameMode = GameMode.NEW_GAME
|
||
## 当前存档组 ID(两级存档第一级,SaveSystem 分配)。
|
||
var profile_id: int = 0
|
||
## 要加载的槽位文件名(仅 LOAD_GAME 时有效,如 "auto"/"slot_1754734800")。
|
||
var save_slot: String = ""
|
||
|
||
# 游戏内时间(12 月 × 30 天 = 360 天/年),实际推进由 TimeSystem 负责
|
||
var year: int = 1 # 年
|
||
var month: int = 1 # 月(1-12)
|
||
|
||
func _ready() -> void:
|
||
SaveSystem.register_saver(_to_save_dict)
|
||
|
||
## 提供存档数据:key 为 "game_time",值是游戏时间字段
|
||
func _to_save_dict() -> Dictionary:
|
||
return {
|
||
"game_time": {
|
||
"year": year,
|
||
"month": month,
|
||
},
|
||
}
|
||
|
||
## 读档恢复(MainGame 在 load 后调用 GameState.load_from_dict(data))
|
||
func load_from_dict(d: Dictionary) -> void:
|
||
var t: Dictionary = d.get("game_time", {})
|
||
year = int(t.get("year", 1))
|
||
month = int(t.get("month", 1))
|
||
|
||
## 请求开始新游戏。
|
||
## @param pid: 新存档组 ID(主菜单创建)
|
||
func request_new_game(pid: int) -> void:
|
||
mode = GameMode.NEW_GAME
|
||
profile_id = pid
|
||
save_slot = ""
|
||
year = 1
|
||
month = 1
|
||
|
||
## 请求加载指定存档。
|
||
## @param pid: 存档组 ID
|
||
## @param slot_name: 槽位文件名(不含 .json)
|
||
func request_load_game(pid: int, slot_name: String) -> void:
|
||
mode = GameMode.LOAD_GAME
|
||
profile_id = pid
|
||
save_slot = slot_name
|