From c0a0be791ecd1bfcace56c697d48aeb3a5605931 Mon Sep 17 00:00:00 2001 From: Ben Burlingham Date: Sun, 22 Oct 2017 08:09:59 -0700 Subject: [PATCH] Randomizing hazard placement. --- js/animation2a.js | 20 ++++++++++++++++---- js/animation2b.js | 15 +++++++++++++-- js/animation3a.js | 1 - js/bundle.js | 4 ++-- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/js/animation2a.js b/js/animation2a.js index db366c5..ef3f68b 100644 --- a/js/animation2a.js +++ b/js/animation2a.js @@ -2,6 +2,7 @@ import Rx, { Observable } from 'rxjs'; import Particle from './particle'; import Grid from './grid'; import Controls from './controls'; +import Random from './random'; import { CONTROLS, ENTITIES } from './enums'; function Animation2a() { @@ -14,7 +15,7 @@ function Animation2a() { this.container = document.getElementById('animation2a'); this.particles = []; - this.grid = createGlobalGrid(this.container, this.bounds); + this.grid = this.createGlobalGrid(); const controls = new Controls( document.getElementById('controls2a'), @@ -68,11 +69,22 @@ Animation2a.prototype.updateSpeed = function(value) { this.particles.forEach(p => p.updateConfig({ speed: value })); } -function createGlobalGrid(container, bounds) { +Animation2a.prototype.createGlobalGrid = function() { + const bounds = this.container.getBoundingClientRect(); const grid = new Grid(); - grid.setArea({ x: 100, y: 100, w: 200, h: 200, type: ENTITIES.HAZARD }, container); - grid.setArea({ x: 600, y: 200, w: 200, h: 200, type: ENTITIES.HAZARD }, container); + for (let i = 0; i < 2; i++) { + const w = Random.num(50, 200); + const h = Random.num(50, 200); + + grid.setArea({ + x: Random.num(0, bounds.width - w), + y: Random.num(0, bounds.height - h), + w, + h, + type: ENTITIES.HAZARD + }, this.container); + } return grid; } diff --git a/js/animation2b.js b/js/animation2b.js index 8d7f0f2..fffeea4 100644 --- a/js/animation2b.js +++ b/js/animation2b.js @@ -2,6 +2,7 @@ import Rx, { Observable } from 'rxjs'; import Particle from './particle'; import Grid from './grid'; import Controls from './controls'; +import Random from './random'; import { CONTROLS, ENTITIES } from './enums'; function Animation2b() { @@ -70,8 +71,18 @@ Animation2b.prototype.updateSpeed = function(value) { function createGlobalGrid(container, bounds) { const grid = new Grid(); - grid.setArea({ x: 100, y: 100, w: 200, h: 200, type: ENTITIES.HAZARD }, container); - grid.setArea({ x: 600, y: 200, w: 200, h: 200, type: ENTITIES.HAZARD }, container); + for (let i = 0; i < 2; i++) { + const w = Random.num(50, 200); + const h = Random.num(50, 200); + + grid.setArea({ + x: Random.num(0, bounds.width - w), + y: Random.num(0, bounds.height - h), + w, + h, + type: ENTITIES.HAZARD + }, this.container); + } return grid; } diff --git a/js/animation3a.js b/js/animation3a.js index ccbb4e1..cbe1b53 100644 --- a/js/animation3a.js +++ b/js/animation3a.js @@ -33,7 +33,6 @@ function Animation3a() { // TODO sort out particle nextframe // TODO ANIM1ab free movement - // TODO ANIM2ab randomize hazards // TODO ANIM3a streamline updateLeader // TODO ANIM3b separation diff --git a/js/bundle.js b/js/bundle.js index 85b00a3..a1b4b97 100644 --- a/js/bundle.js +++ b/js/bundle.js @@ -941,7 +941,7 @@ eval("var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\tr /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _rxjs = __webpack_require__(/*! rxjs */ 13);\n\nvar _rxjs2 = _interopRequireDefault(_rxjs);\n\nvar _particle = __webpack_require__(/*! ./particle */ 19);\n\nvar _particle2 = _interopRequireDefault(_particle);\n\nvar _grid = __webpack_require__(/*! ./grid */ 359);\n\nvar _grid2 = _interopRequireDefault(_grid);\n\nvar _controls = __webpack_require__(/*! ./controls */ 16);\n\nvar _controls2 = _interopRequireDefault(_controls);\n\nvar _enums = __webpack_require__(/*! ./enums */ 15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Animation2a() {\n this.options = {\n count: 3,\n maxCount: 10,\n showVisionGrid: true,\n speed: 4\n };\n\n this.container = document.getElementById('animation2a');\n this.particles = [];\n this.grid = createGlobalGrid(this.container, this.bounds);\n\n var controls = new _controls2.default(document.getElementById('controls2a'), this.options);\n\n controls.mount().subscribe(this.subscriber.bind(this));\n\n this.updateAnimating(this.options.animating);\n this.updateCount(this.options.count);\n};\n\nAnimation2a.prototype.subscriber = function (_ref) {\n var key = _ref.key,\n value = _ref.value;\n\n switch (key) {\n case _enums.CONTROLS.ANIMATING:\n this.updateAnimating(value);break;\n case _enums.CONTROLS.COUNT:\n this.updateCount(value);break;\n case _enums.CONTROLS.SPEED:\n this.updateSpeed(value);break;\n }\n};\n\nAnimation2a.prototype.nextFrame = function () {\n this.particles.forEach(function (p) {\n return p.nextFrame();\n });\n};\n\nAnimation2a.prototype.updateAnimating = function (isAnimating) {\n var _this = this;\n\n this.options.animating = isAnimating;\n\n if (isAnimating) {\n var fps$ = _rxjs2.default.Observable.interval(1000 / 32).takeWhile(function (_) {\n return _this.options.animating;\n });\n\n fps$.subscribe(this.nextFrame.bind(this));\n }\n};\n\nAnimation2a.prototype.updateCount = function (count) {\n var bounds = this.container.getBoundingClientRect();\n\n while (this.particles.length > count) {\n delete this.particles.pop().remove();\n }\n\n while (this.particles.length < count) {\n var p = new _particle2.default(this.container, bounds, this.options, this.grid);\n this.particles.push(p);\n }\n};\n\nAnimation2a.prototype.updateSpeed = function (value) {\n this.options.speed = value;\n this.particles.forEach(function (p) {\n return p.updateConfig({ speed: value });\n });\n};\n\nfunction createGlobalGrid(container, bounds) {\n var grid = new _grid2.default();\n\n grid.setArea({ x: 100, y: 100, w: 200, h: 200, type: _enums.ENTITIES.HAZARD }, container);\n grid.setArea({ x: 600, y: 200, w: 200, h: 200, type: _enums.ENTITIES.HAZARD }, container);\n\n return grid;\n}\n\nexports.default = Animation2a;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vanMvYW5pbWF0aW9uMmEuanM/YzJmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUngsIHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IFBhcnRpY2xlIGZyb20gJy4vcGFydGljbGUnO1xuaW1wb3J0IEdyaWQgZnJvbSAnLi9ncmlkJztcbmltcG9ydCBDb250cm9scyBmcm9tICcuL2NvbnRyb2xzJztcbmltcG9ydCB7IENPTlRST0xTLCBFTlRJVElFUyB9IGZyb20gJy4vZW51bXMnO1xuXG5mdW5jdGlvbiBBbmltYXRpb24yYSgpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgIGNvdW50OiAzLFxuICAgICAgICBtYXhDb3VudDogMTAsXG4gICAgICAgIHNob3dWaXNpb25HcmlkOiB0cnVlLFxuICAgICAgICBzcGVlZDogNFxuICAgIH07XG5cbiAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmltYXRpb24yYScpO1xuICAgIHRoaXMucGFydGljbGVzID0gW107XG4gICAgdGhpcy5ncmlkID0gY3JlYXRlR2xvYmFsR3JpZCh0aGlzLmNvbnRhaW5lciwgdGhpcy5ib3VuZHMpO1xuXG4gICAgY29uc3QgY29udHJvbHMgPSBuZXcgQ29udHJvbHMoXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sczJhJyksXG4gICAgICAgIHRoaXMub3B0aW9uc1xuICAgICk7XG5cbiAgICBjb250cm9scy5tb3VudCgpLnN1YnNjcmliZSh0aGlzLnN1YnNjcmliZXIuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLnVwZGF0ZUFuaW1hdGluZyh0aGlzLm9wdGlvbnMuYW5pbWF0aW5nKTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50KHRoaXMub3B0aW9ucy5jb3VudCk7XG59O1xuXG5BbmltYXRpb24yYS5wcm90b3R5cGUuc3Vic2NyaWJlciA9IGZ1bmN0aW9uKHsga2V5LCB2YWx1ZSB9KSB7XG4gICAgc3dpdGNoKGtleSkge1xuICAgICAgICBjYXNlIENPTlRST0xTLkFOSU1BVElORzogdGhpcy51cGRhdGVBbmltYXRpbmcodmFsdWUpOyBicmVhaztcbiAgICAgICAgY2FzZSBDT05UUk9MUy5DT1VOVDogdGhpcy51cGRhdGVDb3VudCh2YWx1ZSk7IGJyZWFrO1xuICAgICAgICBjYXNlIENPTlRST0xTLlNQRUVEOiB0aGlzLnVwZGF0ZVNwZWVkKHZhbHVlKTsgYnJlYWs7XG4gICAgfVxufVxuXG5BbmltYXRpb24yYS5wcm90b3R5cGUubmV4dEZyYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wYXJ0aWNsZXMuZm9yRWFjaChwID0+IHAubmV4dEZyYW1lKCkpO1xufVxuXG5BbmltYXRpb24yYS5wcm90b3R5cGUudXBkYXRlQW5pbWF0aW5nID0gZnVuY3Rpb24oaXNBbmltYXRpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnMuYW5pbWF0aW5nID0gaXNBbmltYXRpbmc7XG5cbiAgICBpZiAoaXNBbmltYXRpbmcpIHtcbiAgICAgICAgY29uc3QgZnBzJCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCAvIDMyKVxuICAgICAgICAgICAgLnRha2VXaGlsZShfID0+IHRoaXMub3B0aW9ucy5hbmltYXRpbmcpO1xuXG4gICAgICAgIGZwcyQuc3Vic2NyaWJlKHRoaXMubmV4dEZyYW1lLmJpbmQodGhpcykpO1xuICAgIH1cbn1cblxuQW5pbWF0aW9uMmEucHJvdG90eXBlLnVwZGF0ZUNvdW50ID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHdoaWxlICh0aGlzLnBhcnRpY2xlcy5sZW5ndGggPiBjb3VudCkge1xuICAgICAgICBkZWxldGUgdGhpcy5wYXJ0aWNsZXMucG9wKCkucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRoaXMucGFydGljbGVzLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUGFydGljbGUodGhpcy5jb250YWluZXIsIGJvdW5kcywgdGhpcy5vcHRpb25zLCB0aGlzLmdyaWQpO1xuICAgICAgICB0aGlzLnBhcnRpY2xlcy5wdXNoKHApO1xuICAgIH1cbn1cblxuQW5pbWF0aW9uMmEucHJvdG90eXBlLnVwZGF0ZVNwZWVkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLm9wdGlvbnMuc3BlZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnBhcnRpY2xlcy5mb3JFYWNoKHAgPT4gcC51cGRhdGVDb25maWcoeyBzcGVlZDogdmFsdWUgfSkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHbG9iYWxHcmlkKGNvbnRhaW5lciwgYm91bmRzKSB7XG4gICAgY29uc3QgZ3JpZCA9IG5ldyBHcmlkKCk7XG5cbiAgICBncmlkLnNldEFyZWEoeyB4OiAxMDAsIHk6IDEwMCwgdzogMjAwLCBoOiAyMDAsIHR5cGU6IEVOVElUSUVTLkhBWkFSRCB9LCBjb250YWluZXIpO1xuICAgIGdyaWQuc2V0QXJlYSh7IHg6IDYwMCwgeTogMjAwLCB3OiAyMDAsIGg6IDIwMCwgdHlwZTogRU5USVRJRVMuSEFaQVJEIH0sIGNvbnRhaW5lcik7XG5cbiAgICByZXR1cm4gZ3JpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uMmE7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8ganMvYW5pbWF0aW9uMmEuanMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _rxjs = __webpack_require__(/*! rxjs */ 13);\n\nvar _rxjs2 = _interopRequireDefault(_rxjs);\n\nvar _particle = __webpack_require__(/*! ./particle */ 19);\n\nvar _particle2 = _interopRequireDefault(_particle);\n\nvar _grid = __webpack_require__(/*! ./grid */ 359);\n\nvar _grid2 = _interopRequireDefault(_grid);\n\nvar _controls = __webpack_require__(/*! ./controls */ 16);\n\nvar _controls2 = _interopRequireDefault(_controls);\n\nvar _random = __webpack_require__(/*! ./random */ 361);\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _enums = __webpack_require__(/*! ./enums */ 15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Animation2a() {\n this.options = {\n count: 3,\n maxCount: 10,\n showVisionGrid: true,\n speed: 4\n };\n\n this.container = document.getElementById('animation2a');\n this.particles = [];\n this.grid = this.createGlobalGrid();\n\n var controls = new _controls2.default(document.getElementById('controls2a'), this.options);\n\n controls.mount().subscribe(this.subscriber.bind(this));\n\n this.updateAnimating(this.options.animating);\n this.updateCount(this.options.count);\n};\n\nAnimation2a.prototype.subscriber = function (_ref) {\n var key = _ref.key,\n value = _ref.value;\n\n switch (key) {\n case _enums.CONTROLS.ANIMATING:\n this.updateAnimating(value);break;\n case _enums.CONTROLS.COUNT:\n this.updateCount(value);break;\n case _enums.CONTROLS.SPEED:\n this.updateSpeed(value);break;\n }\n};\n\nAnimation2a.prototype.nextFrame = function () {\n this.particles.forEach(function (p) {\n return p.nextFrame();\n });\n};\n\nAnimation2a.prototype.updateAnimating = function (isAnimating) {\n var _this = this;\n\n this.options.animating = isAnimating;\n\n if (isAnimating) {\n var fps$ = _rxjs2.default.Observable.interval(1000 / 32).takeWhile(function (_) {\n return _this.options.animating;\n });\n\n fps$.subscribe(this.nextFrame.bind(this));\n }\n};\n\nAnimation2a.prototype.updateCount = function (count) {\n var bounds = this.container.getBoundingClientRect();\n\n while (this.particles.length > count) {\n delete this.particles.pop().remove();\n }\n\n while (this.particles.length < count) {\n var p = new _particle2.default(this.container, bounds, this.options, this.grid);\n this.particles.push(p);\n }\n};\n\nAnimation2a.prototype.updateSpeed = function (value) {\n this.options.speed = value;\n this.particles.forEach(function (p) {\n return p.updateConfig({ speed: value });\n });\n};\n\nAnimation2a.prototype.createGlobalGrid = function () {\n var bounds = this.container.getBoundingClientRect();\n var grid = new _grid2.default();\n\n for (var i = 0; i < 2; i++) {\n var w = _random2.default.num(50, 200);\n var h = _random2.default.num(50, 200);\n\n grid.setArea({\n x: _random2.default.num(0, bounds.width - w),\n y: _random2.default.num(0, bounds.height - h),\n w: w,\n h: h,\n type: _enums.ENTITIES.HAZARD\n }, this.container);\n }\n\n return grid;\n};\n\nexports.default = Animation2a;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vanMvYW5pbWF0aW9uMmEuanM/YzJmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUngsIHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IFBhcnRpY2xlIGZyb20gJy4vcGFydGljbGUnO1xuaW1wb3J0IEdyaWQgZnJvbSAnLi9ncmlkJztcbmltcG9ydCBDb250cm9scyBmcm9tICcuL2NvbnRyb2xzJztcbmltcG9ydCBSYW5kb20gZnJvbSAnLi9yYW5kb20nO1xuaW1wb3J0IHsgQ09OVFJPTFMsIEVOVElUSUVTIH0gZnJvbSAnLi9lbnVtcyc7XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbjJhKCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgY291bnQ6IDMsXG4gICAgICAgIG1heENvdW50OiAxMCxcbiAgICAgICAgc2hvd1Zpc2lvbkdyaWQ6IHRydWUsXG4gICAgICAgIHNwZWVkOiA0XG4gICAgfTtcblxuICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuaW1hdGlvbjJhJyk7XG4gICAgdGhpcy5wYXJ0aWNsZXMgPSBbXTtcbiAgICB0aGlzLmdyaWQgPSB0aGlzLmNyZWF0ZUdsb2JhbEdyaWQoKTtcblxuICAgIGNvbnN0IGNvbnRyb2xzID0gbmV3IENvbnRyb2xzKFxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJvbHMyYScpLFxuICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICApO1xuXG4gICAgY29udHJvbHMubW91bnQoKS5zdWJzY3JpYmUodGhpcy5zdWJzY3JpYmVyLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy51cGRhdGVBbmltYXRpbmcodGhpcy5vcHRpb25zLmFuaW1hdGluZyk7XG4gICAgdGhpcy51cGRhdGVDb3VudCh0aGlzLm9wdGlvbnMuY291bnQpO1xufTtcblxuQW5pbWF0aW9uMmEucHJvdG90eXBlLnN1YnNjcmliZXIgPSBmdW5jdGlvbih7IGtleSwgdmFsdWUgfSkge1xuICAgIHN3aXRjaChrZXkpIHtcbiAgICAgICAgY2FzZSBDT05UUk9MUy5BTklNQVRJTkc6IHRoaXMudXBkYXRlQW5pbWF0aW5nKHZhbHVlKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgQ09OVFJPTFMuQ09VTlQ6IHRoaXMudXBkYXRlQ291bnQodmFsdWUpOyBicmVhaztcbiAgICAgICAgY2FzZSBDT05UUk9MUy5TUEVFRDogdGhpcy51cGRhdGVTcGVlZCh2YWx1ZSk7IGJyZWFrO1xuICAgIH1cbn1cblxuQW5pbWF0aW9uMmEucHJvdG90eXBlLm5leHRGcmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucGFydGljbGVzLmZvckVhY2gocCA9PiBwLm5leHRGcmFtZSgpKTtcbn1cblxuQW5pbWF0aW9uMmEucHJvdG90eXBlLnVwZGF0ZUFuaW1hdGluZyA9IGZ1bmN0aW9uKGlzQW5pbWF0aW5nKSB7XG4gICAgdGhpcy5vcHRpb25zLmFuaW1hdGluZyA9IGlzQW5pbWF0aW5nO1xuXG4gICAgaWYgKGlzQW5pbWF0aW5nKSB7XG4gICAgICAgIGNvbnN0IGZwcyQgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDAgLyAzMilcbiAgICAgICAgICAgIC50YWtlV2hpbGUoXyA9PiB0aGlzLm9wdGlvbnMuYW5pbWF0aW5nKTtcblxuICAgICAgICBmcHMkLnN1YnNjcmliZSh0aGlzLm5leHRGcmFtZS5iaW5kKHRoaXMpKTtcbiAgICB9XG59XG5cbkFuaW1hdGlvbjJhLnByb3RvdHlwZS51cGRhdGVDb3VudCA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB3aGlsZSAodGhpcy5wYXJ0aWNsZXMubGVuZ3RoID4gY291bnQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucGFydGljbGVzLnBvcCgpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHdoaWxlICh0aGlzLnBhcnRpY2xlcy5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICBjb25zdCBwID0gbmV3IFBhcnRpY2xlKHRoaXMuY29udGFpbmVyLCBib3VuZHMsIHRoaXMub3B0aW9ucywgdGhpcy5ncmlkKTtcbiAgICAgICAgdGhpcy5wYXJ0aWNsZXMucHVzaChwKTtcbiAgICB9XG59XG5cbkFuaW1hdGlvbjJhLnByb3RvdHlwZS51cGRhdGVTcGVlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gdmFsdWU7XG4gICAgdGhpcy5wYXJ0aWNsZXMuZm9yRWFjaChwID0+IHAudXBkYXRlQ29uZmlnKHsgc3BlZWQ6IHZhbHVlIH0pKTtcbn1cblxuQW5pbWF0aW9uMmEucHJvdG90eXBlLmNyZWF0ZUdsb2JhbEdyaWQgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBncmlkID0gbmV3IEdyaWQoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHcgPSBSYW5kb20ubnVtKDUwLCAyMDApO1xuICAgICAgICBjb25zdCBoID0gUmFuZG9tLm51bSg1MCwgMjAwKTtcblxuICAgICAgICBncmlkLnNldEFyZWEoe1xuICAgICAgICAgICAgeDogUmFuZG9tLm51bSgwLCBib3VuZHMud2lkdGggLSB3KSxcbiAgICAgICAgICAgIHk6IFJhbmRvbS5udW0oMCwgYm91bmRzLmhlaWdodCAtIGgpLFxuICAgICAgICAgICAgdyxcbiAgICAgICAgICAgIGgsXG4gICAgICAgICAgICB0eXBlOiBFTlRJVElFUy5IQVpBUkRcbiAgICAgICAgfSwgdGhpcy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBncmlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb24yYTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBqcy9hbmltYXRpb24yYS5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQUE7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); /***/ }), /* 76 */ @@ -953,7 +953,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n}); /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _rxjs = __webpack_require__(/*! rxjs */ 13);\n\nvar _rxjs2 = _interopRequireDefault(_rxjs);\n\nvar _particle = __webpack_require__(/*! ./particle */ 19);\n\nvar _particle2 = _interopRequireDefault(_particle);\n\nvar _grid = __webpack_require__(/*! ./grid */ 359);\n\nvar _grid2 = _interopRequireDefault(_grid);\n\nvar _controls = __webpack_require__(/*! ./controls */ 16);\n\nvar _controls2 = _interopRequireDefault(_controls);\n\nvar _enums = __webpack_require__(/*! ./enums */ 15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Animation2b() {\n this.options = {\n count: 1,\n maxCount: 1000,\n speed: 4\n };\n\n this.container = document.getElementById('animation2b');\n this.particles = [];\n this.grid = createGlobalGrid(this.container, this.bounds);\n\n var controls = new _controls2.default(document.getElementById('controls2b'), this.options);\n\n controls.mount().subscribe(this.subscriber.bind(this));\n\n this.updateAnimating(this.options.animating);\n this.updateCount(this.options.count);\n};\n\nAnimation2b.prototype.subscriber = function (_ref) {\n var key = _ref.key,\n value = _ref.value;\n\n switch (key) {\n case _enums.CONTROLS.ANIMATING:\n this.updateAnimating(value);break;\n case _enums.CONTROLS.COUNT:\n this.updateCount(value);break;\n case _enums.CONTROLS.SPEED:\n this.updateSpeed(value);break;\n }\n};\n\nAnimation2b.prototype.nextFrame = function () {\n this.particles.forEach(function (p) {\n return p.nextFrame();\n });\n};\n\nAnimation2b.prototype.updateAnimating = function (isAnimating) {\n var _this = this;\n\n this.options.animating = isAnimating;\n\n if (isAnimating) {\n var fps$ = _rxjs2.default.Observable.interval(1000 / 32).takeWhile(function (_) {\n return _this.options.animating;\n });\n\n fps$.subscribe(this.nextFrame.bind(this));\n }\n};\n\nAnimation2b.prototype.updateCount = function (count) {\n var bounds = this.container.getBoundingClientRect();\n\n while (this.particles.length > count) {\n delete this.particles.pop().remove();\n }\n\n while (this.particles.length < count) {\n var p = new _particle2.default(this.container, bounds, this.options, this.grid);\n this.particles.push(p);\n }\n};\n\nAnimation2b.prototype.updateSpeed = function (value) {\n this.options.speed = value;\n this.particles.forEach(function (p) {\n return p.updateConfig({ speed: value });\n });\n};\n\nfunction createGlobalGrid(container, bounds) {\n var grid = new _grid2.default();\n\n grid.setArea({ x: 100, y: 100, w: 200, h: 200, type: _enums.ENTITIES.HAZARD }, container);\n grid.setArea({ x: 600, y: 200, w: 200, h: 200, type: _enums.ENTITIES.HAZARD }, container);\n\n return grid;\n}\n\nexports.default = Animation2b;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vanMvYW5pbWF0aW9uMmIuanM/NWYyMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUngsIHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IFBhcnRpY2xlIGZyb20gJy4vcGFydGljbGUnO1xuaW1wb3J0IEdyaWQgZnJvbSAnLi9ncmlkJztcbmltcG9ydCBDb250cm9scyBmcm9tICcuL2NvbnRyb2xzJztcbmltcG9ydCB7IENPTlRST0xTLCBFTlRJVElFUyB9IGZyb20gJy4vZW51bXMnO1xuXG5mdW5jdGlvbiBBbmltYXRpb24yYigpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgIGNvdW50OiAxLFxuICAgICAgICBtYXhDb3VudDogMTAwMCxcbiAgICAgICAgc3BlZWQ6IDRcbiAgICB9O1xuXG4gICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5pbWF0aW9uMmInKTtcbiAgICB0aGlzLnBhcnRpY2xlcyA9IFtdO1xuICAgIHRoaXMuZ3JpZCA9IGNyZWF0ZUdsb2JhbEdyaWQodGhpcy5jb250YWluZXIsIHRoaXMuYm91bmRzKTtcblxuICAgIGNvbnN0IGNvbnRyb2xzID0gbmV3IENvbnRyb2xzKFxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJvbHMyYicpLFxuICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICApO1xuXG4gICAgY29udHJvbHMubW91bnQoKS5zdWJzY3JpYmUodGhpcy5zdWJzY3JpYmVyLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy51cGRhdGVBbmltYXRpbmcodGhpcy5vcHRpb25zLmFuaW1hdGluZyk7XG4gICAgdGhpcy51cGRhdGVDb3VudCh0aGlzLm9wdGlvbnMuY291bnQpO1xufTtcblxuQW5pbWF0aW9uMmIucHJvdG90eXBlLnN1YnNjcmliZXIgPSBmdW5jdGlvbih7IGtleSwgdmFsdWUgfSkge1xuICAgIHN3aXRjaChrZXkpIHtcbiAgICAgICAgY2FzZSBDT05UUk9MUy5BTklNQVRJTkc6IHRoaXMudXBkYXRlQW5pbWF0aW5nKHZhbHVlKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgQ09OVFJPTFMuQ09VTlQ6IHRoaXMudXBkYXRlQ291bnQodmFsdWUpOyBicmVhaztcbiAgICAgICAgY2FzZSBDT05UUk9MUy5TUEVFRDogdGhpcy51cGRhdGVTcGVlZCh2YWx1ZSk7IGJyZWFrO1xuICAgIH1cbn1cblxuQW5pbWF0aW9uMmIucHJvdG90eXBlLm5leHRGcmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucGFydGljbGVzLmZvckVhY2gocCA9PiBwLm5leHRGcmFtZSgpKTtcbn1cblxuQW5pbWF0aW9uMmIucHJvdG90eXBlLnVwZGF0ZUFuaW1hdGluZyA9IGZ1bmN0aW9uKGlzQW5pbWF0aW5nKSB7XG4gICAgdGhpcy5vcHRpb25zLmFuaW1hdGluZyA9IGlzQW5pbWF0aW5nO1xuXG4gICAgaWYgKGlzQW5pbWF0aW5nKSB7XG4gICAgICAgIGNvbnN0IGZwcyQgPSBSeC5PYnNlcnZhYmxlLmludGVydmFsKDEwMDAgLyAzMilcbiAgICAgICAgICAgIC50YWtlV2hpbGUoXyA9PiB0aGlzLm9wdGlvbnMuYW5pbWF0aW5nKTtcblxuICAgICAgICBmcHMkLnN1YnNjcmliZSh0aGlzLm5leHRGcmFtZS5iaW5kKHRoaXMpKTtcbiAgICB9XG59XG5cbkFuaW1hdGlvbjJiLnByb3RvdHlwZS51cGRhdGVDb3VudCA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB3aGlsZSAodGhpcy5wYXJ0aWNsZXMubGVuZ3RoID4gY291bnQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucGFydGljbGVzLnBvcCgpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHdoaWxlICh0aGlzLnBhcnRpY2xlcy5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICBjb25zdCBwID0gbmV3IFBhcnRpY2xlKHRoaXMuY29udGFpbmVyLCBib3VuZHMsIHRoaXMub3B0aW9ucywgdGhpcy5ncmlkKTtcbiAgICAgICAgdGhpcy5wYXJ0aWNsZXMucHVzaChwKTtcbiAgICB9XG59XG5cbkFuaW1hdGlvbjJiLnByb3RvdHlwZS51cGRhdGVTcGVlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5vcHRpb25zLnNwZWVkID0gdmFsdWU7XG4gICAgdGhpcy5wYXJ0aWNsZXMuZm9yRWFjaChwID0+IHAudXBkYXRlQ29uZmlnKHsgc3BlZWQ6IHZhbHVlIH0pKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlR2xvYmFsR3JpZChjb250YWluZXIsIGJvdW5kcykge1xuICAgIGNvbnN0IGdyaWQgPSBuZXcgR3JpZCgpO1xuXG4gICAgZ3JpZC5zZXRBcmVhKHsgeDogMTAwLCB5OiAxMDAsIHc6IDIwMCwgaDogMjAwLCB0eXBlOiBFTlRJVElFUy5IQVpBUkQgfSwgY29udGFpbmVyKTtcbiAgICBncmlkLnNldEFyZWEoeyB4OiA2MDAsIHk6IDIwMCwgdzogMjAwLCBoOiAyMDAsIHR5cGU6IEVOVElUSUVTLkhBWkFSRCB9LCBjb250YWluZXIpO1xuXG4gICAgcmV0dXJuIGdyaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbjJiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGpzL2FuaW1hdGlvbjJiLmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFBQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _rxjs = __webpack_require__(/*! rxjs */ 13);\n\nvar _rxjs2 = _interopRequireDefault(_rxjs);\n\nvar _particle = __webpack_require__(/*! ./particle */ 19);\n\nvar _particle2 = _interopRequireDefault(_particle);\n\nvar _grid = __webpack_require__(/*! ./grid */ 359);\n\nvar _grid2 = _interopRequireDefault(_grid);\n\nvar _controls = __webpack_require__(/*! ./controls */ 16);\n\nvar _controls2 = _interopRequireDefault(_controls);\n\nvar _random = __webpack_require__(/*! ./random */ 361);\n\nvar _random2 = _interopRequireDefault(_random);\n\nvar _enums = __webpack_require__(/*! ./enums */ 15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Animation2b() {\n this.options = {\n count: 1,\n maxCount: 1000,\n speed: 4\n };\n\n this.container = document.getElementById('animation2b');\n this.particles = [];\n this.grid = createGlobalGrid(this.container, this.bounds);\n\n var controls = new _controls2.default(document.getElementById('controls2b'), this.options);\n\n controls.mount().subscribe(this.subscriber.bind(this));\n\n this.updateAnimating(this.options.animating);\n this.updateCount(this.options.count);\n};\n\nAnimation2b.prototype.subscriber = function (_ref) {\n var key = _ref.key,\n value = _ref.value;\n\n switch (key) {\n case _enums.CONTROLS.ANIMATING:\n this.updateAnimating(value);break;\n case _enums.CONTROLS.COUNT:\n this.updateCount(value);break;\n case _enums.CONTROLS.SPEED:\n this.updateSpeed(value);break;\n }\n};\n\nAnimation2b.prototype.nextFrame = function () {\n this.particles.forEach(function (p) {\n return p.nextFrame();\n });\n};\n\nAnimation2b.prototype.updateAnimating = function (isAnimating) {\n var _this = this;\n\n this.options.animating = isAnimating;\n\n if (isAnimating) {\n var fps$ = _rxjs2.default.Observable.interval(1000 / 32).takeWhile(function (_) {\n return _this.options.animating;\n });\n\n fps$.subscribe(this.nextFrame.bind(this));\n }\n};\n\nAnimation2b.prototype.updateCount = function (count) {\n var bounds = this.container.getBoundingClientRect();\n\n while (this.particles.length > count) {\n delete this.particles.pop().remove();\n }\n\n while (this.particles.length < count) {\n var p = new _particle2.default(this.container, bounds, this.options, this.grid);\n this.particles.push(p);\n }\n};\n\nAnimation2b.prototype.updateSpeed = function (value) {\n this.options.speed = value;\n this.particles.forEach(function (p) {\n return p.updateConfig({ speed: value });\n });\n};\n\nfunction createGlobalGrid(container, bounds) {\n var grid = new _grid2.default();\n\n for (var i = 0; i < 2; i++) {\n var w = _random2.default.num(50, 200);\n var h = _random2.default.num(50, 200);\n\n grid.setArea({\n x: _random2.default.num(0, bounds.width - w),\n y: _random2.default.num(0, bounds.height - h),\n w: w,\n h: h,\n type: _enums.ENTITIES.HAZARD\n }, this.container);\n }\n\n return grid;\n}\n\nexports.default = Animation2b;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vanMvYW5pbWF0aW9uMmIuanM/NWYyMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUngsIHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IFBhcnRpY2xlIGZyb20gJy4vcGFydGljbGUnO1xuaW1wb3J0IEdyaWQgZnJvbSAnLi9ncmlkJztcbmltcG9ydCBDb250cm9scyBmcm9tICcuL2NvbnRyb2xzJztcbmltcG9ydCBSYW5kb20gZnJvbSAnLi9yYW5kb20nO1xuaW1wb3J0IHsgQ09OVFJPTFMsIEVOVElUSUVTIH0gZnJvbSAnLi9lbnVtcyc7XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbjJiKCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgY291bnQ6IDEsXG4gICAgICAgIG1heENvdW50OiAxMDAwLFxuICAgICAgICBzcGVlZDogNFxuICAgIH07XG5cbiAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmltYXRpb24yYicpO1xuICAgIHRoaXMucGFydGljbGVzID0gW107XG4gICAgdGhpcy5ncmlkID0gY3JlYXRlR2xvYmFsR3JpZCh0aGlzLmNvbnRhaW5lciwgdGhpcy5ib3VuZHMpO1xuXG4gICAgY29uc3QgY29udHJvbHMgPSBuZXcgQ29udHJvbHMoXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sczJiJyksXG4gICAgICAgIHRoaXMub3B0aW9uc1xuICAgICk7XG5cbiAgICBjb250cm9scy5tb3VudCgpLnN1YnNjcmliZSh0aGlzLnN1YnNjcmliZXIuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLnVwZGF0ZUFuaW1hdGluZyh0aGlzLm9wdGlvbnMuYW5pbWF0aW5nKTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50KHRoaXMub3B0aW9ucy5jb3VudCk7XG59O1xuXG5BbmltYXRpb24yYi5wcm90b3R5cGUuc3Vic2NyaWJlciA9IGZ1bmN0aW9uKHsga2V5LCB2YWx1ZSB9KSB7XG4gICAgc3dpdGNoKGtleSkge1xuICAgICAgICBjYXNlIENPTlRST0xTLkFOSU1BVElORzogdGhpcy51cGRhdGVBbmltYXRpbmcodmFsdWUpOyBicmVhaztcbiAgICAgICAgY2FzZSBDT05UUk9MUy5DT1VOVDogdGhpcy51cGRhdGVDb3VudCh2YWx1ZSk7IGJyZWFrO1xuICAgICAgICBjYXNlIENPTlRST0xTLlNQRUVEOiB0aGlzLnVwZGF0ZVNwZWVkKHZhbHVlKTsgYnJlYWs7XG4gICAgfVxufVxuXG5BbmltYXRpb24yYi5wcm90b3R5cGUubmV4dEZyYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wYXJ0aWNsZXMuZm9yRWFjaChwID0+IHAubmV4dEZyYW1lKCkpO1xufVxuXG5BbmltYXRpb24yYi5wcm90b3R5cGUudXBkYXRlQW5pbWF0aW5nID0gZnVuY3Rpb24oaXNBbmltYXRpbmcpIHtcbiAgICB0aGlzLm9wdGlvbnMuYW5pbWF0aW5nID0gaXNBbmltYXRpbmc7XG5cbiAgICBpZiAoaXNBbmltYXRpbmcpIHtcbiAgICAgICAgY29uc3QgZnBzJCA9IFJ4Lk9ic2VydmFibGUuaW50ZXJ2YWwoMTAwMCAvIDMyKVxuICAgICAgICAgICAgLnRha2VXaGlsZShfID0+IHRoaXMub3B0aW9ucy5hbmltYXRpbmcpO1xuXG4gICAgICAgIGZwcyQuc3Vic2NyaWJlKHRoaXMubmV4dEZyYW1lLmJpbmQodGhpcykpO1xuICAgIH1cbn1cblxuQW5pbWF0aW9uMmIucHJvdG90eXBlLnVwZGF0ZUNvdW50ID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHdoaWxlICh0aGlzLnBhcnRpY2xlcy5sZW5ndGggPiBjb3VudCkge1xuICAgICAgICBkZWxldGUgdGhpcy5wYXJ0aWNsZXMucG9wKCkucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRoaXMucGFydGljbGVzLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHAgPSBuZXcgUGFydGljbGUodGhpcy5jb250YWluZXIsIGJvdW5kcywgdGhpcy5vcHRpb25zLCB0aGlzLmdyaWQpO1xuICAgICAgICB0aGlzLnBhcnRpY2xlcy5wdXNoKHApO1xuICAgIH1cbn1cblxuQW5pbWF0aW9uMmIucHJvdG90eXBlLnVwZGF0ZVNwZWVkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLm9wdGlvbnMuc3BlZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnBhcnRpY2xlcy5mb3JFYWNoKHAgPT4gcC51cGRhdGVDb25maWcoeyBzcGVlZDogdmFsdWUgfSkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVHbG9iYWxHcmlkKGNvbnRhaW5lciwgYm91bmRzKSB7XG4gICAgY29uc3QgZ3JpZCA9IG5ldyBHcmlkKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICBjb25zdCB3ID0gUmFuZG9tLm51bSg1MCwgMjAwKTtcbiAgICAgICAgY29uc3QgaCA9IFJhbmRvbS5udW0oNTAsIDIwMCk7XG5cbiAgICAgICAgZ3JpZC5zZXRBcmVhKHtcbiAgICAgICAgICAgIHg6IFJhbmRvbS5udW0oMCwgYm91bmRzLndpZHRoIC0gdyksXG4gICAgICAgICAgICB5OiBSYW5kb20ubnVtKDAsIGJvdW5kcy5oZWlnaHQgLSBoKSxcbiAgICAgICAgICAgIHcsXG4gICAgICAgICAgICBoLFxuICAgICAgICAgICAgdHlwZTogRU5USVRJRVMuSEFaQVJEXG4gICAgICAgIH0sIHRoaXMuY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uMmI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8ganMvYW5pbWF0aW9uMmIuanMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUFBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ=="); /***/ }), /* 77 */,