100 lines
2.7 KiB
GDScript
100 lines
2.7 KiB
GDScript
class_name MenuLevelSelect extends Control
|
|
|
|
@export var icons: Array[Texture] = []
|
|
@export var cassette_image: Texture
|
|
|
|
var biomes: Dictionary[String, HBoxContainer] = {}
|
|
var selected_biome: String = ""
|
|
|
|
var levels: Array[FloatingElement] = []
|
|
|
|
@export var level_scene: PackedScene
|
|
|
|
|
|
func _ready() -> void:
|
|
#create_classes()
|
|
make_level_labels()
|
|
|
|
|
|
func make_level_labels() -> void:
|
|
for x: int in 10:
|
|
var margin: FloatingElement = level_scene.instantiate() as FloatingElement
|
|
add_child(margin)
|
|
levels.append(margin)
|
|
margin.set_text("Level " + str(x))
|
|
margin.dest = Vector2(x * 50.0, 0.0)
|
|
|
|
|
|
func move_right() -> void:
|
|
for x: FloatingElement in levels:
|
|
x.dest += (Vector2.LEFT * 50.0)
|
|
|
|
|
|
func move_left() -> void:
|
|
for x: FloatingElement in levels:
|
|
x.dest += (Vector2.RIGHT * 50.0)
|
|
|
|
|
|
func create_classes() -> void:
|
|
var centre: Vector2 = Vector2(get_viewport_rect().size.x / 2.0, get_viewport_rect().size.y / 2.0)
|
|
|
|
biomes["Engineer"] = create_sprite("Engineer", icons[0])
|
|
biomes["Engineer"].set_position(centre + Vector2(-32.0, 0.0 - 32.0))
|
|
biomes["Mage"] = create_sprite("Mage", icons[1])
|
|
biomes["Mage"].set_position(centre + Vector2(-32.0, 80.0 - 32.0))
|
|
biomes["ThirdClass"] = create_sprite("ThirdClass", icons[2])
|
|
biomes["ThirdClass"].set_position(centre + Vector2(-32.0, 160.0 - 32.0))
|
|
biomes["FourthClass"] = create_sprite("FourthClass", icons[3])
|
|
biomes["FourthClass"].set_position(centre + Vector2(-32.0, 240.0 - 32.0))
|
|
|
|
selected_biome = "Engineer"
|
|
$Label.text = selected_biome
|
|
|
|
|
|
func move_down() -> void:
|
|
for x: HBoxContainer in biomes.values():
|
|
var tween: Tween = create_tween()
|
|
tween.tween_property(x, "position", x.position + Vector2(0.0, -80.0), 0.3)
|
|
var y: int = biomes.keys().find(selected_biome)
|
|
if y + 1 >= biomes.keys().size():
|
|
y = -1
|
|
selected_biome = biomes.keys()[y + 1]
|
|
$Label.text = selected_biome
|
|
|
|
|
|
func move_up() -> void:
|
|
for x: HBoxContainer in biomes.values():
|
|
var tween: Tween = create_tween()
|
|
tween.tween_property(x, "position", x.position + Vector2(0.0, 80.0), 0.3)
|
|
var y: int = biomes.keys().find(selected_biome)
|
|
if y - 1 < 0:
|
|
y = biomes.keys().size()
|
|
selected_biome = biomes.keys()[y - 1]
|
|
$Label.text = selected_biome
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
if Input.is_action_just_pressed("Move Backward"):
|
|
move_down()
|
|
if Input.is_action_just_pressed("Move Forward"):
|
|
move_up()
|
|
if Input.is_action_just_pressed("Move Right"):
|
|
move_right()
|
|
if Input.is_action_just_pressed("Move Left"):
|
|
move_left()
|
|
|
|
|
|
func create_sprite(text: String, icon: Texture) -> HBoxContainer:
|
|
var hbox: HBoxContainer = HBoxContainer.new()
|
|
var sprite: TextureRect = TextureRect.new()
|
|
var label: Label = Label.new()
|
|
|
|
add_child(hbox)
|
|
hbox.add_child(sprite)
|
|
hbox.add_child(label)
|
|
|
|
label.text = text
|
|
sprite.texture = icon
|
|
|
|
return hbox
|