UNPKG

rot-js

Version:

A roguelike toolkit in JavaScript

66 lines (65 loc) 1.63 kB
import { MinHeap } from "./MinHeap.js"; export default class EventQueue { /** * @class Generic event queue: stores events and retrieves them based on their time */ constructor() { this._time = 0; this._events = new MinHeap(); } /** * @returns {number} Elapsed time */ getTime() { return this._time; } /** * Clear all scheduled events */ clear() { this._events = new MinHeap(); return this; } /** * @param {?} event * @param {number} time */ add(event, time) { this._events.push(event, time); } /** * Locates the nearest event, advances time if necessary. Returns that event and removes it from the queue. * @returns {? || null} The event previously added by addEvent, null if no event available */ get() { if (!this._events.len()) { return null; } let { key: time, value: event } = this._events.pop(); if (time > 0) { /* advance */ this._time += time; this._events.shift(-time); } return event; } /** * Get the time associated with the given event * @param {?} event * @returns {number} time */ getEventTime(event) { const r = this._events.find(event); if (r) { const { key } = r; return key; } return undefined; } /** * Remove an event from the queue * @param {?} event * @returns {bool} success? */ remove(event) { return this._events.remove(event); } ; }