UNPKG

matrix-react-sdk

Version:
123 lines (102 loc) 13.5 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } const DefaultOptions /*: SpaceInvadersOptions*/ = { maxCount: 50, gravity: 0.005 }; exports.DefaultOptions = DefaultOptions; const KEY_FRAME_INTERVAL = 15; // 15ms, roughly const GLYPH = "👾"; class SpaceInvaders /*:: implements ICanvasEffect*/ { constructor(options /*: { [key: string]: any }*/ ) { (0, _defineProperty2.default)(this, "options", void 0); (0, _defineProperty2.default)(this, "context", null); (0, _defineProperty2.default)(this, "particles", []); (0, _defineProperty2.default)(this, "lastAnimationTime", void 0); (0, _defineProperty2.default)(this, "isRunning", void 0); (0, _defineProperty2.default)(this, "start", async (canvas /*: HTMLCanvasElement*/ , 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 /*: Invader*/ , width /*: number*/ , height /*: number*/ ) => /*: Invader*/ { 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", () => /*: void*/ { 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZmZlY3RzL3NwYWNlaW52YWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOlsiRGVmYXVsdE9wdGlvbnMiLCJtYXhDb3VudCIsImdyYXZpdHkiLCJLRVlfRlJBTUVfSU5URVJWQUwiLCJHTFlQSCIsIlNwYWNlSW52YWRlcnMiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjYW52YXMiLCJ0aW1lb3V0IiwiY29udGV4dCIsImdldENvbnRleHQiLCJwYXJ0aWNsZXMiLCJjb3VudCIsImxlbmd0aCIsInB1c2giLCJyZXNldFBhcnRpY2xlIiwid2lkdGgiLCJoZWlnaHQiLCJpc1J1bm5pbmciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJyZW5kZXJMb29wIiwid2luZG93Iiwic2V0VGltZW91dCIsInN0b3AiLCJwYXJ0aWNsZSIsIngiLCJNYXRoIiwicmFuZG9tIiwieSIsInhDb2wiLCJjbGVhclJlY3QiLCJ0aW1lRGVsdGEiLCJEYXRlIiwibm93IiwibGFzdEFuaW1hdGlvblRpbWUiLCJhbmltYXRlQW5kUmVuZGVySW52YWRlcnMiLCJmb250Iiwic2F2ZSIsImZpbGxUZXh0IiwicmVzdG9yZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFnQkE7Ozs7OztBQW9CTyxNQUFNQTtBQUFvQztBQUFBLEVBQUc7QUFDaERDLEVBQUFBLFFBQVEsRUFBRSxFQURzQztBQUVoREMsRUFBQUEsT0FBTyxFQUFFO0FBRnVDLENBQTdDOztBQUtQLE1BQU1DLGtCQUFrQixHQUFHLEVBQTNCLEMsQ0FBK0I7O0FBQy9CLE1BQU1DLEtBQUssR0FBRyxJQUFkOztBQUVlLE1BQU1DO0FBQU47QUFBNkM7QUFHeERDLEVBQUFBLFdBQVcsQ0FBQ0M7QUFBRDtBQUFBLElBQWtDO0FBQUE7QUFBQSxtREFJTSxJQUpOO0FBQUEscURBS1QsRUFMUztBQUFBO0FBQUE7QUFBQSxpREFVOUIsT0FBT0M7QUFBUDtBQUFBLE1BQWtDQyxPQUFPLEdBQUcsSUFBNUMsS0FBcUQ7QUFD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RCxTQUFLRSxPQUFMLENBQWEyQixJQUFiLEdBQW9CLGNBQXBCOztBQUNBLFNBQUssTUFBTVosUUFBWCxJQUF1Qiw0QkFBZSxLQUFLYixTQUFwQixDQUF2QixFQUF1RDtBQUNuRGEsTUFBQUEsUUFBUSxDQUFDSSxDQUFULElBQWNKLFFBQVEsQ0FBQ3ZCLE9BQXZCO0FBRUEsV0FBS1EsT0FBTCxDQUFhNEIsSUFBYjtBQUNBLFdBQUs1QixPQUFMLENBQWE2QixRQUFiLENBQXNCbkMsS0FBdEIsRUFBNkJxQixRQUFRLENBQUNDLENBQXRDLEVBQXlDRCxRQUFRLENBQUNJLENBQWxEO0FBQ0EsV0FBS25CLE9BQUwsQ0FBYThCLE9BQWI7QUFDSDtBQUNKOztBQXpFdUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIENvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBJQ2FudmFzRWZmZWN0IGZyb20gJy4uL0lDYW52YXNFZmZlY3QnO1xuaW1wb3J0IHsgYXJyYXlGYXN0Q2xvbmUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvYXJyYXlzXCI7XG5cbmV4cG9ydCB0eXBlIFNwYWNlSW52YWRlcnNPcHRpb25zID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnZhZGVycyB0byByZW5kZXIgYXQgYSBnaXZlbiB0aW1lXG4gICAgICovXG4gICAgbWF4Q291bnQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGdyYXZpdHkgdG8gYXBwbHkgdG8gdGhlIGludmFkZXJzXG4gICAgICovXG4gICAgZ3Jhdml0eTogbnVtYmVyO1xufVxuXG50eXBlIEludmFkZXIgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB4Q29sOiBudW1iZXI7XG4gICAgZ3Jhdml0eTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgRGVmYXVsdE9wdGlvbnM6IFNwYWNlSW52YWRlcnNPcHRpb25zID0ge1xuICAgIG1heENvdW50OiA1MCxcbiAgICBncmF2aXR5OiAwLjAwNSxcbn07XG5cbmNvbnN0IEtFWV9GUkFNRV9JTlRFUlZBTCA9IDE1OyAvLyAxNW1zLCByb3VnaGx5XG5jb25zdCBHTFlQSCA9IFwi8J+RvlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcGFjZUludmFkZXJzIGltcGxlbWVudHMgSUNhbnZhc0VmZmVjdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTcGFjZUludmFkZXJzT3B0aW9ucztcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gey4uLkRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcGFydGljbGVzOiBBcnJheTxJbnZhZGVyPiA9IFtdO1xuICAgIHByaXZhdGUgbGFzdEFuaW1hdGlvblRpbWU6IG51bWJlcjtcblxuICAgIHB1YmxpYyBpc1J1bm5pbmc6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgc3RhcnQgPSBhc3luYyAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgdGltZW91dCA9IDMwMDApID0+IHtcbiAgICAgICAgaWYgKCFjYW52YXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgdGhpcy5wYXJ0aWNsZXMgPSBbXTtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLm9wdGlvbnMubWF4Q291bnQ7XG4gICAgICAgIHdoaWxlICh0aGlzLnBhcnRpY2xlcy5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJ0aWNsZXMucHVzaCh0aGlzLnJlc2V0UGFydGljbGUoe30gYXMgSW52YWRlciwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXJMb29wKTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc3RvcCwgdGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0UGFydGljbGUgPSAocGFydGljbGU6IEludmFkZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogSW52YWRlciA9PiB7XG4gICAgICAgIHBhcnRpY2xlLnggPSBNYXRoLnJhbmRvbSgpICogd2lkdGg7XG4gICAgICAgIHBhcnRpY2xlLnkgPSBNYXRoLnJhbmRvbSgpICogLWhlaWdodDtcbiAgICAgICAgcGFydGljbGUueENvbCA9IHBhcnRpY2xlLng7XG4gICAgICAgIHBhcnRpY2xlLmdyYXZpdHkgPSB0aGlzLm9wdGlvbnMuZ3Jhdml0eSArIChNYXRoLnJhbmRvbSgpICogNikgKyA0O1xuICAgICAgICByZXR1cm4gcGFydGljbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJMb29wID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29udGV4dCB8fCAhdGhpcy5jb250ZXh0LmNhbnZhcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcnRpY2xlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCwgdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEFuaW1hdGlvblRpbWU7XG4gICAgICAgICAgICBpZiAodGltZURlbHRhID49IEtFWV9GUkFNRV9JTlRFUlZBTCB8fCAhdGhpcy5sYXN0QW5pbWF0aW9uVGltZSkge1xuICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBzY3JlZW4gZmlyc3RcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsIHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEFuaW1hdGlvblRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZUFuZFJlbmRlckludmFkZXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXJMb29wKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGFuaW1hdGVBbmRSZW5kZXJJbnZhZGVycygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQgfHwgIXRoaXMuY29udGV4dC5jYW52YXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQuZm9udCA9IFwiNTBweCBUd2Vtb2ppXCI7XG4gICAgICAgIGZvciAoY29uc3QgcGFydGljbGUgb2YgYXJyYXlGYXN0Q2xvbmUodGhpcy5wYXJ0aWNsZXMpKSB7XG4gICAgICAgICAgICBwYXJ0aWNsZS55ICs9IHBhcnRpY2xlLmdyYXZpdHk7XG5cbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQoR0xZUEgsIHBhcnRpY2xlLngsIHBhcnRpY2xlLnkpO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==