2021-05-08 13:44:51 +02:00
|
|
|
extends Control
|
|
|
|
|
|
2026-05-16 19:18:27 +02:00
|
|
|
@export var template: PackedScene = load("res://scenes/UI/choose_scenes/parts/Template.tscn")
|
2021-05-13 23:15:05 +02:00
|
|
|
|
2026-05-16 21:58:11 +02:00
|
|
|
func _ready() -> void:
|
|
|
|
|
for level in Global.database.levels:
|
|
|
|
|
_apply_scene(level)
|
2021-05-13 23:15:05 +02:00
|
|
|
|
|
|
|
|
## PRIVATE
|
2026-05-16 21:58:11 +02:00
|
|
|
func _apply_scene(level: LevelEntry) -> void:
|
|
|
|
|
$MarginContainer.add_child(_load_scene(level.name))
|
|
|
|
|
var node := _build_path(level.name)
|
2021-06-06 16:54:38 +02:00
|
|
|
_configure_select(level, node)
|
2026-05-16 21:58:11 +02:00
|
|
|
configure_reset(level, node, false)
|
2021-06-06 16:54:38 +02:00
|
|
|
configure_counter(level, node)
|
2021-05-15 01:20:47 +02:00
|
|
|
|
2026-05-16 21:58:11 +02:00
|
|
|
func _load_scene(p_name: String) -> Node:
|
|
|
|
|
var template_instance := template.instantiate()
|
2026-05-16 21:28:22 +02:00
|
|
|
template_instance.set_name(p_name)
|
2021-05-15 12:08:43 +02:00
|
|
|
return template_instance
|
2021-05-13 23:15:05 +02:00
|
|
|
|
2026-05-16 21:58:11 +02:00
|
|
|
func _build_path(p_name: String) -> String:
|
2026-05-16 21:28:22 +02:00
|
|
|
return "MarginContainer/" + p_name
|
2021-06-06 16:54:38 +02:00
|
|
|
|
2026-05-16 21:58:11 +02:00
|
|
|
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)
|
2026-05-16 21:50:00 +02:00
|
|
|
if handler.is_valid():
|
|
|
|
|
selector.pressed.connect(handler)
|
2021-05-13 23:15:05 +02:00
|
|
|
|
2026-05-16 21:58:11 +02:00
|
|
|
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")
|
2021-05-29 21:09:10 +02:00
|
|
|
if int(level.object_finding()) == 0:
|
2021-06-06 16:54:38 +02:00
|
|
|
_configure_reset_disable(animation, reset, animate)
|
2021-05-29 21:09:10 +02:00
|
|
|
else:
|
2026-05-16 21:58:11 +02:00
|
|
|
_configure_reset_enable(animation, reset, level, node)
|
2021-06-06 16:54:38 +02:00
|
|
|
|
2026-05-16 21:58:11 +02:00
|
|
|
func _configure_reset_disable(animation: AnimationPlayer, reset: BaseButton, animate: bool = false) -> void:
|
2021-06-06 16:54:38 +02:00
|
|
|
animation.play("SlideReset")
|
2026-05-16 21:58:11 +02:00
|
|
|
if not animate:
|
2021-06-06 16:54:38 +02:00
|
|
|
animation.seek(1, false)
|
|
|
|
|
reset.set_disabled(true)
|
2026-05-16 21:58:11 +02:00
|
|
|
reset.mouse_default_cursor_shape = CURSOR_ARROW
|
2026-05-16 21:50:00 +02:00
|
|
|
for c in reset.pressed.get_connections():
|
|
|
|
|
reset.pressed.disconnect(c["callable"])
|
2021-06-06 16:54:38 +02:00
|
|
|
|
2026-05-16 21:58:11 +02:00
|
|
|
func _configure_reset_enable(animation: AnimationPlayer, reset: BaseButton, level: LevelEntry, node: String) -> void:
|
2021-06-06 16:54:38 +02:00
|
|
|
animation.play_backwards("SlideReset")
|
|
|
|
|
reset.set_disabled(false)
|
2026-05-16 21:58:11 +02:00
|
|
|
reset.mouse_default_cursor_shape = CURSOR_POINTING_HAND
|
|
|
|
|
reset.pressed.connect(Event._on_reset_level.bind(level, node, level.index, self))
|
2021-05-15 14:14:17 +02:00
|
|
|
|
2026-05-16 21:58:11 +02:00
|
|
|
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()
|