warriorjs-engine
Version:
The bowels of WarriorJS
134 lines (109 loc) • 3.68 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
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; }; })();
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 _LevelLoader = require('./LevelLoader');
var _LevelLoader2 = _interopRequireDefault(_LevelLoader);
var _Logger = require('./Logger');
var _Logger2 = _interopRequireDefault(_Logger);
var Level = (function () {
function Level() {
_classCallCheck(this, Level);
this._warrior = null;
this._floor = null;
this._timeBonus = 0;
}
_createClass(Level, [{
key: 'loadLevel',
value: function loadLevel(config, warrior) {
new _LevelLoader2['default'](this).load(config, warrior);
}
}, {
key: 'loadPlayer',
value: function loadPlayer() {
this.warrior.loadPlayer();
}
}, {
key: 'play',
value: function play(turns) {
var _this = this;
var initialFloor = this.floor.toViewObject();
var trace = [[{ floor: initialFloor, log: [] }]];
var _loop = function (n) {
if (_this._passed() || _this._failed()) return 'break';
var steps = [];
_this.floor.units.forEach(function (unit) {
return unit.prepareTurn();
});
_this.floor.units.forEach(function (unit) {
// eslint-disable-line no-loop-func
unit.performTurn();
var floor = _this.floor.toViewObject();
var log = _Logger2['default'].entries;
_Logger2['default'].clear();
steps.push({ floor: floor, log: log });
});
if (_this.timeBonus) _this.timeBonus -= 1;
trace.push(steps);
};
for (var n = 0; n < turns; n++) {
var _ret = _loop(n);
if (_ret === 'break') break;
}
return {
trace: trace,
passed: this._passed(),
points: {
levelScore: this.warrior.score,
timeBonus: this.timeBonus,
clearBonus: this.clearBonus
}
};
}
}, {
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;
}
}]);
return Level;
})();
exports['default'] = Level;
module.exports = exports['default'];