Cow_Life_Sim_RPG/Interactions/Interactable/Action_Menu.gd

52 lines
1.2 KiB
GDScript

extends Node2D
signal action_selected(ID)
var next_ID = 1
var availabilityChecks = {}
var defaultOptionsAdded = false
var shortcuts = [KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9]
var action_ids
func _process(delta):
var popupMenu:PopupMenu = $PopupMenu
if popupMenu.visible:
for i in range(popupMenu.item_count):
var currentID = popupMenu.get_item_id(i)
if currentID < shortcuts.size() and Input.is_action_just_pressed(str(currentID)):
_on_popup_menu_id_pressed(currentID)
if currentID == popupMenu.item_count:
popupMenu.hide()
break
func appear():
var popupMenu:PopupMenu = $PopupMenu
popupMenu.show()
for i in range(popupMenu.item_count):
var currentID = popupMenu.get_item_id(i)
if currentID in availabilityChecks.keys():
var result = availabilityChecks[currentID].call()
popupMenu.set_item_disabled(i, !result)
if !defaultOptionsAdded:
defaultOptionsAdded = true
add_action("Cancel")
func add_availability_check(ID, availabilityCheck):
availabilityChecks[ID] = availabilityCheck
func add_action(actionName):
$PopupMenu.add_item(actionName, next_ID)
var last_ID = next_ID
next_ID += 1
return last_ID
func _on_popup_menu_id_pressed(id):
action_selected.emit(id)