diff --git a/client/svelte-client/src/LocalSessionWrapper.svelte b/client/svelte-client/src/LocalSessionWrapper.svelte
index 29a7bf3..00a310a 100644
--- a/client/svelte-client/src/LocalSessionWrapper.svelte
+++ b/client/svelte-client/src/LocalSessionWrapper.svelte
@@ -1,9 +1,7 @@
-
-
-
+
diff --git a/client/svelte-client/src/NetworkSessionWrapper.svelte b/client/svelte-client/src/NetworkSessionWrapper.svelte
new file mode 100644
index 0000000..6dfd444
--- /dev/null
+++ b/client/svelte-client/src/NetworkSessionWrapper.svelte
@@ -0,0 +1,24 @@
+
+
+{#if !session}
+
no session
+{:else if session.type === 'HOST'}
+ Host
+
+{:else if session.type === 'PEER'}
+ Peer
+
+{:else if session.type === 'OBSERVER'}
+ Peer
+
+{/if}
diff --git a/client/svelte-client/src/SessionWrapper.svelte b/client/svelte-client/src/SessionWrapper.svelte
index 0923ad2..6d1b044 100644
--- a/client/svelte-client/src/SessionWrapper.svelte
+++ b/client/svelte-client/src/SessionWrapper.svelte
@@ -1,6 +1,7 @@
@@ -13,12 +14,14 @@
{:else}
{#if session.state === SessionState.PENDING}
- waiting for other player...
+ waiting for other player...
{:else if session.state === SessionState.CLOSED}
- game over!
+ game over!
{:else if session.state === SessionState.RUNNING}
-
+
+
+
{:else }
- unknown game state
+ unknown game state
{/if}
{/if}
diff --git a/client/svelte-client/src/game/session.ts b/client/svelte-client/src/game/session.ts
index 8e31078..8b22652 100644
--- a/client/svelte-client/src/game/session.ts
+++ b/client/svelte-client/src/game/session.ts
@@ -10,7 +10,8 @@ export enum SessionType {
}
export type Player = {
- id: string
+ id: string,
+ nr: number
}
export type Observer = {
@@ -39,11 +40,15 @@ export type Input = {
player: number
}
-enum InputMethod {
- UNDEFINED, KEYBOARD, NETWORK
+export type InputEventPayload = {
+ session_id: string,
+ inputs: Input[],
+ player_id: string,
+ player_nr: number,
+ ts: number,
}
-export const keyboardInputs = derived(
+const player1KeyboardInputs = derived(
keysPressed,
$keysPressed => {
return $keysPressed.map((key): Input => {
@@ -52,6 +57,18 @@ export const keyboardInputs = derived(
return {input: 'UP', obj_id: 0, player: 1};
case 's':
return {input: 'DOWN', obj_id: 0, player: 1}
+ default:
+ return null
+ }
+ }).filter(it => !!it);
+ }
+)
+
+const player2KeyboardInputs = derived(
+ keysPressed,
+ $keysPressed => {
+ return $keysPressed.map((key): Input => {
+ switch(key.toLowerCase()) {
case 'arrowup':
return {input: 'UP', obj_id: 1, player: 2}
case 'arrowdown':
@@ -63,10 +80,30 @@ export const keyboardInputs = derived(
}
)
-const inputMethod = writable(InputMethod.UNDEFINED)
+const sessionEvents = readable([], function(set) {
+ // TODO: Setup ws
-function initialValue(): Session {
- return null
-}
+ setInterval(() => {
+ set([])
+ }, 10)
+
+ // TODO: Destroy ws
+ return () => {}
+})
+
+const inputEvents = derived(sessionEvents, ([$sessionEvents]) => $sessionEvents.filter(({input}) => input === 'topic'));
+
+const player1InputEvents = derived(inputEvents, ([$inputEvents]) => {
+ return $inputEvents.filter(({player_nr}) => player_nr === 1)
+})
+
+const player2InputEvents = derived(inputEvents, ([$inputEvents]) => {
+ return $inputEvents.filter(({player_nr}) => player_nr === 2)
+})
+
+export const localSessionInputs = derived([player1KeyboardInputs, player2KeyboardInputs], ([$player1KeyboardInputs, $player2KeyboardInputs]) => [...$player1KeyboardInputs, ...$player2KeyboardInputs])
+export const hostNetworkSessionInputs = derived([player1KeyboardInputs, player2InputEvents], ([player1, player2]) => [...player1, ...player2])
+export const peerNetworkSessionInputs = derived([player1InputEvents, player2KeyboardInputs], ([player1, player2]) => [...player1, ...player2])
+export const observerNetworkSessionInputs = derived([player1InputEvents, player2InputEvents], ([player1, player2]) => [...player1, ...player2])
export const sessionStore = writable(null);