0.0.1 • Published 7 years ago
behaviours
Licence
MIT
Version
0.0.1
Deps
2
Size
17 kB
Vulns
0
Weekly
0
Declarative library for describing behaviours
Work in progress!
This library is functional, although experimental, and has some performance issues.
Installation
npm install behaviours
Example
1000 points repelling / attracting each other:
const Behaviours = require("behaviours");
const b = new Behaviours({ dimensions: 2 });
const simulationStep = b.compose(
b.repelOthers({
maxDistance: 0.001,
force: 0.002
}),
b.attractOthers({
minDistance: 0.001,
maxDistance: 0.003,
force: 0.001
}),
b.dampenVelocity({ dampening: 0.5 }),
b.addVelocity()
);
const points = Array.from({ length: 1000 }).map(() => ({
pos: [rand(-0.1, 0.1), rand(-0.1, 0.1)],
vel: [rand(-0.001, 0.001), rand(-0.001, 0.001)]
}));
const loop = () => {
simulationStep(points);
// draw points
requestAnimationFrame(loop);
}
loop();
API
Constructor
const b = new Behaviours(options) - creates new behaviours instance
options.dimensions:1,2,3- how many dimensions the simulation is working againstoptions.getPos- custom position getter (defaulto => o.pos)options.getVel- custom velocity getter (defaulto => o.vel)
Functions
b.addVelocity()- add velocity to position with each frameb.limitVelocity(options)- limit velocity of each pointoptions.limit- max velocity (default1.0)
b.repelOthers(options)- float away from other pointsoptions.minDistance- min distance for collision (default0.0)options.maxDistance- max distance for collision (default0.5)options.force- force of collision (default0.1)
b.repelPoint(options)- repel from a custom pointoptions.minDistance- min distance for collision (default0.0)options.maxDistance- max distance for collision (default0.5)options.force- force of collision (default0.1)options.position- position of repelling point (default[0, 0, 0])
b.attractOthers(options)- float towards other pointsoptions.minDistance- min distance for attraction (default0.0)options.maxDistance- max distance for attraction (default0.5)options.force- force of attraction (default0.1)
b.attractPoint(options)- attract from a custom pointoptions.minDistance- min distance for attraction (default0.0)options.maxDistance- max distance for attraction (default0.5)options.force- force of attraction (default0.1)options.position- position of attracting point (default[0, 0, 0])
b.collideOthers(options)- collide with other pointsoptions.minDistance- min distance for collision (default0.0)options.maxDistance- max distance for collision (default0.5)options.onCollision(p1, p2, points)- custom function to run on collision
b.nearestOther(options)- collide with other pointsoptions.minDistance- min distance for search (default0.0)options.maxDistance- max distance for search (default0.5)options.onFound(p1, p2, points)- custom function to run when nearest point is found
b.subset(options)- filter pointsoptions.condition(p)- condition for given pointoptions.conditionOthers- are subsequent operations compared against all other points, or all points matchingoptions.condition(defaultfalse)
b.compose(functions)- compose all given behaviour functions into single simulation step
Future work
- optimization (ECS architecture?)
- springs
- flow fields
Acknowledgments
This project was developed in part at Laboratory, an artist residency for interactive arts: https://laboratoryspokane.com.