extends Control @export var template: PackedScene = load("res://scenes/UI/choose_scenes/parts/Template.tscn") func _ready() -> void: for level in Global.database.levels: _apply_scene(level) ## PRIVATE func _apply_scene(level: LevelEntry) -> void: $MarginContainer.add_child(_load_scene(level.name)) var node := _build_path(level.name) _configure_select(level, node) configure_reset(level, node, false) configure_counter(level, node) func _load_scene(p_name: String) -> Node: var template_instance := template.instantiate() template_instance.set_name(p_name) return template_instance func _build_path(p_name: String) -> String: return "MarginContainer/" + p_name func _configure_select(level: LevelEntry, node: String) -> void: var selector := get_node(node + "/MarginContainer/CenterAlign/MainButton") var thumbnail: TextureRect = get_node(node + "/MarginContainer/CenterAlign/MainButton/MarginStich/ThumbnailLevel") thumbnail.texture = load(level.thumb) var handler := Event.level_pressed(level.name) if handler.is_valid(): selector.pressed.connect(handler) func configure_reset(level: LevelEntry, node: String, animate: bool) -> void: var reset: BaseButton = get_node(node + "/MarginContainer/CenterAlign/MainButton/TabAlign/ButtonReset") var animation: AnimationPlayer = get_node(node + "/AnimationPlayer") if int(level.object_finding()) == 0: _configure_reset_disable(animation, reset, animate) else: _configure_reset_enable(animation, reset, level, node) func _configure_reset_disable(animation: AnimationPlayer, reset: BaseButton, animate: bool = false) -> void: animation.play("SlideReset") if not animate: animation.seek(1, false) reset.set_disabled(true) reset.mouse_default_cursor_shape = CURSOR_ARROW for c in reset.pressed.get_connections(): reset.pressed.disconnect(c["callable"]) func _configure_reset_enable(animation: AnimationPlayer, reset: BaseButton, level: LevelEntry, node: String) -> void: animation.play_backwards("SlideReset") reset.set_disabled(false) reset.mouse_default_cursor_shape = CURSOR_POINTING_HAND reset.pressed.connect(Event._on_reset_level.bind(level, node, level.index, self)) func configure_counter(level: LevelEntry, node: String) -> void: var count: Label = get_node(node + "/MarginContainer/CenterAlign/MainButton/TabAlign/ButtonCount/MarginBottom/Label") count.text = level.object_finding() + " / " + level.object_to_find()