UNPKG

3.57 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', {
4 value: true
5});
6
7var _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; }; })();
8
9function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
10
11function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
12
13var _LevelLoader = require('./LevelLoader');
14
15var _LevelLoader2 = _interopRequireDefault(_LevelLoader);
16
17var _Logger = require('./Logger');
18
19var _Logger2 = _interopRequireDefault(_Logger);
20
21var _constantsEventTypes = require('./constants/eventTypes');
22
23var Level = (function () {
24 function Level() {
25 _classCallCheck(this, Level);
26
27 this._warrior = null;
28 this._floor = null;
29 this._timeBonus = 0;
30 }
31
32 _createClass(Level, [{
33 key: 'loadLevel',
34 value: function loadLevel(config, warrior) {
35 new _LevelLoader2['default'](this).load(config, warrior);
36 }
37 }, {
38 key: 'loadPlayer',
39 value: function loadPlayer() {
40 this.warrior.loadPlayer();
41 }
42 }, {
43 key: 'play',
44 value: function play(turns) {
45 var _this = this;
46
47 for (var n = 0; n < turns; n++) {
48 if (this._passed() || this._failed()) break;
49
50 _Logger2['default'].log(_constantsEventTypes.TURN_CHANGED, { turn: n + 1 });
51
52 this.floor.units.forEach(function (unit) {
53 return unit.prepareTurn();
54 });
55 this.floor.units.forEach(function (unit) {
56 // eslint-disable-line no-loop-func
57 unit.performTurn();
58
59 var floor = _this.floor.toViewObject();
60 _Logger2['default'].log(_constantsEventTypes.FLOOR_CHANGED, { floor: floor });
61 });
62
63 if (this.timeBonus) this.timeBonus -= 1;
64 }
65
66 var events = _Logger2['default'].events;
67 _Logger2['default'].clear();
68
69 return {
70 events: events,
71 passed: this._passed(),
72 score: {
73 level: this.warrior.score,
74 timeBonus: this.timeBonus,
75 clearBonus: this.clearBonus
76 }
77 };
78 }
79 }, {
80 key: '_passed',
81 value: function _passed() {
82 return this.floor.stairsSpace.isWarrior();
83 }
84 }, {
85 key: '_failed',
86 value: function _failed() {
87 return !this.floor.units.includes(this.warrior);
88 }
89 }, {
90 key: 'warrior',
91 get: function get() {
92 return this._warrior;
93 },
94 set: function set(warrior) {
95 this._warrior = warrior;
96 }
97 }, {
98 key: 'floor',
99 get: function get() {
100 return this._floor;
101 },
102 set: function set(floor) {
103 this._floor = floor;
104 }
105 }, {
106 key: 'timeBonus',
107 get: function get() {
108 return this._timeBonus;
109 },
110 set: function set(timeBonus) {
111 this._timeBonus = timeBonus;
112 }
113 }, {
114 key: 'clearBonus',
115 get: function get() {
116 return !this.floor.otherUnits.length ? Math.round((this.warrior.score + this.timeBonus) * 0.2) : 0;
117 }
118 }]);
119
120 return Level;
121})();
122
123exports['default'] = Level;
124module.exports = exports['default'];
\No newline at end of file