## Performs the actual Saving[br][br]
##
## Below is a basic definition of various components and resources for reference:[br]
## * SaveLevelDataComponent - The root save component that performs saving and loading of the actual data from disk
## * SaveDataComponent - Attached to a node that has properties that need to be saved
## * Node Type Resources - Each type of node that requires saving, such as a TileMapLayer, needs a resource created
extends Node


signal game_saved
signal game_loaded


func _unhandled_input(event: InputEvent) -> void:
	if event.is_action_pressed("quick_save"):
		_save_game()
	if event.is_action_pressed("quick_load"):
		_load_game()


func _save_game() -> void:
	var save_level_data_component: SaveLevelDataComponent = get_tree().get_first_node_in_group("save_level_data_component")

	if save_level_data_component == null:
		push_error("Could not find SaveLevelDataComponent node in level")
		return

	save_level_data_component.save_game()
	game_saved.emit()

func _load_game() -> void:
	EntityManager.reset_world.emit()

	var save_level_data_component: SaveLevelDataComponent = get_tree().get_first_node_in_group("save_level_data_component")

	if save_level_data_component == null:
		push_error("Could not find SaveLevelDataComponent node in level")
		return

	save_level_data_component.load_game()
	game_loaded.emit()