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:
@@ -32,6 +32,7 @@ var historyStack
|
|||||||
static var GAMEMODE_MAP_WAVE = [Wave.WAVE_NORMAL, Wave.WAVE_BOSSRUSH, Wave.WAVE_MOWING, Wave.WAVE_TESTBOSS]
|
static var GAMEMODE_MAP_WAVE = [Wave.WAVE_NORMAL, Wave.WAVE_BOSSRUSH, Wave.WAVE_MOWING, Wave.WAVE_TESTBOSS]
|
||||||
static var START_CHARACTERS = ["MuyangDog", "Lynx", "HCN"]
|
static var START_CHARACTERS = ["MuyangDog", "Lynx", "HCN"]
|
||||||
static var buildingShader: bool = true
|
static var buildingShader: bool = true
|
||||||
|
static var tutorialWatched: bool = false
|
||||||
static var selectingFeed: bool = true
|
static var selectingFeed: bool = true
|
||||||
static var selectedCharacter: String = MathTool.randomChoiceFrom(START_CHARACTERS)
|
static var selectedCharacter: String = MathTool.randomChoiceFrom(START_CHARACTERS)
|
||||||
|
|
||||||
@@ -100,6 +101,7 @@ func _ready():
|
|||||||
func(on: bool):
|
func(on: bool):
|
||||||
useTutorialBtn.text = "观看" if on else "跳过"
|
useTutorialBtn.text = "观看" if on else "跳过"
|
||||||
)
|
)
|
||||||
|
useTutorialBtn.button_pressed = tutorialWatched
|
||||||
multiplayer.connection_failed.connect(
|
multiplayer.connection_failed.connect(
|
||||||
func():
|
func():
|
||||||
setState(MultiplayerState.ConnectionState.DISCONNECTED)
|
setState(MultiplayerState.ConnectionState.DISCONNECTED)
|
||||||
|
|||||||
@@ -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
|
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 helpText: String
|
||||||
static var difficultyRange: Vector2 = Vector2(-20, 50) # 难度倍数范围,包括最小值和最大值,负数则降低难度
|
static var difficultyRange: Vector2 = Vector2(-20, 50) # 难度倍数范围,包括最小值和最大值,负数则降低难度
|
||||||
static var difficulty: float = 1 # 难度倍数,可以写小数
|
static var difficulty: float = 1 # 难度倍数,可以写小数
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
class_name JsonTool
|
class_name JsonTool
|
||||||
|
|
||||||
static func parseJson(filePath: String):
|
static func parseFromFile(filePath: String):
|
||||||
var file = FileAccess.open(filePath, FileAccess.READ)
|
var file = FileAccess.open(filePath, FileAccess.READ)
|
||||||
var json = file.get_as_text()
|
if file is FileAccess:
|
||||||
file.close()
|
var json = file.get_as_text()
|
||||||
|
file.close()
|
||||||
|
return parseFromText(json)
|
||||||
|
static func parseFromText(text: String):
|
||||||
var jsonObj = JSON.new()
|
var jsonObj = JSON.new()
|
||||||
jsonObj.parse(json)
|
jsonObj.parse(text)
|
||||||
return jsonObj.data
|
return jsonObj.data
|
||||||
|
static func stringify(data: Variant):
|
||||||
|
return JSON.stringify(data, " ")
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
class_name GameBusManager
|
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):
|
static func restart(tree: SceneTree):
|
||||||
for bullet in tree.get_nodes_in_group("bullets"):
|
for bullet in tree.get_nodes_in_group("bullets"):
|
||||||
bullet.queue_free()
|
bullet.queue_free()
|
||||||
@@ -14,6 +21,7 @@ static func restart(tree: SceneTree):
|
|||||||
OutGameStorage.saveInventory()
|
OutGameStorage.saveInventory()
|
||||||
CameraManager.shakeStop()
|
CameraManager.shakeStop()
|
||||||
WorldManager.timeRestart()
|
WorldManager.timeRestart()
|
||||||
|
SaveEngine.save()
|
||||||
StarterPanel.selectingFeed = true
|
StarterPanel.selectingFeed = true
|
||||||
|
|
||||||
UIState.setPanel("Starter")
|
UIState.setPanel("Starter")
|
||||||
|
|||||||
Reference in New Issue
Block a user