import { createGame, defineActions } from 'gameplate';
type State = { x: number; y: number; score: number };
const actions = defineActions<State>()({
moveBy: (s, dx: number, dy: number) => ({ ...s, x: s.x + dx, y: s.y + dy }),
addScore: (s, points: number) => ({ ...s, score: s.score + points }),
});
const game = createGame({
state: { x: 0, y: 0, score: 0 },
actions,
update: (state, dt, actions) => {
if (game.keyboard.isDown('ArrowRight')) actions.moveBy(200 * dt, 0);
if (game.keyboard.isDown('ArrowLeft')) actions.moveBy(-200 * dt, 0);
},
render: (state) => {
// your renderer here
},
});
game.start();
The simplest way to create a fully-wired game: typed store + game loop + keyboard + pointer, all hooked together. Returns a Game.