lr-core
Version:
Line Rider core library
62 lines (45 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _riderData = require('./rider-data');
var _riderData2 = _interopRequireDefault(_riderData);
var _states = require('./states');
var States = _interopRequireWildcard(_states);
var _constraints = require('./constraints');
var Constraints = _interopRequireWildcard(_constraints);
var _v = require('../v2');
var _v2 = _interopRequireDefault(_v);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function createConstraintFromJson(data, initialStateMap) {
return new Constraints[data.type](data, initialStateMap);
}
function createStateFromJson(data, init) {
return new States[data.type](data, init);
}
function averageVectors(vecs) {
return vecs.reduce((avg, v) => avg.add(v), (0, _v2.default)({ x: 0, y: 0 })).div(vecs.length);
}
class Rider {
constructor(riderBody = _riderData2.default) {
// TODO: validate riderBody
this.body = riderBody;
let initialStateMap = new Map(this.makeStateArray().map(state => [state.id, state]));
this.constraints = riderBody.constraints.map(data => createConstraintFromJson(data, initialStateMap));
}
makeStateArray(position, velocity) {
return this.body.states.map(stateData => createStateFromJson(stateData, { position, velocity }));
}
getBody(stateMap) {
let points = this.body.parts.BODY.map(id => stateMap.get(id));
return {
position: averageVectors(points.map(({ pos }) => pos)),
velocity: averageVectors(points.map(({ vel }) => vel)),
get(id) {
return stateMap.get(id);
}
};
}
}
exports.default = Rider;