extends Node class_name GameManager @export var dragon_template: PackedScene @export var dragon_ingame: PackedScene @export var dragon_spots: Array[Node2D] @export var hat_outfits: DragonOutfit @export var shirt_outfits: DragonOutfit @export var shoes_outfits: DragonOutfit var _instantiator: DragonInstantiator var _save_load: SaveLoad var _library: DragonLibrary func _ready(): _library = DragonLibrary.new(hat_outfits, shirt_outfits, shoes_outfits) _instantiator = DragonInstantiator.new(dragon_template, get_viewport(), get_window()) _save_load = SaveLoad.new() _load_game() await get_tree().process_frame move_window_to_bottom_right() func move_window_to_bottom_right(): var display_index: int = DisplayServer.window_get_current_screen() var work_area_position: Vector2i = DisplayServer.screen_get_usable_rect(display_index).position var work_area_size: Vector2i = DisplayServer.screen_get_usable_rect(display_index).size var window_size: Vector2i = Vector2i(work_area_size.y / 4 * 1.77777, work_area_size.y / 4) var new_position: Vector2i = work_area_position + Vector2i(work_area_size.x - window_size.x, work_area_size.y - window_size.y) DisplayServer.window_set_size(window_size) DisplayServer.window_set_position(new_position) func add_dragon(hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String): # TODO: Check for free positon _instantiate_dragon_ingame(dragon_spots[0].position, hat, shirt, shoes, dragon_name) _library.add_dragon(dragon_name, hat, shirt, shoes) func _load_game(): _save_load.load() _library.add_dragons(_save_load.get_dragons()) print(_save_load.contents_to_save) func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String): var dragon: DragonEntity = dragon_ingame.instantiate() dragon.dress(hat, shirt, shoes) dragon.set_dragon_name(dragon_name) add_child(dragon) dragon.position = position dragon.on_pick.connect(_pick_dragon) func _pick_dragon(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String): var dragon: Dragon = _instantiator.instantiate(position, hat, shirt, shoes, dragon_name) dragon.place_back.connect(_dragon_place_back) add_child(dragon) func _dragon_place_back(dragon: Dragon): print(dragon) func _on_close_pressed() -> void: _save_load.clear_dragons() for d in _library.dragons: _save_load.add_dragon(d['name'], d['hat'], d['shirt'], d['shoes']) _save_load.save() await get_tree().process_frame await get_tree().process_frame await get_tree().process_frame await get_tree().process_frame await get_tree().process_frame get_tree().quit()