UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

166 lines (138 loc) 2.88 kB
import { assert } from "../assert.js"; import Signal from "../events/signal/Signal.js"; class ObservedBoolean extends Boolean { /** * @readonly * @type {Signal<boolean,boolean>} */ onChanged = new Signal(); /** * * @param {boolean} value * @constructor */ constructor(value) { super(); assert.isBoolean(value, 'value'); /** * * @type {boolean} * @private */ this.__value = value; } /** * * @returns {boolean} */ valueOf() { return this.__value; } /** * * @returns {string} */ toString() { return this.__value.toString(); } /** * * @param {boolean} value * @returns {ObservedBoolean} */ set(value) { assert.isBoolean(value, 'value'); const oldValue = this.__value; if (oldValue !== value) { this.__value = value; this.onChanged.send2(value, oldValue); } return this; } setTrue() { this.set(true); } setFalse() { this.set(false); } /** * * @param {ObservedBoolean} other */ copy(other) { this.set(other.getValue()); } /** * * @param {ObservedBoolean} other * @returns {boolean} */ equals(other) { return this.__value === other.__value; } /** * * @return {number} */ hashCode() { return this.__value ? 1 : 0; } /** * * @param {function(boolean)} f */ process(f) { f(this.__value); this.onChanged.add(f); } /** * * @returns {Boolean} */ getValue() { return this.__value; } /** * Flip value. If value is true - it becomes false, if it was false it becomes true */ invert() { this.set(!this.__value); } toJSON() { return this.__value; } fromJSON(obj) { this.set(obj); } /** * * @param {BinaryBuffer} buffer */ toBinaryBuffer(buffer) { buffer.writeUint8(this.__value ? 1 : 0); } /** * * @param {BinaryBuffer} buffer */ fromBinaryBuffer(buffer) { const v = buffer.readUint8() !== 0; this.set(v); } } /** * @readonly * @type {ObservedBoolean} */ ObservedBoolean.FALSE = Object.freeze(new ObservedBoolean(false)); /** * @readonly * @type {ObservedBoolean} */ ObservedBoolean.TRUE = Object.freeze(new ObservedBoolean(true)); /** * @readonly * @type {boolean} */ ObservedBoolean.prototype.isObservedBoolean = true; export default ObservedBoolean;