50 lines
1.5 KiB
GDScript
50 lines
1.5 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; |