@tdurtschi/bug
Version:
Bug is a simulation that models a weevil walking around in an HTML canvas.
119 lines • 5.1 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GameEngine = void 0;
var entity_updater_1 = __importDefault(require("./entity-updater"));
var wall_1 = __importDefault(require("./entities/wall/wall"));
var id_generator_1 = require("./util/id-generator");
var victor_1 = __importDefault(require("victor"));
var bug_1 = __importDefault(require("./entities/bug/bug"));
var bugSerializer = __importStar(require("./entities/bug/bugSerializer"));
var plantFactory_1 = __importDefault(require("./entities/plant/plantFactory"));
var bugFactory_1 = __importDefault(require("./entities/bug/bugFactory"));
var GameEngine = (function () {
function GameEngine(args) {
var _this = this;
this.isPaused = false;
this.frame = 0;
this.update = function () {
if (!_this.isPaused) {
_this.entityUpdater.update();
}
};
this.gameUI = args.gameUI;
this.entityManager = args.entityManager;
this.height = args.height;
this.width = args.width;
this.plantFactory = new plantFactory_1.default(id_generator_1.generateId, this.width);
this.bugFactory = new bugFactory_1.default(id_generator_1.generateId, this.width);
this.entityUpdater = new entity_updater_1.default(args.entityManager);
this.createInitialGameState(args.initialState);
}
GameEngine.prototype.start = function () {
this.updateHandle = setInterval(this.update, calculateUpdatePeriodMs(100));
this.gameUI.start();
};
GameEngine.prototype.addBug = function (initialState) {
this.entityManager.addEntity(this.bugFactory.build(initialState));
};
GameEngine.prototype.addPlant = function (initialState) {
this.entityManager.addEntity(this.plantFactory.build(initialState));
};
GameEngine.prototype.getEntities = function () {
return this.entityManager.getEntities();
};
GameEngine.prototype.togglePause = function () {
this.isPaused = !this.isPaused;
this.gameUI.togglePause();
if (this.isPaused && window.DEBUG) {
console.log(this.entityManager.getEntities());
}
};
GameEngine.prototype.setSpeed = function (speed) {
clearInterval(this.updateHandle);
this.updateHandle = setInterval(this.update, calculateUpdatePeriodMs(speed));
};
GameEngine.prototype.createInitialGameState = function (initialState) {
var _this = this;
if (initialState !== undefined) {
var entities = rehydrateEntitiesFromString(initialState);
entities.forEach(function (entity) {
console.log(entity);
_this.entityManager.addEntity(entity);
});
}
else {
this.entityManager.addEntity(new wall_1.default(id_generator_1.generateId(), {
pos: new victor_1.default(-10, 0),
size: new victor_1.default(10, this.height),
}));
this.entityManager.addEntity(new wall_1.default(id_generator_1.generateId(), {
pos: new victor_1.default(this.width, 0),
size: new victor_1.default(10, this.height),
}));
}
};
GameEngine.prototype.exportCurrentState = function () {
var entities = this.entityManager.getEntities();
var entityData = entities
.filter(function (entity) { return entity instanceof bug_1.default; })
.map(function (bug) { return bugSerializer.toJson(bug); });
return JSON.stringify(entityData);
};
;
return GameEngine;
}());
exports.GameEngine = GameEngine;
function rehydrateEntitiesFromString(state) {
var entityData = JSON.parse(state);
var entities = entityData
.map(function (entity) { return bugSerializer.fromJson(entity); });
return entities;
}
function calculateUpdatePeriodMs(gameSpeed) {
var framesPerSecond = gameSpeed * 6 / 10;
var updatePeriod = Math.ceil(1000 / framesPerSecond);
return updatePeriod;
}
//# sourceMappingURL=game-engine.js.map