lr-core
Version:
Line Rider core library
123 lines (101 loc) • 2.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immo = require('../immo');
var _lineEngine = require('../line-engine');
var _lineEngine2 = _interopRequireDefault(_lineEngine);
var _lineSpace = require('../line-space');
var _lineSpace2 = _interopRequireDefault(_lineSpace);
var _constants = require('./constants.js');
var _Rider = require('./Rider.js');
var _Rider2 = _interopRequireDefault(_Rider);
var _grids = require('./grids');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// @setupImmo
class LineRiderEngine extends _lineEngine2.default {
__props__() {
return {
iterations: _constants.ITERATE,
stepOptions: {
gravity: _constants.GRAVITY
},
rider: this.makeRider()
};
}
__state__() {
return {
start: {
position: _constants.DEFAULT_START_POSITION,
velocity: _constants.DEFAULT_START_VELOCITY
}
};
}
__computed__() {
return {
lineSpace: new _lineSpace2.default(({ p1: { x: x1, y: y1 }, p2: { x: x2, y: y2 } }) => [x1, y1, x2, y2])
};
}
/* public */
// getLastFrameIndex ()
// getLine (id)
// getMaxLineID ()
// addLine (line)
// removeLine (line)
constructor() {
super();
return this.setStart().setConstraints(this.rider.constraints);
}
setStart(position = _constants.DEFAULT_START_POSITION, velocity = _constants.DEFAULT_START_VELOCITY) {
return this.updateState({
start: {
position,
velocity
}
}).setInitialStates(this.rider.makeStateArray(position, velocity));
}
getRider(frameIndex) {
return this.rider.getBody(this.getStateMapAtFrame(frameIndex));
}
toJSON() {
// until List.toJS() gets implemented
this.linesList.__getBuffer();
return {
start: this.start,
lines: this.linesList.buffer.map(line => line.toJSON())
};
}
/* private */
_addLine(line) {
super._addLine(line);
this.lineSpace.addLine(line);
}
_removeLine(line) {
super._removeLine(line);
this.lineSpace.removeLine(line);
}
makeRider() {
return new _Rider2.default();
}
makeGrid(...args) {
return new _grids.ClassicGrid(...args);
}
selectLinesInBox(x0, y0, x1, y1) {
this.updateComputed();
return this.lineSpace.selectLinesInBox(x0, y0, x1, y1);
}
selectLinesInRadius(c, r) {
this.updateComputed();
return this.lineSpace.selectLinesInRadius(c, r);
}
selectClosestLineInRadius(c, r) {
this.updateComputed();
return this.lineSpace.selectClosestLineInRadius(c, r);
}
getBoundingBox() {
this.updateComputed();
return this.lineSpace.getBoundingBox();
}
}
exports.default = LineRiderEngine;
(0, _immo.setupImmo)(LineRiderEngine);