save management
This commit is contained in:
@@ -22,8 +22,10 @@ config/icon="res://icon.svg"
|
|||||||
|
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
Windowman="*res://scripts/autoloads/windowman.gd"
|
WindowManager="*res://scripts/autoloads/windowman.gd"
|
||||||
DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd"
|
DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd"
|
||||||
|
EventManager="*res://scripts/autoloads/event_manager.gd"
|
||||||
|
Save="*res://scripts/autoloads/save.gd"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
|||||||
1
scripts/autoloads/event_manager.gd
Normal file
1
scripts/autoloads/event_manager.gd
Normal file
@@ -0,0 +1 @@
|
|||||||
|
extends Node
|
||||||
1
scripts/autoloads/event_manager.gd.uid
Normal file
1
scripts/autoloads/event_manager.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://b08q3lqbuoolb
|
||||||
50
scripts/autoloads/save.gd
Normal file
50
scripts/autoloads/save.gd
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
class_name SaveManager
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
var file: ConfigFile = ConfigFile.new()
|
||||||
|
var save_path: String = "user://save.binary"
|
||||||
|
|
||||||
|
func get_section_name(res: Resource) -> String:
|
||||||
|
return res.resource_name if res.resource_name != "" else res.get_class()
|
||||||
|
|
||||||
|
func save(res: Resource) -> bool:
|
||||||
|
if not is_instance_valid(res):
|
||||||
|
push_error("cannot save: invalid resource")
|
||||||
|
return false
|
||||||
|
|
||||||
|
var section_name: String = get_section_name(res)
|
||||||
|
|
||||||
|
if FileAccess.file_exists(save_path) and file.load(save_path) != OK:
|
||||||
|
printerr("Save file corrupted!")
|
||||||
|
return false
|
||||||
|
|
||||||
|
file.set_value("meta", "savedate", Time.get_datetime_string_from_system())
|
||||||
|
|
||||||
|
for property in res.get_property_list():
|
||||||
|
if property.usage & PROPERTY_USAGE_STORAGE:
|
||||||
|
var v_name: String = property.name
|
||||||
|
file.set_value(section_name, v_name, res.get(v_name))
|
||||||
|
|
||||||
|
return file.save(save_path) == OK
|
||||||
|
|
||||||
|
func load(res: Resource) -> bool:
|
||||||
|
if not FileAccess.file_exists(save_path):
|
||||||
|
return true
|
||||||
|
if file.load(save_path) != OK:
|
||||||
|
printerr("Save file corrupted!")
|
||||||
|
return false
|
||||||
|
|
||||||
|
var section_name: String = get_section_name(res)
|
||||||
|
var props := []
|
||||||
|
for p in res.get_property_list():
|
||||||
|
if p.usage & PROPERTY_USAGE_STORAGE:
|
||||||
|
props.append(p.name)
|
||||||
|
|
||||||
|
for key in file.get_section_keys(section_name):
|
||||||
|
if key in props:
|
||||||
|
res.set(key, file.get_value(section_name, key))
|
||||||
|
return true
|
||||||
|
|
||||||
|
func delete() -> void:
|
||||||
|
file.clear()
|
||||||
|
file.save(save_path)
|
||||||
1
scripts/autoloads/save.gd.uid
Normal file
1
scripts/autoloads/save.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://dfgqnmfb710g8
|
||||||
@@ -1,10 +1,15 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
@onready var fullscreen: bool = ProjectSettings.get_setting("display/window/size/mode") == Window.MODE_EXCLUSIVE_FULLSCREEN | Window.MODE_FULLSCREEN
|
var config: Config = Config.new()
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
Save.load(config)
|
||||||
|
toggle_fullscreen()
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
if Input.is_action_just_pressed("fullscreen"):
|
if Input.is_action_just_pressed("fullscreen"):
|
||||||
fullscreen = !fullscreen
|
config.fullscreen = !config.fullscreen
|
||||||
|
Save.save(config)
|
||||||
toggle_fullscreen()
|
toggle_fullscreen()
|
||||||
|
|
||||||
func _notification(what: int) -> void:
|
func _notification(what: int) -> void:
|
||||||
@@ -18,7 +23,7 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||||||
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
|
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
|
||||||
|
|
||||||
func toggle_fullscreen() -> void:
|
func toggle_fullscreen() -> void:
|
||||||
if fullscreen:
|
if config.fullscreen:
|
||||||
if OS.get_name() == "Windows":
|
if OS.get_name() == "Windows":
|
||||||
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN)
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -31,19 +31,18 @@ func _ready() -> void:
|
|||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
velocity = Input.get_vector("move_left","move_right","move_up","move_down").normalized() * delta * SPEED * 3
|
velocity = Input.get_vector("move_left","move_right","move_up","move_down").normalized() * delta * SPEED * 3
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
position.x = clamp(position.x, position_limit_rect.position.x, position_limit_rect.end.x)
|
position = position.clamp(position_limit_rect.position, position_limit_rect.end)
|
||||||
position.y = clamp(position.y, position_limit_rect.position.y, position_limit_rect.end.y)
|
|
||||||
|
|
||||||
|
|
||||||
animated_sprite.flip_h = velocity.x < 0
|
|
||||||
if velocity.length() != 0:
|
if velocity.length() != 0:
|
||||||
animated_sprite.play()
|
animated_sprite.play()
|
||||||
if velocity.x != 0:
|
animated_sprite.flip_h = false
|
||||||
|
if abs(velocity.x) > abs(velocity.y):
|
||||||
animated_sprite.animation = "side"
|
animated_sprite.animation = "side"
|
||||||
|
animated_sprite.flip_h = velocity.x < 0
|
||||||
elif velocity.y < 0:
|
elif velocity.y < 0:
|
||||||
animated_sprite.animation = "up"
|
animated_sprite.animation = "up"
|
||||||
else:
|
else:
|
||||||
animated_sprite.animation = "down"
|
animated_sprite.animation = "down"
|
||||||
else:
|
else:
|
||||||
animated_sprite.stop()
|
animated_sprite.stop()
|
||||||
|
|
||||||
|
|||||||
4
scripts/resources/config.gd
Normal file
4
scripts/resources/config.gd
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
class_name Config
|
||||||
|
extends Resource
|
||||||
|
|
||||||
|
@export var fullscreen: bool = ProjectSettings.get_setting("display/window/size/mode") == Window.MODE_EXCLUSIVE_FULLSCREEN | Window.MODE_FULLSCREEN
|
||||||
1
scripts/resources/config.gd.uid
Normal file
1
scripts/resources/config.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://b0xr7lumdnvci
|
||||||
Reference in New Issue
Block a user