furry-ecs
v1.2.3
Published
Furry ECS is a TypeScript Entity-component-system library
Downloads
628
Readme
Furry ECS
Furry ECS is a TypeScript Entity-component-system library
Install
npm
npm install furry-ecs
or
npm install https://github.com/jhondesignee/furry-ecs
yarn
yarn add furry-ecs
or
yarn add https://github.com/jhondesignee/furry-ecs
Example
import ECS, { Constants } from "furry-ecs"
const world = ECS.createWorld()
const entity1 = ECS.createEntity()
const entity2 = ECS.createEntity()
const component1 = ECS.defineComponent({
foo: Constants.ComponentType.NUMBER,
bar: Constants.ComponentType.ARRAY
})
const component2 = ECS.defineComponent({
baz: Constants.ComponentType.ARRAY
})
component1.setProp("foo", entity1.EID, 0)
component2.setProp("baz", entity2.EID, [0, 1])
const prop = component1.getProp("foo", entity1.EID)
const serializer = ECS.defineSerializer<typeof world>()
const serialized = serializer.serialize(world)
if (serialized) {
const deserialized = serializer.deserialize(serialized)
}
const query = ECS.defineQuery({
include: [component1],
exclude: [component2]
})
const system1 = ECS.defineSystem({
update(world, delta, time) {
const entities = query.exec(world)
const addedEntities = query.exec(world, Constants.Status.ADDED)
const removedEntities = query.exec(world, Constants.Status.REMOVED)
}
})
const system2 = ECS.defineSystem({
update(world, delta, time, args) {
let data: unknown = args?.[0]
if (typeof data === "number") {
data++
}
}
})
ECS.addEntity(world, [entity1, entity2])
ECS.addComponent(world, [component1, component2])
ECS.attachEntity([component1, component2], [entity1, entity2])
ECS.addSystem(world, [system1, system2])
// loop
const args = [0]
const delta = 0
const time = performance.now()
ECS.update(world, delta, time, ...args)
Documentation
Check out the API reference for more details of each member
See also a detailed tutorial for each feature