extends RefCounted ## Queue that represents player's hand interactions with game mechanics class_name CommandQueue ## Commands that can be pushed to queue enum Command { NONE, TAKE_WEAPON, SHOOT, RELOAD, HOLSTER_WEAPON, TAKE_ZAZA, LIGHT_ZAZA, SMOKE } signal command_pushed(Side, Command) signal command_popped(Side, Command) ## Human-readable hand numbers. You could even make extra hands with it, if you wish enum Side { LEFT, RIGHT } ## Used anywhere you could get null const DEFAULT_COMMAND = Command.NONE ## Dictionary filled with queues for each side var command_queue: Dictionary = {} func _init() -> void: for side in Side.values(): var arr: Array[Command] = [] command_queue[side] = arr func push(commands: Array[Command], sides: Array[Side]): for i in range(len(commands)): command_queue[sides[i]].push_back(commands[i]) command_pushed.emit(sides[i], commands[i]) func pop(): # Checking if stack is actually empty (arrays must have same size) if command_queue[Side.LEFT].size() == 0: return for side in Side.values(): var command = command_queue[side].pop_front() command_popped.emit(side, command) func current_command(side: Side): var command = command_queue[side].front() if command == null: return DEFAULT_COMMAND return command