Skip to content

PeshoVurtoleta/lite-steer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@zakkster/lite-steer

npm version npm bundle size npm downloads npm total downloads TypeScript License: MIT

Zero-GC steering behaviors for autonomous agents. Boids, seek, flee, wander, path following, curl noise.

→ Live Recipes Gallery Demo → Live Recipes Gallery Demo vol.2

10,000 boids at 60fps. 6 scratchpad vectors. Zero garbage collection.

Why lite-steer?

Feature lite-steer Yuka p5.js steer Custom code
Zero-GC (scratchpad) Yes No No Manual
Float32Array (lite-vec) Yes No No Rare
Deterministic wander Yes (seeded RNG) No No No
Path following Yes (with lookahead) Yes No Manual
Curl noise Yes No No Manual
rotateAround orbit Yes (1-liner) No No 5+ lines
Bundle size < 3KB ~40KB ~800KB (full) 0

Installation

npm install @zakkster/lite-steer

Quick Start

import { vec2 } from '@zakkster/lite-vec';
import { seek, bounce } from '@zakkster/lite-steer';

const pos = vec2.create(100, 100);
const vel = vec2.create(0, 0);
const force = vec2.create();
const target = vec2.create(400, 300);

function update() {
    seek(force, pos, vel, target, 200, 0.1);
    vec2.add(vel, vel, force);
    vec2.add(pos, pos, vel);
    bounce(pos, vel, 800, 600);
}

Recipes

Firefly Swarm (Wander + Avoid Edges)

wanderAngle = wander(force, vel, 20, 0.4, wanderAngle, rng);
avoidEdges(force2, pos, 40, width, height, 0.5);

vec2.add(force, force, force2);
vec2.add(vel, vel, force);
vec2.scale(vel, vel, 0.95); // air friction
vec2.add(pos, pos, vel);

School of Fish (Boids)

separation(fSep, pos, neighbors, 30);
alignment(fAli, vel, neighbors);
cohesion(fCoh, pos, neighbors);

vec2.scale(fSep, fSep, 1.5);  // avoid crowding strongly
vec2.scale(fAli, fAli, 1.0);
vec2.scale(fCoh, fCoh, 1.2);  // stay with the group

vec2.add(force, fSep, fAli);
vec2.add(force, force, fCoh);

vec2.add(vel, vel, force);
vec2.clampMag(vel, vel, 0, MAX_SPEED);
vec2.add(pos, pos, vel);

Vortex Particles

swirlToward(force, pos, center, 40, 120);

vec2.add(vel, vel, force);
vec2.scale(vel, vel, 0.98); // drag for smooth spiraling
vec2.add(pos, pos, vel);

Smoke / Fluid (Curl Noise)

curl(force, pos[0], pos[1], noiseFn);
vec2.scale(force, force, 40);

vec2.add(vel, vel, force);
vec2.scale(vel, vel, 0.92); // heavy drag = thick smoke
vec2.add(pos, pos, vel);

Path-Following Drones

followPath(force, pos, vel, path, 120, 30);

vec2.add(vel, vel, force);
vec2.clampMag(vel, vel, 0, 150);
vec2.add(pos, pos, vel);

Butterfly Motion (Wander + Orbit)

wanderAngle = wander(force, vel, 10, 0.6, wanderAngle, rng);
vec2.add(vel, vel, force);
vec2.scale(vel, vel, 0.90);
vec2.add(pos, pos, vel);

orbit(pos, pos, center, 0.4, dt); // gentle orbit around flower

Flee Cursor (Interactive Art)

const mouse = vec2.create(mouseX, mouseY);
flee(force, pos, vel, mouse, 200, 150);

vec2.add(vel, vel, force);
vec2.scale(vel, vel, 0.96);
vec2.add(pos, pos, vel);

All 16 Functions

Individual: seek, arrive, flee, wander, followFlow Boids: separation, alignment, cohesion Boundaries: wrap, bounce, avoidEdges Orbital: orbit, swirlToward Noise: curl Path: projectToSegment, followPath

License

MIT

About

Zero-GC steering behaviors for autonomous agents. Boids, seek, flee, wander, path following, curl noise. Built on lite-vec.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors