class_name DragonInstantiator var _dragon_template: PackedScene var _positions: Array[Vector2i] = [] func _init(dragon: PackedScene, positions: Array[Node2D]) -> void: _dragon_template = dragon for pos in positions: _positions.push_back((Vector2i)(pos.position)) func instantiate() -> Node: var position: Vector2i = _positions[0] return _instantiate_dragon(position) func _instantiate_dragon(relative_position: Vector2i) -> Node: var dragon: Window = _dragon_template.instantiate() var window_position: Vector2i = DisplayServer.window_get_position() var window_size: Vector2i = DisplayServer.window_get_size() dragon.position = window_position + relative_position - dragon.size / 2 dragon.main_window_rect = Rect2i(window_position, window_size) dragon.show() return dragon