UNPKG

@tdurtschi/bug

Version:

Bug is a simulation that models a weevil walking around in an HTML canvas.

49 lines 2.56 kB
"use strict"; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var bug_1 = __importDefault(require("./entities/bug/bug")); var plant_1 = __importDefault(require("./entities/plant/plant")); var EntityManager = (function () { function EntityManager(initialEntities) { var _this = this; if (initialEntities === void 0) { initialEntities = []; } this.entities = []; this.getEntities = function () { return _this.entities; }; this.addEntity = function (entity) { _this.entities.push(entity); if (entity instanceof bug_1.default) { entity.zIndexChanged.subscribe(_this.sortEntities()); } }; this.sortEntities = function () { return function () { var plants = _this.entities.filter(function (entity) { return entity instanceof plant_1.default; }).map(function (entity) { return [entity]; }); var climbingBugs = _this.entities.filter(function (entity) { return entity instanceof bug_1.default && entity.climbingOn; }); climbingBugs.forEach(function (bug) { var idx = plants.findIndex(function (plants) { return plants[0] === bug.climbingOn.plant; }); plants[idx].push(bug); }); var otherEntities = _this.entities.filter(function (entity) { return !(entity instanceof plant_1.default || entity instanceof bug_1.default && entity.climbingOn); }).map(function (entity) { return [entity]; }); _this.entities = _this.flatten(__spreadArrays(plants, otherEntities).sort(function (a, b) { return a[0].id - b[0].id; })); window.DEBUG && console.log(_this.entities); }; }; this.flatten = function (list) { return list.reduce(function (a, b) { return a.concat(Array.isArray(b) ? _this.flatten(b) : b); }, []); }; initialEntities.forEach(this.addEntity); } return EntityManager; }()); exports.default = EntityManager; //# sourceMappingURL=entity-manager.js.map