diff --git a/client/svelte-client/src/Canvas.svelte b/client/svelte-client/src/Canvas.svelte index 0f26dec..f4de4d4 100644 --- a/client/svelte-client/src/Canvas.svelte +++ b/client/svelte-client/src/Canvas.svelte @@ -3,7 +3,7 @@ import {onMount, setContext} from "svelte"; import {get, writable} from "svelte/store"; import {drawObjects} from "./game/render"; - import {width, height, pixelRatio, gameContext, props, engineCtx, engineCanvas} from "./game/engine"; + import {width, height, pixelRatio, gameContext, props, engineCtx, engineCanvas, keysPressed} from "./game/engine"; export let killLoopOnError = true; @@ -16,6 +16,8 @@ let debug = writable(false); + $: keys = $keysPressed.join(',') + onMount(() => { ctx = canvas.getContext('2d'); engineCtx.set(ctx) @@ -97,17 +99,34 @@ // height.set(window.innerHeight); pixelRatio.set(window.devicePixelRatio); } - - - + function handleKeydown({key}) { + if ($keysPressed.includes(key)) { + return; + } + $keysPressed = [...$keysPressed, key] + } + function handleKeyup({key}) { + if (!$keysPressed.includes(key)) { + return; + } + $keysPressed = $keysPressed.filter(key => key !== key) + } + +
+ +
{keys}
+
+ diff --git a/client/svelte-client/src/game/engine.ts b/client/svelte-client/src/game/engine.ts index 97f643f..72189a8 100644 --- a/client/svelte-client/src/game/engine.ts +++ b/client/svelte-client/src/game/engine.ts @@ -1,4 +1,4 @@ -import {derived, writable} from "svelte/store"; +import {derived, Writable, writable} from "svelte/store"; import {getContext, onMount} from "svelte"; export const engineCanvas = writable(); @@ -7,13 +7,16 @@ export const width = writable(800); export const height = writable(600); export const pixelRatio = writable(window.devicePixelRatio); +export const keysPressed: Writable = writable([]) + // A more convenient store for grabbing all game props export const props = deriveObject({ width, height, pixelRatio, engineCanvas, - engineCtx + engineCtx, + keysPressed }); export const gameContext = Symbol();