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:
@@ -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()
|
||||
@@ -0,0 +1 @@
|
||||
uid://dae5c5gtbf3uo
|
||||
@@ -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 # 难度倍数,可以写小数
|
||||
|
||||
@@ -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, " ")
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user