UNPKG

lr-core

Version:
62 lines (45 loc) 1.94 kB
'use strict'; 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;