furry-ecs
v1.4.3
Published
Furry ECS is a TypeScript Entity-component-system library
Downloads
646
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
Usage
ES Module
import ECS from "furry-ecs"
CommonJS
const ECS = require("furry-ecs")
Browser
<script src="https://unpkg.com/[email protected]/dist/index.min.js"></script> <script> const ECS = FurryECS </script>
Example
const world = ECS.createWorld()
const entity1 = ECS.createEntity()
const entity2 = ECS.createEntity()
const component1 = ECS.defineComponent({
foo: ECS.Constants.ComponentType.NUMBER,
bar: ECS.Constants.ComponentType.ARRAY
})
const component2 = ECS.defineComponent({
baz: ECS.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, ECS.Constants.Status.ADDED)
const removedEntities = query.exec(world, ECS.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