warriorjs-engine
Version:
The bowels of WarriorJS
140 lines (115 loc) • 3.83 kB
JavaScript
'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;