Add event flags

This commit is contained in:
2025-05-19 22:53:17 -05:00
parent 057ed10851
commit 7cd96e20d2
9 changed files with 229 additions and 7 deletions

View File

@@ -10,10 +10,54 @@ enum Action {
@export var action:Action = Action.TURN_ON;
@export var event:EventSystem.SpecialEvent;
@export_flags("1:1", "2:2", "3:4", "4:8", "5:16", "6:32", "7:64", "8:128", "9:256", "10:512", "11:1024", "12:2048", "13:4096", "14:8192", "15:16384", "16:32768")
@export_flags(
"1:1",
"2:2",
"3:4",
"4:8",
"5:16",
"6:32",
"7:64",
"8:128",
"9:256",
"10:512",
"11:1024",
"12:2048",
"13:4096",
"14:8192",
"15:16384",
"16:32768",
"17:65536",
"18:131072",
"19:262144",
"20:524288",
"21:1048576",
"22:2097152",
"23:4194304",
"24:8388608",
"25:16777216",
"26:33554432",
"27:67108864",
"28:134217728",
"29:268435456",
"30:536870912",
"31:1073741824",
"32:2147483648"
)
var eventFlag:int = 0;
func start() -> void:
super.start()
pass
# EVENT.eventFlagOn(event, eventFlag)
match action:
Action.TURN_ON:
EVENT.eventFlagOn(event, eventFlag)
Action.TURN_OFF:
EVENT.eventFlagOff(event, eventFlag)
Action.SET_TO:
EVENT.eventFlagSetTo(event, eventFlag)
Action.ALL_ON:
EVENT.eventFlagSetTo(event, 0xffffffff)
Action.ALL_OFF:
EVENT.eventFlagSetTo(event, 0)
_:
print("Invalid action: %s" % str(action))

View File

@@ -1,22 +1,33 @@
class_name EventSystem extends Node
const EVENT_FLAG_COUNT = 32
enum SpecialEvent {
INVALID = 0,
TEST_QUEST = 1,
};
var eventFlags:Dictionary[int, int] = {}
signal eventFlagUpdated(event:SpecialEvent, flags:int)
func eventFlagOn(event:SpecialEvent, flagsToTurnOn:int) -> void:
if !eventFlags.has(event):
eventFlags[event] = 0;
eventFlags[event] |= flagsToTurnOn;
eventFlagUpdated.emit(event, eventFlags[event]);
func eventFlagOff(event:SpecialEvent, flagsToTurnOff:int) -> void:
if !eventFlags.has(event):
eventFlags[event] = 0;
eventFlags[event] &= ~flagsToTurnOff;
eventFlagUpdated.emit(event, eventFlags[event]);
func eventFlagSetTo(event:SpecialEvent, flagsToSet:int) -> void:
if !eventFlags.has(event):
eventFlags[event] = 0;
eventFlags[event] = flagsToSet;
eventFlagUpdated.emit(event, eventFlags[event]);
func eventAreFlagsOn(event:SpecialEvent, flagsToCheck:int) -> bool:
if !eventFlags.has(event):

View File

@@ -3,11 +3,13 @@ class_name UISystem extends Control
var QUEST_MENU:QuestMenu
var DEBUG_MENU:DebugMenu
var INVENTORY_MENU:FullInventoryMenu
var EVENT_FLAG_MENU:EventFlagMenu
func _ready() -> void:
QUEST_MENU = $QuestMenu
DEBUG_MENU = $DebugMenu
INVENTORY_MENU = $FullInventory
EVENT_FLAG_MENU = $EventFlagMenu
func _process(delta: float) -> void:
# This needs to always be at the end of the parent node's tree

View File

@@ -61,7 +61,11 @@ func _on_Battle_pressed():
print("Battle pressed")
func _on_Event_pressed():
print("Event pressed")
close()
if UI.EVENT_FLAG_MENU.isOpen():
UI.EVENT_FLAG_MENU.close()
else:
UI.EVENT_FLAG_MENU.open()
func _on_Inventory_pressed():
close()

View 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)

View File

@@ -0,0 +1 @@
uid://b4a3ne2vn36mt