0.6.0 • Published 3 years ago

@cbartel_ci/tsecs v0.6.0

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

TSECS

This is an entity component system (ecs) written in typescript.

Usage

This project aims to give you an easy approach to write your applications. Here is an example on how to use tsecs:

Create your components:

export class MoveComponent {
    v: number = 1;
    dir: number = 1;
}

export class TransformComponent {
    x! : number;
    y! : number;
}

Create your systems:

export class MoveSystem extends EntitySystem {

    private transformComponentMapper! : ComponentMapper<TransformComponent>;
    private moveComponentMapper! : ComponentMapper<MoveComponent>;


    initComponentSet(componentSetBuilder: ComponentSetBuilder): ComponentSetBuilder {
        return componentSetBuilder.containingAll(TransformComponent, MoveComponent);
    }

    onInit(): void {
        this.transformComponentMapper = this.getWorld().getComponentMapper(TransformComponent);
        this.moveComponentMapper = this.getWorld().getComponentMapper(MoveComponent);
    }

    onUpdate(dt: number): void {
        this.getEntities().forEach((entity) => {
            const transformComponent = this.transformComponentMapper.getComponent(entity);
            const moveComponent = this.moveComponentMapper.getComponent(entity);
            if(transformComponent.x >= 400) {
                moveComponent.dir = -1;
            }
            if(transformComponent.x <= 10) {
                moveComponent.dir = 1;
            }
            transformComponent.x += dt*moveComponent.dir*moveComponent.v;
        })
    }

    onEntityAdd(entity: number): void {
        console.log(`entity ${entity} was added to the move system`);
    }

    onEntityRemove(entity: number): void {
        console.log(`entity ${entity} was removed from the move system`);
    }

}

And now create your world:

const world = new WorldBuilder().with(new MoveSystem()).build();

const moveComponent = new MoveComponent();
const transformComponent = new TransformComponent();
transformComponent.x = 100;
transformComponent.y = 100;

const transformComponentMapper = world.getComponentMapper<TransformComponent>(TransformComponent);
const moveComponentMapper = world.getComponentMapper<MoveComponent>(MoveComponent);

const entity = world.createEntity();
moveComponentMapper.addComponent(entity, moveComponent);
transformComponentMapper.addComponent(entity, transformComponent);

Now you only need to call the update method periodically and you're good to go:

setInterval(() => world.update(1000), 1000);

This Project is using TSDX

Code quality is set up with prettier, husky, and lint-staged using the defaults of TSDX.

Jest

Jest tests are set up to run with npm test or yarn test.

Rollup

TSDX uses Rollup as a bundler and generates multiple rollup configs for various module formats and build settings. See Optimizations for details.

Publishing to NPM

TSDX recommends using np.

0.6.0

3 years ago

0.3.0

3 years ago

0.5.0

3 years ago

0.4.0

3 years ago

0.3.1

3 years ago

0.2.1

3 years ago

0.2.0

3 years ago

0.1.0

3 years ago

0.1.0-SNAPSHOT

3 years ago