@tdurtschi/bug
Version:
Bug is a simulation that models a weevil walking around in an HTML canvas.
49 lines • 2.56 kB
JavaScript
;
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