4.20.0 • Published 21 days ago

@remvst/game-model v4.20.0

Weekly downloads
21
License
UNLICENSED
Repository
-
Last release
21 days ago

game-model

A minimalistic game engine built for TypeScript.

The engine provides ways to manage a world, entities, and events. It also provides utilities to serialize worlds so it can be used for saving levels and synchronizing multiplayer gameplay.

It does NOT provide any rendering, sound, physics, controls... It is up to the developer to build them.

Simplistic Example

class PlayerTrait {
    static readonly key = "player";
    readonly key = PlayerTrait.key;

    cycle(elapsed: number) {
        this.entity.position.x += elapsed * 50; // move to the right at 50px/s
    }
}

const world = new World();

// Add a player to the world
const player = new Entity(undefined, [new PlayerTrait()]);
player.position.x = 100;
player.position.y = 50;
world.entities.add(player);

world.cycle(1); // advance world clock by 1s

console.log(player.position.x, player.position.y); // 150,50

Full app example

class PlayerTrait {
    static readonly key = "player";
    readonly key = PlayerTrait.key;

    speed = 0;

    cycle(elapsed: number) {
        this.entity.position.x += elapsed * this.speed;
    }

    static registryEntry(app: GameModelApp): TraitRegistryEntry<PlayerTrait> {
        return traitRegistryEntry((builder) => {
            builder.traitClass(PlayerTrait);
            builder.simpleProp("speed", PropertyTypes.num());
        });
    }
}

// Singleton app object
const app = new GameModelApp();
app.traitRegistry.add(PlayerTrait.registryEntry(app));
app.finalize();

// ...
const world = new World();

// Add a player to the world
const player = new Entity(undefined, [new PlayerTrait()]);
player.position.x = 100;
player.position.y = 50;
world.entities.add(player);

const serializationOptions = new SerializationOptions();

// Serialize the world
const serializedWorld = app.serializers.world.serialize(
    world,
    serializationOptions,
);
saveToFile();

// Deserialize the world
const deserializedWorld = app.serializers.world.deserialize(
    serializedWorld,
    serializationOptions,
);
4.20.0

21 days ago

4.19.0

1 month ago

4.19.1

23 days ago

4.18.3

1 month ago

4.18.2

1 month ago

4.18.1

3 months ago

4.18.0

3 months ago

4.17.0

3 months ago

4.16.1

3 months ago

4.16.0

3 months ago

4.15.0

3 months ago

4.15.1

3 months ago

4.14.0

3 months ago

4.13.0

3 months ago

4.12.0

3 months ago

4.11.0

4 months ago

4.11.1

4 months ago

4.10.4

4 months ago

4.10.3

4 months ago

4.10.2

5 months ago

4.10.1

5 months ago

4.10.0

5 months ago

4.9.4

6 months ago

4.9.3

6 months ago

4.9.5

6 months ago

4.9.0

6 months ago

4.9.2

6 months ago

4.9.1

6 months ago

4.8.4

6 months ago

4.8.1

6 months ago

4.8.0

6 months ago

4.8.3

6 months ago

4.8.2

6 months ago

4.7.0

6 months ago

4.6.1

7 months ago

4.6.0

7 months ago

4.6.3

7 months ago

4.6.2

7 months ago

4.6.4

7 months ago

4.5.0

10 months ago

4.5.2

9 months ago

4.5.1

10 months ago

4.4.0

11 months ago

4.0.0

11 months ago

4.3.1

11 months ago

4.3.0

11 months ago

4.2.0

11 months ago

3.3.1

1 year ago

3.3.2

12 months ago

4.1.0

11 months ago

2.23.6

1 year ago

2.23.5

1 year ago

2.23.2

1 year ago

2.23.1

1 year ago

2.27.0

1 year ago

2.23.4

1 year ago

2.23.3

1 year ago

3.2.0

1 year ago

2.22.1

1 year ago

2.22.0

1 year ago

2.22.7

1 year ago

2.22.6

1 year ago

2.22.9

1 year ago

2.22.8

1 year ago

2.22.3

1 year ago

2.22.2

1 year ago

2.22.5

1 year ago

2.26.0

1 year ago

2.22.4

1 year ago

2.22.10

1 year ago

2.22.12

1 year ago

3.1.0

1 year ago

2.22.11

1 year ago

2.22.14

1 year ago

2.22.13

1 year ago

2.22.16

1 year ago

2.22.15

1 year ago

2.22.17

1 year ago

2.21.0

1 year ago

2.21.2

1 year ago

2.21.1

1 year ago

2.25.4

1 year ago

2.25.3

1 year ago

2.25.5

1 year ago

2.25.0

1 year ago

2.21.3

1 year ago

2.25.2

1 year ago

2.25.1

1 year ago

3.0.0

1 year ago

2.20.2

1 year ago

2.20.0

1 year ago

2.20.1

1 year ago

2.24.1

1 year ago

2.24.0

1 year ago

3.3.0

1 year ago

2.23.0

1 year ago

2.19.3

1 year ago

2.11.0

2 years ago

2.11.1

2 years ago

2.19.2

1 year ago

2.19.0

1 year ago

2.19.1

1 year ago

2.17.0

1 year ago

2.15.0

2 years ago

2.13.2

2 years ago

2.13.3

2 years ago

2.13.0

2 years ago

2.13.1

2 years ago

2.12.0

2 years ago

2.10.0

2 years ago

2.18.1

1 year ago

2.16.1

2 years ago

2.18.0

1 year ago

2.16.2

1 year ago

2.14.1

2 years ago

2.16.0

2 years ago

2.14.0

2 years ago

2.7.0

2 years ago

2.9.0

2 years ago

2.8.1

2 years ago

2.7.2

2 years ago

2.8.0

2 years ago

2.7.1

2 years ago

2.8.3

2 years ago

2.7.4

2 years ago

2.8.2

2 years ago

2.7.3

2 years ago

2.7.6

2 years ago

2.7.5

2 years ago

2.6.0

2 years ago

2.5.0

2 years ago

2.5.2

2 years ago

2.5.1

2 years ago

2.5.4

2 years ago

2.5.3

2 years ago

2.3.0

2 years ago

2.2.1

2 years ago

2.4.1

2 years ago

2.4.0

2 years ago

2.2.0

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago