tsssecs
v0.1.1
Published
TypeScript sparse-set ECS backed by typed arrays.
Maintainers
Readme
tsssecs
TypeScript sparse-set ECS backed by typed arrays.
Install
bun add tsssecsUsage
import { GenericWorld, SparseStore } from "tsssecs";
const enum Comp { Position, Velocity }
class World extends GenericWorld<Comp> {
constructor(capacity: number) {
super(capacity, 2);
this.stores[Comp.Position] = new SparseStore(capacity, Float32Array, 2);
this.stores[Comp.Velocity] = new SparseStore(capacity, Float32Array, 2);
}
}
const world = new World(10_000);
const e = world.createEntity();
world.addComponent(e, Comp.Position);
const pos = world.getStore<Float32Array>(Comp.Position);
pos.set(e, 1.0, 0); // x
pos.set(e, 2.0, 1); // yAPI
SparseStore<T>(capacity, ArrayType, stride = 1)
Sparse-set backed by a typed array.
add(entity)/remove(entity)/has(entity)get(entity, element = 0)/set(entity, value, element = 0)dense,sparse,count,data,stride
GenericWorld<C extends number>(capacity, maxComponents)
Abstract base. Subclass and populate this.stores[comp] with SparseStores.
createEntity()/destroyEntity(entity)addComponent(entity, comp)/removeComponent(entity, comp)getStore<T>(comp): SparseStore<T>saveToIndexedDB(slotId, dbName)/loadFromIndexedDB(slotId, dbName): Promise<boolean>
Persistence uses idb (browser only).
