6.3.0 • Published 1 year ago

darker-engine v6.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

npm.io npm.io npm.io npm.io npm.io

Darker-Engine

Lightweight functional library implementation of the Entity-Component-System pattern with typescript.

Installation

Deno

Import the package with deno:

import { engine as darkerEngine } from "https://deno.land/x/darker_engine/mod.ts";

npm

Install the package with npm:

npm install darker-engine

Code Example

Declaration

import { engine as darkerEngine } from "darker-engine";

export const Engine = darkerEngine<IEntities, IComponents, ComponentData>();

Engine.setSystems(...[]);

Engine.load();

Enums

enum EntityType {
  EXAMPLE,
}

enum Components {
  EXAMPLE_COMPONENT = "EXAMPLE_COMPONENT",
}

Entity

import { EntityType } from "darker-engine";

const exampleEntity = (): EntityType<IEntities, IComponents, ComponentData> => ({
  id: Engine.getUID(),
  type: EntityType.EXAMPLE,
  data: {},
  components: [],
});

Systems

import { SystemFunction } from "darker-engine";

const exampleSystem: SystemFunction<IComponents> = () => {
  const onAdd = (entityId: number) => {};
  const onUpdate = (entityId: number, component: string) => {};
  const onRemove = (entityId: number) => {};

  return {
    components: [],
    onAdd,
    onUpdate,
    onRemove,
  };
};

Full code

import {
  engine as darkerEngine,
  EntityType,
  SystemFunction,
} from "darker-engine";

enum IEntities {
  EXAMPLE_ENTITY,
}

enum IComponents {
  EXAMPLE_COMPONENT,
  OTHER_COMPONENT,
}

type ComponentData = {
  [IComponents.EXAMPLE_COMPONENT]: {
    foo: string;
  },
  [IComponents.OTHER_COMPONENT]: {
    bar: number;
  };
};

export const Engine = darkerEngine<IEntities, IComponents, ComponentData>()

const exampleEntity: EntityTypeFunction<IEntities, IComponents, ComponentData> = () => ({
  id: Engine.getUID(),
  type: IEntities.EXAMPLE_ENTITY,
  data: {
    [IComponents.EXAMPLE_COMPONENT]: {
      foo: "faa",
    }
  },
  components: [IComponents.EXAMPLE_COMPONENT],
})

const exampleSystem: SystemFunction<IComponents> = () => {
  let interval: number

  const onLoad = () => {
    console.log("welcome!");
    Engine.addEntity(exampleEntity());

    interval = setInterval(() => {
      const entityList = Engine.getEntityList();
      const entityListByType = Engine.getEntityListByType(IEntities.EXAMPLE_ENTITY);
      const entityListByComponents = Engine.getEntityListByComponents(
        IComponents.EXAMPLE_COMPONENT,
      );

      console.log(`Entities`);
      console.log(` - total: ${entityList.length}`);
      console.log(` - type: ${entityListByType.length}`);
      console.log(` - component: ${entityListByComponents.length}`);
    }, 5000);
  }

  const onDestroy = () => {
    clearInterval(interval);
    console.log("bye!");
  }

  const onAdd = (id: number) => {
    const entity = Engine.getEntity(id);
    entity.updateComponent(IComponents.EXAMPLE_COMPONENT, { foo: 'fii'});
  }

  const onUpdate = (id: number, component?: IComponents) => {
    const entity = Engine.getEntity(id);

    if (component !== IComponents.EXAMPLE_COMPONENT) return;

    const { foo } = entity.getComponent(IComponents.EXAMPLE_COMPONENT);
    if (foo === "fii" && !entity.hasComponent(IComponents.OTHER_COMPONENT)) {
      entity.removeComponent(IComponents.EXAMPLE_COMPONENT);
    }
  }

  const onRemove = (entityId: number) => {
    Engine.removeEntity(entityId);
  };

  return {
    id: Engine.getUID(),
    components: [IComponents.EXAMPLE_COMPONENT],
    onLoad,
    onDestroy,
    onAdd,
    onUpdate,
    onRemove,
  }
}

Engine.setSystems(exampleSystem);
Engine.load()
6.3.0

1 year ago

7.2.1

1 year ago

7.2.0

1 year ago

7.1.0-b

1 year ago

7.0.2

1 year ago

7.1.0

1 year ago

7.0.1

1 year ago

7.0.0

1 year ago

6.1.0

2 years ago

5.0.2

2 years ago

6.2.0

2 years ago

4.2.2-b

2 years ago

4.1.2-cjs

3 years ago

4.0.5

3 years ago

4.0.6

3 years ago

4.0.1

3 years ago

4.0.0

3 years ago

4.0.3

3 years ago

4.0.6-cjs

3 years ago

4.0.2

3 years ago

4.1.0-cjs

3 years ago

4.0.3-cjs

3 years ago

3.1.2

3 years ago

3.1.5

3 years ago

3.1.4

3 years ago

3.1.4-cjs

3 years ago

3.1.2-cjs

3 years ago

4.0.5-cjs

3 years ago

3.1.5-cjs

3 years ago

4.1.1-cjs

3 years ago

3.1.3-cjs

3 years ago

4.0.0-cjs

3 years ago

4.1.3

3 years ago

4.1.0

3 years ago

4.1.2

3 years ago

4.1.1

3 years ago

4.0.2-cjs

3 years ago

3.1.1-cjs

3 years ago

3.1.1

3 years ago

3.1.0

3 years ago

3.1.0-cjs

3 years ago

3.0.6

3 years ago

3.0.6-cjs

3 years ago

3.0.4

3 years ago

3.0.3

3 years ago

3.0.2

3 years ago

3.0.1

3 years ago

3.0.5

3 years ago

3.0.0

3 years ago

2.15.0

3 years ago

2.15.1

3 years ago

2.14.3

3 years ago

2.14.1

3 years ago

2.14.2

3 years ago

2.14.0

3 years ago

2.13.2

3 years ago

2.13.3

3 years ago

2.13.0

3 years ago

2.13.1

3 years ago

2.11.1

3 years ago

2.12.0

3 years ago

2.12.1

3 years ago

2.11.0

3 years ago

2.10.3

3 years ago

2.10.0-cjs

4 years ago

2.10.1-cjs

4 years ago

2.10.1

4 years ago

2.10.2

4 years ago

2.10.0

4 years ago

2.9.3-cjs

4 years ago

2.9.2

4 years ago

2.9.1

4 years ago

2.9.4

4 years ago

2.9.3

4 years ago

2.9.0-cjs

4 years ago

2.9.2-cjs

4 years ago

2.9.1-cjs

4 years ago

2.9.4-cjs

4 years ago

2.9.0

4 years ago

2.8.3-cjs

4 years ago

2.8.1

4 years ago

2.8.0

4 years ago

2.8.6-cjs

4 years ago

2.8.5-cjs

4 years ago

2.8.4-cjs

4 years ago

2.8.0-cjs

4 years ago

2.8.7-cjs

4 years ago

2.8.1-cjs

4 years ago

2.8.3

4 years ago

2.8.2

4 years ago

2.8.5

4 years ago

2.8.4

4 years ago

2.8.7

4 years ago

2.8.6

4 years ago

2.7.11-cjs

4 years ago

2.7.11

4 years ago

2.7.6-cjs

4 years ago

2.6.1-cjs

4 years ago

2.7.5-cjs

4 years ago

2.6.1

4 years ago

2.4.3

4 years ago

2.6.0

4 years ago

2.6.2

4 years ago

2.6.2-cjs

4 years ago

2.5.1-cjs

4 years ago

2.7.4

4 years ago

2.7.3

4 years ago

2.7.6

4 years ago

2.7.5

4 years ago

2.7.8

4 years ago

2.7.7

4 years ago

2.7.9

4 years ago

2.7.8-cjs

4 years ago

2.6.0-cjs

4 years ago

2.7.7-cjs

4 years ago

2.7.3-cjs

4 years ago

2.5.0-cjs

4 years ago

2.5.0

4 years ago

2.7.0

4 years ago

2.7.10-cjs

4 years ago

2.5.1

4 years ago

2.7.2

4 years ago

2.7.1

4 years ago

2.7.9-cjs

4 years ago

2.4.3-cjs

4 years ago

2.7.0-cjs

4 years ago

2.7.4-cjs

4 years ago

2.7.1-cjs

4 years ago

2.7.10

4 years ago

2.7.2-cjs

4 years ago

2.4.2-cjs

4 years ago

2.4.2

4 years ago

2.4.1

4 years ago

2.4.0

4 years ago

2.4.0-cjs

4 years ago

2.4.1-cjs

4 years ago

2.3.0

4 years ago

2.3.1

4 years ago

2.3.1-cjs

4 years ago

2.2.1

4 years ago

2.2.2

4 years ago

2.2.0

4 years ago

2.1.1

4 years ago

2.1.0

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago