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 = ; const b = dimensions: 2 ; const simulationStep = b; const points = Array; const loop = { ; // draw points ;} ;
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.