metamaps--metamaps/frontend/src/Metamaps/Engine.js

46 lines
1.3 KiB
JavaScript
Raw Normal View History

2017-01-05 00:05:18 -05:00
import Matter, { World, Composite, Runner, Common, Body, Bodies, Events } from 'matter-js'
import $jit from '../patched/JIT'
import DataModel from './DataModel'
import Visualize from './Visualize'
const Engine = {
init: () => {
Engine.engine = Matter.Engine.create()
Events.on(Engine.engine, 'afterUpdate', Engine.callUpdate)
Engine.engine.world.gravity.scale = 0
},
run: init => {
if (init) DataModel.Mappings.each(Engine.addTopic)
Engine.runner = Matter.Runner.run(Engine.engine)
},
endActiveMap: () => {
Runner.stop(Engine.runner)
Matter.Engine.clear(Engine.engine)
},
setTopicPos: (id, x, y) => {
const body = Composite.get(Engine.engine.world, id, 'body')
Body.setPosition(body, { x, y })
},
addTopic: mapping => {
let body = Bodies.circle(mapping.get('xloc'), mapping.get('yloc'), 25)
body.topic_id = mapping.get('mappable_id')
DataModel.Topics.get(body.topic_id).get('node').setData('body_id', body.id)
World.addBody(Engine.engine.world, body)
},
removeTopic: mapping => {
},
callUpdate: () => {
Engine.engine.world.bodies.forEach(b => {
const node = DataModel.Topics.get(b.topic_id).get('node')
const newPos = new $jit.Complex(b.position.x, b.position.y)
node.setPos(newPos, 'current')
})
Visualize.mGraph.plot()
}
}
export default Engine