Godot SaveLoad
We have a few entries about Godot, now we can learn about how to save/load configuration and data for our games/apps. Besides, I will leave a link to a debug demo in GitHub at the bottom of this entry for those who want to test things.
First, we need to have a scene for loading/saving data. Since we talked about that in previous entries, I will write briefly what you need to have done previously, but I won't go into details:
- A scene: saveLoad.tscn, to work on.
- background, to look cool. (this is optional)
- a nice BGM. (this is optional)
- a character sprite to move, we'll use its position for save/loading tests.
- a nice font, to print the position in screen. (you can omit this if you want to)
Once we have this, image below, we can start with our saveLoad steps.
For making this configuration, we are going to use this documentation: https://docs.godotengine.org/en/3.5/classes/class_configfile.html
Besides, we are basing our code in this video's example:
https://youtu.be/ygGaN1EOQEA?si=9BA3dC4FbtPyKojW
Now, we'll create a new script (saveConfig.gd) to make the save system separately, so we can use it globally and in any project.
For it to be accessed globally as a singleton, you have to go to:
Project > Projects settings
Here you have to go to the autoload label and then click folder icon to load your newly created script (saveConfig.gd).
Then, click on add
to see something like this
After that, it's time to write the code to handle the file where we are going to storage the data to save-load.
```
extends Node2D
var savePath = "res://SaveLoad_test/SaveState.cfg"
var conf = ConfigFile.new()
var loadResult = conf.load(savePath)
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func saveValue(section,key, savedData):
conf.set_value(section,key,savedData)
conf.save(savePath)
func loadValue(section,key, savedData):
savedData = conf.get_value(section,key,savedData)
```
With the config code, we need the game to communicate with it to exchange the data. This is done within the game scene script.
```
extends Node2D
var ghostPos = Vector2(0,0)
func _physics_process(_delta):
if Input.is_action_pressed("ui_start"):
get_tree().change_scene("res://os_test.tscn")
if Input.is_action_pressed("ui_loadButton"):
SaveConfig.loadValue("values","ValueOne", ghostPos)
get_node("KinematicBody2D").set_position(ghostPos)
if Input.is_action_pressed("ui_saveButton"):
ghostPos = get_node("KinematicBody2D").get_global_transform().origin
SaveConfig.saveValue("values","ValueOne", ghostPos)
```
With that, you have a saving system done. Since the position saving uses a global variable, it needs a few fixes, but you get the idea, and this is enough for a testing scene.
Finally, as I said at the beginning of the entry, here's the GitHub with the full project:
https://github.com/Bunkai9448/GodotVitaSystemTest
Besides, if you go to the release page, you can try the current beta on your PS Vita.
We have a few entries about Godot, now we can learn about how to save/load configuration and data for our games/apps. Besides, I will leave a link to a debug demo in GitHub at the bottom of this entry for those who want to test things.
First, we need to have a scene for loading/saving data. Since we talked about that in previous entries, I will write briefly what you need to have done previously, but I won't go into details:
- A scene: saveLoad.tscn, to work on.
- background, to look cool. (this is optional)
- a nice BGM. (this is optional)
- a character sprite to move, we'll use its position for save/loading tests.
- a nice font, to print the position in screen. (you can omit this if you want to)
Once we have this, image below, we can start with our saveLoad steps.
For making this configuration, we are going to use this documentation: https://docs.godotengine.org/en/3.5/classes/class_configfile.html
Besides, we are basing our code in this video's example:
https://youtu.be/ygGaN1EOQEA?si=9BA3dC4FbtPyKojW
Now, we'll create a new script (saveConfig.gd) to make the save system separately, so we can use it globally and in any project.
For it to be accessed globally as a singleton, you have to go to:
Project > Projects settings
Here you have to go to the autoload label and then click folder icon to load your newly created script (saveConfig.gd).
Then, click on add
to see something like this
After that, it's time to write the code to handle the file where we are going to storage the data to save-load.
```
extends Node2D
var savePath = "res://SaveLoad_test/SaveState.cfg"
var conf = ConfigFile.new()
var loadResult = conf.load(savePath)
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func saveValue(section,key, savedData):
conf.set_value(section,key,savedData)
conf.save(savePath)
func loadValue(section,key, savedData):
savedData = conf.get_value(section,key,savedData)
```
With the config code, we need the game to communicate with it to exchange the data. This is done within the game scene script.
```
extends Node2D
var ghostPos = Vector2(0,0)
func _physics_process(_delta):
if Input.is_action_pressed("ui_start"):
get_tree().change_scene("res://os_test.tscn")
if Input.is_action_pressed("ui_loadButton"):
SaveConfig.loadValue("values","ValueOne", ghostPos)
get_node("KinematicBody2D").set_position(ghostPos)
if Input.is_action_pressed("ui_saveButton"):
ghostPos = get_node("KinematicBody2D").get_global_transform().origin
SaveConfig.saveValue("values","ValueOne", ghostPos)
```
With that, you have a saving system done. Since the position saving uses a global variable, it needs a few fixes, but you get the idea, and this is enough for a testing scene.
Finally, as I said at the beginning of the entry, here's the GitHub with the full project:
https://github.com/Bunkai9448/GodotVitaSystemTest
Besides, if you go to the release page, you can try the current beta on your PS Vita.
No comments:
Post a Comment