Socket
Socket
Sign inDemoInstall

@afk/multiverse

Package Overview
Dependencies
0
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @afk/multiverse

Fast tracking and collision detection for large volumes of objects within an arbitrary number of dimensions


Version published
Weekly downloads
2
decreased by-50%
Maintainers
1
Install size
21.2 kB
Created
Weekly downloads
 

Readme

Source

@afk/multiverse

Fast tracking and collision detection for large volumes of objects within an arbitrary number of dimensions.

Basic Usage

import multiverse from '@afk/multiverse';

// 3d world
const world = multiverse(3);

const obj1 = { name: 'Taco' };
const obj2 = { name: 'Kujo' };

// insert objects to 3d space with size
// size is optional
// up to you where to store identifier
obj1.mv = world.insert(obj1, [1, 2, 3], [0.1, 0.2, 0.1]);
obj2.mv = world.insert(obj2, [2, 3, 1], [0.1, 0.2, 0.1]);

world.move(obj1.mv, [3, 2, 1]);

// calc distance in 3d space (taking into account size of objects)
const distance = world.distance(obj1.mv, obj2.mv);

// find nearest 1 object from obj1 position
const [[nearest, [nearestX, nearestY, nearestZ]] = world.nearest(obj1.mv, 1);

// or iterate through nearest... generally ordered, but optimized for speed over accuracy
let findings = [];
for (let o of world.nearestIter(obj1.mv)) {
  findings.push(o);
  if (findings.length > 10) break;
}

// find nearest 1 object from desired position
const [[find, [findX, findY, findZ]]] = world.find([5, 1, 1], 1);

// optionally provide a bounding zone (which in this example won't find a result)
const [nearestInZone] = world.find([5, 1, 1], 1, [1, 1, 1]);

// change bounding size after the fact
world.size(obj1.mv, [0.2, 0.2, 0.2]);

// information about the world
const { bounds, objects } = world.info();

// remove object
world.remove(obj2.mv);

// copy
const newWorld = world.clone();

// clean slate
world.reset();

Advanced Usage

// find intersecting objects if any within the bounds of the provided object
const [collidingObj] = world.intersect(obj1.mv, 1);

// similar to `find`, but with conditionals only the caller understands
world.filter([5, 1, 1], 1, o => o.name === 'Kujo');

// return serializable object for persistence and/or transfer over wire
const worldData = world.toJSON();

// create world from exported data
const restoredWorld = multiverse(worldData);

Keywords

FAQs

Last updated on 30 Jun 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc