summaryrefslogtreecommitdiff
path: root/src/state/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/index.ts')
-rw-r--r--src/state/index.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/state/index.ts b/src/state/index.ts
new file mode 100644
index 0000000..03d218f
--- /dev/null
+++ b/src/state/index.ts
@@ -0,0 +1,31 @@
+import { GAME_SIZE, NUM_STARTING_BALLS } from "./const";
+import { Ball, GameState, SessionState } from "./types";
+
+export * from "./const";
+export * from "./types";
+
+const createRandomBall = (): Ball => ({
+ position: [
+ GAME_SIZE.cols / 4 + (Math.random() * GAME_SIZE.cols) / 2,
+ GAME_SIZE.rows / 4 + (Math.random() * GAME_SIZE.rows) / 2,
+ ],
+ velocity: [-1 + Math.random() * 2, 0.5 + Math.random()],
+});
+
+const createGameState = () =>
+ ({
+ paddle: { position: [0, GAME_SIZE.rows - 1] },
+ balls: new Array(NUM_STARTING_BALLS)
+ .fill(undefined)
+ .map(() => createRandomBall()),
+ bricks: new Array(GAME_SIZE.cols * 5).fill(undefined).map((_, i) => ({
+ position: [i % GAME_SIZE.cols, Math.floor(i / GAME_SIZE.cols)],
+ })),
+ } satisfies GameState);
+
+export const createSessionState = (sessionId: string) =>
+ ({
+ sessionId,
+ localPlayerGameState: createGameState(),
+ remotePlayerGameState: createGameState(),
+ } satisfies SessionState);