extends Window class_name DragonList var _library: DragonLibrary var _dragons: Array[DragonListEntry] @export var dragon_list_entry_template: PackedScene @export var dragon_list_pivot: Node2D @onready var dragger: DraggableWindow = $CanvasLayer/Dragger @export var origin_name_label: Label @export var dragon_name_label: Label var _index_showing: int = 0 var _pivot_start_pos: Vector2 func _ready() -> void: dragger.on_drag.connect(_on_drag) _pivot_start_pos = dragon_list_pivot.position func _on_drag(offset: Vector2i): position += offset func set_library(library: DragonLibrary): _library = library for i in len(_library.dragons): _instantiate_dragon(_library.dragons[i], i) _play_idle_animations() _show_dragon(library.dragons[0]) func _instantiate_dragon(dragon: DragonProperties, offset_step: int): var instance: DragonListEntry = dragon_list_entry_template.instantiate() instance.dress(dragon) dragon_list_pivot.add_child(instance) instance.position.x += offset_step * 110 _dragons.push_back(instance) func _show_dragon(dragon: DragonProperties): origin_name_label.text = dragon.origin dragon_name_label.text = dragon.name func _on_close_pressed() -> void: queue_free() func _on_dragon_previous_pressed() -> void: if _index_showing == 0: return _index_showing -= 1 _move_to_position(-110 * _index_showing) _show_dragon(_library.dragons[_index_showing]) func _on_dragon_next_pressed() -> void: if _index_showing == len(_library.dragons) - 1: return _index_showing += 1 _move_to_position(-110 * _index_showing) _show_dragon(_library.dragons[_index_showing]) func _move_to_position(target_position: int): var tween = create_tween() _play_walk_animations() var new_pos: Vector2 = _pivot_start_pos + Vector2(target_position, 0) _face_direction(new_pos.x < dragon_list_pivot.position.x) tween.tween_property(dragon_list_pivot, "position", new_pos, 1.0).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) tween.tween_callback(_play_idle_animations) func _play_idle_animations(): for dragon in _dragons: dragon.play_animation('idle') func _play_walk_animations(): for dragon in _dragons: dragon.play_animation('walk') func _face_direction(left: bool): for dragon in _dragons: dragon.face_direction(left)