class_name EventFlagMenu extends Panel @export var flagList:ItemList @export var grid:GridContainer 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) 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)