Skip to content

khrome/marker-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

marker-engine

markers on layered perlin mesh

An ESM marker interface for keeping marker calculations out of your render thread and handling game-world state

Structure

  • Marker - An object which is positioned on the Mesh (Entities, Scenery or Projectiles)
  • Entity - An object which is mobile on the mesh from it's own effort
  • Avatar - An entity which represents a player
  • Projectile - An object moving from forces applied to it
  • Scenery - A primarily stationary object
  • Mesh - The walkable ground all markers are attached to
  • Submesh - A subsection of the mesh which can load in and out of memory

Usage

const engine = new MarkerEngine({
    // the mesh voxel generation algorithm for the groundlayer
    voxelFile: '/mesh-voxel-generator.mjs'
});
// marker may be extended to override the default .model() and .body()
const marker = new Marker({
    id : 'foo',
    position: {
        x: 0,
        y: 0,
        z: 0
    }
});
engine.addMarker(marker);
// track this marker as the center of the treadmill
engine.on('state', ()=>{
    // data.markers contain marker updates
    // use position + quaternion to update the viz
});
engine.on('add-markers', (markers)=>{
    // markers were found when loading a submesh
});
engine.on('submesh', (submesh)=>{
    // submesh is a new submesh
    // compute mesh from voxels and add to viz
});
engine.on('remove-submesh', (submesh)=>{
    // remove this submesh from the viz
});
engine.on('remove-markers', (markers)=>{
    // markers is a list of markers to remove from the viz
});
// add an action to the marker action queue
marker.action('moveTo', {}, {x: 10, y: 10, z: 0});
// start the simulation
engine.start();

The voxel generation file looks like:

export const voxels = (x, y, depth)=>{
    const results = [];
    for(let lcv=0; lcv<256; lcv++){
        results.push(0);
    }
    return results;
};

Testing

Run the es module tests to test the root modules

npm run import-test

to run the same test inside the browser:

npm run browser-test

to run the same test headless in chrome:

npm run headless-browser-test

to run the same test inside docker:

npm run container-test

Run the commonjs tests against the /dist commonjs source (generated with the build-commonjs target).

npm run require-test

Development

All work is done in the .mjs files and will be transpiled on commit to commonjs and tested.

If the above tests pass, then attempt a commit which will generate .d.ts files alongside the src files and commonjs classes in dist

About

An ESM marker interface for keeping marker calculations out of your render thread and handling game-world state

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages