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): eventFlags[event] = 0; return (eventFlags[event] & flagsToCheck) == flagsToCheck; func eventIsAnyOfFlagsOn(event:SpecialEvent, flagsToCheck:int) -> bool: if !eventFlags.has(event): eventFlags[event] = 0; return (eventFlags[event] & flagsToCheck) != 0; func eventAreFlagsOff(event:SpecialEvent, flagsToCheck:int) -> bool: if !eventFlags.has(event): eventFlags[event] = 0; return (eventFlags[event] & flagsToCheck) == 0; func eventIsAnyOfFlagsOff(event:SpecialEvent, flagsToCheck:int) -> bool: if !eventFlags.has(event): eventFlags[event] = 0; return (eventFlags[event] & flagsToCheck) != flagsToCheck; # Adds an event that is created by code into the scene tree and lets it be # managed properly by the event system. func addEvent(event:Event) -> void: assert( !event.is_inside_tree(), "Event is already inside the scene tree, cannot add it again." ) $StartedEvents.add_child(event) event.inEventSystemTree = true func removeEvent(event:Event) -> void: assert( event.inEventSystemTree, "Event is not inside event system tree." ) event.inEventSystemTree = false $StartedEvents.remove_child(event) event.queue_free()