Files
Dawn-Godot/scripts/Singleton/EventSystem.gd

71 lines
2.0 KiB
GDScript

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