UNPKG

warriorjs-engine

Version:
140 lines (115 loc) 3.83 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* eslint-disable no-loop-func */ var _lodash = require('lodash.isequal'); var _lodash2 = _interopRequireDefault(_lodash); var _LevelLoader = require('./LevelLoader'); var _LevelLoader2 = _interopRequireDefault(_LevelLoader); var _Logger = require('./Logger'); var _Logger2 = _interopRequireDefault(_Logger); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Level = function () { function Level() { _classCallCheck(this, Level); this._warrior = null; this._floor = null; this._timeBonus = 0; } _createClass(Level, [{ key: 'loadPlayer', value: function loadPlayer(playerCode) { this.warrior.loadPlayer(playerCode); } }, { key: 'play', value: function play(turns) { var _this = this; _Logger2.default.clear(); var initialFloor = this.floor.toViewObject(); _Logger2.default.playStarted(initialFloor); var lastFloor = initialFloor; for (var n = 0; n < turns; n++) { if (this._passed() || this._failed()) { break; } var turnNumber = n + 1; _Logger2.default.turnChanged(turnNumber); this.floor.units.forEach(function (unit) { return unit.prepareTurn(); }); this.floor.units.forEach(function (unit) { unit.performTurn(); var floor = _this.floor.toViewObject(); if (!(0, _lodash2.default)(lastFloor, floor)) { _Logger2.default.floorChanged(floor); } lastFloor = floor; }); if (this.timeBonus) { this.timeBonus -= 1; } } return { passed: this._passed(), score: { warrior: this.warrior.score, timeBonus: this.timeBonus, clearBonus: this.clearBonus }, events: _Logger2.default.events }; } }, { key: '_passed', value: function _passed() { return this.floor.stairsSpace.isWarrior(); } }, { key: '_failed', value: function _failed() { return !this.floor.units.includes(this.warrior); } }, { key: 'warrior', get: function get() { return this._warrior; }, set: function set(warrior) { this._warrior = warrior; } }, { key: 'floor', get: function get() { return this._floor; }, set: function set(floor) { this._floor = floor; } }, { key: 'timeBonus', get: function get() { return this._timeBonus; }, set: function set(timeBonus) { this._timeBonus = timeBonus; } }, { key: 'clearBonus', get: function get() { return !this.floor.otherUnits.length ? Math.round((this.warrior.score + this.timeBonus) * 0.2) : 0; } }], [{ key: 'load', value: function load(levelConfig) { var level = new Level(); new _LevelLoader2.default(level).load(levelConfig); return level; } }]); return Level; }(); exports.default = Level;