UNPKG

noa-engine

Version:

Experimental voxel game engine

61 lines (43 loc) 1.63 kB
import vec3 from 'gl-vec3' export default function (noa) { return { name: 'mesh', order: 100, state: { mesh: null, offset: null }, onAdd: function (eid, state) { // implicitly assume there's already a position component var posDat = noa.ents.getPositionData(eid) if (state.mesh) { noa.rendering.addMeshToScene(state.mesh, false, posDat.position) } else { throw new Error('Mesh component added without a mesh - probably a bug!') } if (!state.offset) state.offset = vec3.create() // set mesh to correct position var rpos = posDat._renderPosition state.mesh.position.copyFromFloats( rpos[0] + state.offset[0], rpos[1] + state.offset[1], rpos[2] + state.offset[2]) }, onRemove: function (eid, state) { state.mesh.dispose() }, renderSystem: function (dt, states) { // before render move each mesh to its render position, // set by the physics engine or driving logic for (var i = 0; i < states.length; i++) { var state = states[i] var id = state.__id var rpos = noa.ents.getPositionData(id)._renderPosition state.mesh.position.copyFromFloats( rpos[0] + state.offset[0], rpos[1] + state.offset[1], rpos[2] + state.offset[2]) } } } }