diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index 39c6169..121df93 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -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 START_CHARACTERS = ["MuyangDog", "Lynx", "HCN"] static var buildingShader: bool = true +static var tutorialWatched: bool = false static var selectingFeed: bool = true static var selectedCharacter: String = MathTool.randomChoiceFrom(START_CHARACTERS) @@ -100,6 +101,7 @@ func _ready(): func(on: bool): useTutorialBtn.text = "观看" if on else "跳过" ) + useTutorialBtn.button_pressed = tutorialWatched multiplayer.connection_failed.connect( func(): setState(MultiplayerState.ConnectionState.DISCONNECTED) diff --git a/scripts/Tools/Engines/SaveEngine.gd b/scripts/Tools/Engines/SaveEngine.gd new file mode 100644 index 0000000..69cd064 --- /dev/null +++ b/scripts/Tools/Engines/SaveEngine.gd @@ -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() diff --git a/scripts/Tools/Engines/SaveEngine.gd.uid b/scripts/Tools/Engines/SaveEngine.gd.uid new file mode 100644 index 0000000..be8731e --- /dev/null +++ b/scripts/Tools/Engines/SaveEngine.gd.uid @@ -0,0 +1 @@ +uid://dae5c5gtbf3uo diff --git a/scripts/Tools/GameRule.gd b/scripts/Tools/GameRule.gd index f1d9117..d7dc778 100644 --- a/scripts/Tools/GameRule.gd +++ b/scripts/Tools/GameRule.gd @@ -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 # 难度倍数,可以写小数 diff --git a/scripts/Tools/JsonTool.gd b/scripts/Tools/JsonTool.gd index e5818c0..0558d49 100644 --- a/scripts/Tools/JsonTool.gd +++ b/scripts/Tools/JsonTool.gd @@ -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, " ") diff --git a/scripts/Tools/Managers/GameBusManager.gd b/scripts/Tools/Managers/GameBusManager.gd index abec732..dba5b78 100644 --- a/scripts/Tools/Managers/GameBusManager.gd +++ b/scripts/Tools/Managers/GameBusManager.gd @@ -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")