extends Node ## Array of menu actions represented as buttons @onready var actions: Array[Button] = [ $Action1, $Action2, $Action3, $Action4, $Action5, $Action6, $Action7, $Action8 ] ## Script attached to transit buttons const TRANSIT_BUTTON_SCRIPT = preload("res://scripts/Classes/Menu/transit_button.gd") @export var menu: Menu = null func _ready(): load_menu() ## Called when menu is changed func load_menu(): # iterating through all actions for i in range(len(menu.item_ids)): # disconnect previous action if actions[i] is TransitButton: actions[i].button_up.disconnect(transit_menu) elif actions[i] is MenuAction: actions[i].button_up.disconnect(actions[i].action) # disconnect previous script actions[i].set_script(null) actions[i].text = menu.item_ids[i] # assign new script match menu.item_actions[i]: Menu.Action.TransitAction: actions[i].set_script(TRANSIT_BUTTON_SCRIPT) Menu.Action.ButtonAction: actions[i].set_script(menu.item_data[i].load_script()) Menu.Action.ComboAction: actions[i].set_script(menu.item_data[i].load_script()) if "id" in actions[i]: actions[i].id = i if "dialogue" in actions[i]: actions[i].dialogue = $"../../Dialogue" ## Called with transit_button, changes current menu func transit_menu(id: int): assert(id < len(menu.item_ids) and id >= 0) var new_menu = menu.item_data[id].load_menu().duplicate() menu = new_menu load_menu()