1.4.3 • Published 9 months ago

furry-ecs v1.4.3

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

Furry ECS

NPM Version npm bundle size Codecov GitHub License

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/furry-ecs@1.4/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

1.4.3

9 months ago

1.4.2

9 months ago

1.4.1

9 months ago

1.4.0

9 months ago

1.3.3

9 months ago

1.3.2

9 months ago

1.2.3

10 months ago

1.3.1

10 months ago

1.2.2

10 months ago

1.3.0

10 months ago

1.2.0

10 months ago

1.2.1

10 months ago

1.1.1

10 months ago

1.1.0

10 months ago

1.0.3

11 months ago

1.0.2

11 months ago

1.0.1

11 months ago