UNPKG

matrix-react-sdk

Version:
90 lines (88 loc) 14.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.DefaultOptions = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _arrays = require("../../utils/arrays"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Copyright 2024 New Vector Ltd. Copyright 2021-2023 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const DefaultOptions = exports.DefaultOptions = { maxCount: 50, gravity: 0.005 }; const KEY_FRAME_INTERVAL = 15; // 15ms, roughly const GLYPH = "👾"; class SpaceInvaders { constructor(options) { (0, _defineProperty2.default)(this, "options", void 0); (0, _defineProperty2.default)(this, "context", null); (0, _defineProperty2.default)(this, "particles", []); (0, _defineProperty2.default)(this, "lastAnimationTime", 0); (0, _defineProperty2.default)(this, "isRunning", false); (0, _defineProperty2.default)(this, "start", async (canvas, timeout = 3000) => { if (!canvas) { return; } this.context = canvas.getContext("2d"); this.particles = []; const count = this.options.maxCount; while (this.particles.length < count) { this.particles.push(this.resetParticle({}, canvas.width, canvas.height)); } this.isRunning = true; requestAnimationFrame(this.renderLoop); if (timeout) { window.setTimeout(this.stop, timeout); } }); (0, _defineProperty2.default)(this, "stop", async () => { this.isRunning = false; }); (0, _defineProperty2.default)(this, "resetParticle", (particle, width, height) => { particle.x = Math.random() * width; particle.y = Math.random() * -height; particle.xCol = particle.x; particle.gravity = this.options.gravity + Math.random() * 6 + 4; return particle; }); (0, _defineProperty2.default)(this, "renderLoop", () => { if (!this.context || !this.context.canvas) { return; } if (this.particles.length === 0) { this.context.clearRect(0, 0, this.context.canvas.width, this.context.canvas.height); } else { const timeDelta = Date.now() - this.lastAnimationTime; if (timeDelta >= KEY_FRAME_INTERVAL || !this.lastAnimationTime) { // Clear the screen first this.context.clearRect(0, 0, this.context.canvas.width, this.context.canvas.height); this.lastAnimationTime = Date.now(); this.animateAndRenderInvaders(); } requestAnimationFrame(this.renderLoop); } }); this.options = _objectSpread(_objectSpread({}, DefaultOptions), options); } animateAndRenderInvaders() { if (!this.context || !this.context.canvas) { return; } this.context.font = "50px Twemoji"; for (const particle of (0, _arrays.arrayFastClone)(this.particles)) { particle.y += particle.gravity; this.context.save(); this.context.fillText(GLYPH, particle.x, particle.y); this.context.restore(); } } } exports.default = SpaceInvaders; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXJyYXlzIiwicmVxdWlyZSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIkRlZmF1bHRPcHRpb25zIiwiZXhwb3J0cyIsIm1heENvdW50IiwiZ3Jhdml0eSIsIktFWV9GUkFNRV9JTlRFUlZBTCIsIkdMWVBIIiwiU3BhY2VJbnZhZGVycyIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNhbnZhcyIsInRpbWVvdXQiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsInBhcnRpY2xlcyIsImNvdW50IiwicmVzZXRQYXJ0aWNsZSIsIndpZHRoIiwiaGVpZ2h0IiwiaXNSdW5uaW5nIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicmVuZGVyTG9vcCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJzdG9wIiwicGFydGljbGUiLCJ4IiwiTWF0aCIsInJhbmRvbSIsInkiLCJ4Q29sIiwiY2xlYXJSZWN0IiwidGltZURlbHRhIiwiRGF0ZSIsIm5vdyIsImxhc3RBbmltYXRpb25UaW1lIiwiYW5pbWF0ZUFuZFJlbmRlckludmFkZXJzIiwiZm9udCIsImFycmF5RmFzdENsb25lIiwic2F2ZSIsImZpbGxUZXh0IiwicmVzdG9yZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZmZlY3RzL3NwYWNlaW52YWRlcnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEtMjAyMyBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4gKi9cbmltcG9ydCBJQ2FudmFzRWZmZWN0IGZyb20gXCIuLi9JQ2FudmFzRWZmZWN0XCI7XG5pbXBvcnQgeyBhcnJheUZhc3RDbG9uZSB9IGZyb20gXCIuLi8uLi91dGlscy9hcnJheXNcIjtcblxuZXhwb3J0IHR5cGUgU3BhY2VJbnZhZGVyc09wdGlvbnMgPSB7XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGludmFkZXJzIHRvIHJlbmRlciBhdCBhIGdpdmVuIHRpbWVcbiAgICAgKi9cbiAgICBtYXhDb3VudDogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2YgZ3Jhdml0eSB0byBhcHBseSB0byB0aGUgaW52YWRlcnNcbiAgICAgKi9cbiAgICBncmF2aXR5OiBudW1iZXI7XG59O1xuXG50eXBlIEludmFkZXIgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB4Q29sOiBudW1iZXI7XG4gICAgZ3Jhdml0eTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRPcHRpb25zOiBTcGFjZUludmFkZXJzT3B0aW9ucyA9IHtcbiAgICBtYXhDb3VudDogNTAsXG4gICAgZ3Jhdml0eTogMC4wMDUsXG59O1xuXG5jb25zdCBLRVlfRlJBTUVfSU5URVJWQUwgPSAxNTsgLy8gMTVtcywgcm91Z2hseVxuY29uc3QgR0xZUEggPSBcIvCfkb5cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BhY2VJbnZhZGVycyBpbXBsZW1lbnRzIElDYW52YXNFZmZlY3Qge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogU3BhY2VJbnZhZGVyc09wdGlvbnM7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLkRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBhcnRpY2xlczogQXJyYXk8SW52YWRlcj4gPSBbXTtcbiAgICBwcml2YXRlIGxhc3RBbmltYXRpb25UaW1lID0gMDtcblxuICAgIHB1YmxpYyBpc1J1bm5pbmcgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzdGFydCA9IGFzeW5jIChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCB0aW1lb3V0ID0gMzAwMCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpZiAoIWNhbnZhcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgIHRoaXMucGFydGljbGVzID0gW107XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5vcHRpb25zLm1heENvdW50O1xuICAgICAgICB3aGlsZSAodGhpcy5wYXJ0aWNsZXMubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgICAgICAgIHRoaXMucGFydGljbGVzLnB1c2godGhpcy5yZXNldFBhcnRpY2xlKHt9IGFzIEludmFkZXIsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyTG9vcCk7XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh0aGlzLnN0b3AsIHRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHB1YmxpYyBzdG9wID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlc2V0UGFydGljbGUgPSAocGFydGljbGU6IEludmFkZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogSW52YWRlciA9PiB7XG4gICAgICAgIHBhcnRpY2xlLnggPSBNYXRoLnJhbmRvbSgpICogd2lkdGg7XG4gICAgICAgIHBhcnRpY2xlLnkgPSBNYXRoLnJhbmRvbSgpICogLWhlaWdodDtcbiAgICAgICAgcGFydGljbGUueENvbCA9IHBhcnRpY2xlLng7XG4gICAgICAgIHBhcnRpY2xlLmdyYXZpdHkgPSB0aGlzLm9wdGlvbnMuZ3Jhdml0eSArIE1hdGgucmFuZG9tKCkgKiA2ICsgNDtcbiAgICAgICAgcmV0dXJuIHBhcnRpY2xlO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlbmRlckxvb3AgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jb250ZXh0IHx8ICF0aGlzLmNvbnRleHQuY2FudmFzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFydGljbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLCB0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSBEYXRlLm5vdygpIC0gdGhpcy5sYXN0QW5pbWF0aW9uVGltZTtcbiAgICAgICAgICAgIGlmICh0aW1lRGVsdGEgPj0gS0VZX0ZSQU1FX0lOVEVSVkFMIHx8ICF0aGlzLmxhc3RBbmltYXRpb25UaW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHNjcmVlbiBmaXJzdFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCwgdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0QW5pbWF0aW9uVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRlQW5kUmVuZGVySW52YWRlcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlbmRlckxvb3ApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgYW5pbWF0ZUFuZFJlbmRlckludmFkZXJzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29udGV4dCB8fCAhdGhpcy5jb250ZXh0LmNhbnZhcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGV4dC5mb250ID0gXCI1MHB4IFR3ZW1vamlcIjtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0aWNsZSBvZiBhcnJheUZhc3RDbG9uZSh0aGlzLnBhcnRpY2xlcykpIHtcbiAgICAgICAgICAgIHBhcnRpY2xlLnkgKz0gcGFydGljbGUuZ3Jhdml0eTtcblxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsVGV4dChHTFlQSCwgcGFydGljbGUueCwgcGFydGljbGUueSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUFvRCxTQUFBQyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElB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