87 lines
2.0 KiB
GDScript
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)
|