Add event flags
This commit is contained in:
83
scripts/UI/EventFlagMenu.gd
Normal file
83
scripts/UI/EventFlagMenu.gd
Normal file
@@ -0,0 +1,83 @@
|
||||
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)
|
||||
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)
|
Reference in New Issue
Block a user