1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

feat(保存系统): 实现游戏存档功能

添加SaveEngine类用于处理游戏存档的序列化、加载和应用
修改GameBusManager在游戏重启时自动保存和加载存档
扩展JsonTool功能以支持文件解析和字符串序列化
更新StarterPanel添加教程观看状态保存
This commit is contained in:
2026-05-09 21:25:27 +08:00
parent d739771c1a
commit b1cb089705
6 changed files with 44 additions and 5 deletions
+23
View File
@@ -0,0 +1,23 @@
class_name SaveEngine
const SAVE_FILE = "user://save.json"
static func serialize():
return {
"out-game": {
"value": OutGameStorage.upgradableFieldsValue.duplicate(),
"level": OutGameStorage.upgradableFieldsLevel.duplicate()
},
"tutorial-watched": StarterPanel.tutorialWatched
}
static func apply(saveData: Dictionary):
OutGameStorage.upgradableFieldsValue = saveData["out-game"]["value"]
OutGameStorage.upgradableFieldsLevel = saveData["out-game"]["level"]
StarterPanel.tutorialWatched = saveData["tutorial-watched"]
static func load():
return JsonTool.parseFromFile(SAVE_FILE)
static func save():
var file = FileAccess.open(SAVE_FILE, FileAccess.ModeFlags.WRITE)
if file is FileAccess:
file.store_string(JsonTool.stringify(serialize()))
file.close()
+1
View File
@@ -0,0 +1 @@
uid://dae5c5gtbf3uo
+1 -1
View File
@@ -1,6 +1,6 @@
class_name GameRule
static var deadReasons: Array = JsonTool.parseJson("res://resources/constants/deadReasons.json")
static var deadReasons: Array = JsonTool.parseFromFile("res://resources/constants/deadReasons.json")
static var helpText: String
static var difficultyRange: Vector2 = Vector2(-20, 50) # 难度倍数范围,包括最小值和最大值,负数则降低难度
static var difficulty: float = 1 # 难度倍数,可以写小数
+9 -4
View File
@@ -1,9 +1,14 @@
class_name JsonTool
static func parseJson(filePath: String):
static func parseFromFile(filePath: String):
var file = FileAccess.open(filePath, FileAccess.READ)
var json = file.get_as_text()
file.close()
if file is FileAccess:
var json = file.get_as_text()
file.close()
return parseFromText(json)
static func parseFromText(text: String):
var jsonObj = JSON.new()
jsonObj.parse(json)
jsonObj.parse(text)
return jsonObj.data
static func stringify(data: Variant):
return JSON.stringify(data, " ")
+8
View File
@@ -1,5 +1,12 @@
class_name GameBusManager
static func _static_init():
init()
static func init():
var save = SaveEngine.load()
if save:
SaveEngine.apply(save)
static func restart(tree: SceneTree):
for bullet in tree.get_nodes_in_group("bullets"):
bullet.queue_free()
@@ -14,6 +21,7 @@ static func restart(tree: SceneTree):
OutGameStorage.saveInventory()
CameraManager.shakeStop()
WorldManager.timeRestart()
SaveEngine.save()
StarterPanel.selectingFeed = true
UIState.setPanel("Starter")