UNPKG

@spearwolf/twopoint5d

Version:

a library to create 2.5d realtime graphics and pixelart with three.js

136 lines 4.34 kB
var _a; import { emit, eventize } from '@spearwolf/eventize'; export class DisplayStateMachine { static { this.NEW = 'new'; } static { this.RUNNING = 'running'; } static { this.PAUSED = 'paused'; } static { this.Init = 'init'; } static { this.Start = 'start'; } static { this.Pause = 'pause'; } static { this.Restart = 'restart'; } #pausedByUser; #documentIsVisible; #elementIsInsideViewport; constructor() { this.state = _a.NEW; this.#pausedByUser = false; this.#documentIsVisible = true; this.#elementIsInsideViewport = true; this.#pausedByUserChanged = () => { switch (this.state) { case _a.RUNNING: if (this.#pausedByUser) { this.#pause(); } break; case _a.PAUSED: if (!this.#pausedByUser) { this.start(); } break; } }; this.#documentIsVisibleChanged = () => { switch (this.state) { case _a.RUNNING: case _a.PAUSED: if (this.#documentIsVisible) { this.start(); } else { this.#pause(); } break; } }; this.#elementIsInsideViewportChanged = () => { switch (this.state) { case _a.RUNNING: case _a.PAUSED: if (this.#elementIsInsideViewport) { this.start(); } else { this.#pause(); } break; } }; this.#pause = () => { if (this.state !== _a.PAUSED) { this.state = _a.PAUSED; emit(this, _a.Pause); } }; this.#initMustBeCalled = true; this.#initOrRestart = () => { if (this.#initMustBeCalled) { this.#initMustBeCalled = false; emit(this, _a.Init); } else { emit(this, _a.Restart); } }; eventize(this); } get pausedByUser() { return this.#pausedByUser; } set pausedByUser(pausedByUser) { if (pausedByUser !== this.#pausedByUser) { this.#pausedByUser = pausedByUser; this.#pausedByUserChanged(); } } get documentIsVisible() { return this.#documentIsVisible; } set documentIsVisible(documentIsVisible) { if (documentIsVisible !== this.#documentIsVisible) { this.#documentIsVisible = documentIsVisible; this.#documentIsVisibleChanged(); } } get elementIsInsideViewport() { return this.#elementIsInsideViewport; } set elementIsInsideViewport(elementIsInsideViewport) { if (elementIsInsideViewport !== this.#elementIsInsideViewport) { this.#elementIsInsideViewport = elementIsInsideViewport; this.#elementIsInsideViewportChanged(); } } #pausedByUserChanged; #documentIsVisibleChanged; #elementIsInsideViewportChanged; #pause; #initMustBeCalled; #initOrRestart; start() { if (this.state !== _a.RUNNING) { const isPaused = this.#pausedByUser || !this.#documentIsVisible || !this.#elementIsInsideViewport; switch (this.state) { case _a.NEW: if (!isPaused) { this.#initOrRestart(); this.state = _a.RUNNING; emit(this, _a.Start); } else { this.#pause(); } break; case _a.PAUSED: if (!isPaused) { this.#initOrRestart(); this.state = _a.RUNNING; emit(this, _a.Start); } break; } } } } _a = DisplayStateMachine; //# sourceMappingURL=DisplayStateMachine.js.map