Files
Dawn-Godot/scripts/UI/EventFlagMenu.gd

87 lines
2.0 KiB
GDScript

class_name EventFlagMenu extends Panel
@export var flagList:ItemList
@export var grid:GridContainer
@export var btnClose:Button
var checkboxes:Array[CheckBox] = []
var selectedEvent:int = -1
func _ready() -> void:
while grid.get_child_count() > 0:
var child = grid.get_child(0)
grid.remove_child(child)
child.queue_free()
for i in range(0, EventSystem.EVENT_FLAG_COUNT):
var checkbox:CheckBox = CheckBox.new()
checkbox.text = "Flag %s" % str(i+1)
grid.add_child(checkbox)
checkboxes.append(checkbox)
checkbox.pressed.connect(_on_CheckboxPressed)
hide()
_updateEventList()
_updateSelectedEvent()
EVENT.eventFlagUpdated.connect(_on_EventFlagUpdated)
flagList.item_selected.connect(_on_EventSelected)
btnClose.pressed.connect(close)
func _exit_tree() -> void:
EVENT.eventFlagUpdated.disconnect(_on_EventFlagUpdated)
flagList.item_selected.disconnect(_on_EventSelected)
for checkbox in checkboxes:
grid.remove_child(checkbox)
checkbox.queue_free()
checkboxes.clear()
func _updateEventList() -> void:
flagList.clear()
flagList.deselect_all()
for event in EventSystem.SpecialEvent:
flagList.add_item(event)
func _updateSelectedEvent() -> void:
if selectedEvent == -1:
for i in range(0, EventSystem.EVENT_FLAG_COUNT):
checkboxes[i].visible = false
return
for i in range(0, EventSystem.EVENT_FLAG_COUNT):
var cb = checkboxes[i]
cb.visible = true
cb.button_pressed = EVENT.eventIsAnyOfFlagsOn(selectedEvent, 1 << i)
func open() -> void:
show()
func close() -> void:
selectedEvent = -1
_updateSelectedEvent()
hide()
func isOpen() -> bool:
return self.visible
func _on_EventFlagUpdated(event:EventSystem.SpecialEvent, flags:int) -> void:
_updateEventList()
_updateSelectedEvent()
func _on_EventSelected(index:int) -> void:
selectedEvent = index
_updateSelectedEvent()
func _on_CheckboxPressed() -> void:
if selectedEvent == -1:
return
var value = 0
for i in range(0, EventSystem.EVENT_FLAG_COUNT):
if checkboxes[i].button_pressed:
value |= (1 << i)
EVENT.eventFlagSetTo(selectedEvent, value)