extends Control var selected_index := 0 var num_menu_items := 1 var active_menu = "Main" # Called when the node enters the scene tree for the first time. func _ready() -> void: for child in get_children(): child.visible = false if child.name == active_menu: child.visible = true num_menu_items = child.get_child_count() var label = (find_child(active_menu).get_child(selected_index) as Label) label.text = "> " + label.text func show_menu(): self.visible = true func hide_menu(): self.visible = false # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: if !self.visible: return if Input.is_action_just_pressed('down'): selected_index = (selected_index + 1) % num_menu_items elif Input.is_action_just_pressed('up'): selected_index = (selected_index - 1) % num_menu_items if Input.is_action_just_pressed('select'): var curr_label = find_child(active_menu).get_child(selected_index) as Label var option = curr_label.text if option == "> back": find_child(active_menu).visible = false active_menu = "Main" $Main.visible = true num_menu_items = $Main.get_child_count() selected_index = 0 elif option == "> SMACK": $Main.visible = false $Smack.visible = true active_menu = "Smack" num_menu_items = $Smack.get_child_count() selected_index = 0 elif option == "> CAST": $Main.visible = false $Cast.visible = true active_menu = "Cast" num_menu_items = $Cast.get_child_count() selected_index = 0 elif option == "> USE": $Main.visible = false $Use.visible = true active_menu = "Use" num_menu_items = $Use.get_child_count() selected_index = 0 else: var player = get_parent().get_parent().get_node("Player") if active_menu == "Smack": player.choose_option(BattlePlayer.MoveOption.ATTACK, $Smack.get_child(selected_index).text.substr(2)) elif active_menu == "Cast": player.choose_option(BattlePlayer.MoveOption.SPELL, $Cast.get_child(selected_index).text.substr(2)) elif active_menu == "Use": player.choose_option(BattlePlayer.MoveOption.ITEM, $Use.get_child(selected_index).text.substr(2)) elif active_menu == "Main": player.choose_option(BattlePlayer.MoveOption.RUN, "Bail") # Add visual indicator to labels var menu = find_child(active_menu) for child in menu.get_children(): if child.get_index() == selected_index: if !(child as Label).text.begins_with("> "): child.text = "> " + child.text else: if (child as Label).text.begins_with("> "): child.text = child.text.substr(2)