1.4.3 • Published 7 months ago

furry-ecs v1.4.3

Weekly downloads
-
License
MIT
Repository
github
Last release
7 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

7 months ago

1.4.2

7 months ago

1.4.1

7 months ago

1.4.0

8 months ago

1.3.3

8 months ago

1.3.2

8 months ago

1.2.3

8 months ago

1.3.1

8 months ago

1.2.2

8 months ago

1.3.0

8 months ago

1.2.0

8 months ago

1.2.1

8 months ago

1.1.1

9 months ago

1.1.0

9 months ago

1.0.3

9 months ago

1.0.2

9 months ago

1.0.1

9 months ago