diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-01-24 13:07:20 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-01-24 13:07:50 +0100 |
| commit | e4e4b5202bf0039127f591941fddc1ff5ca09897 (patch) | |
| tree | 0c6ad5b8784002ab2d05a14ece3d0b56fee1383f /src/routes/+page.svelte | |
| parent | c55cffecda48be785d89721dc8c8f04c99270b2d (diff) | |
Update project, improve sensor/render logic
Diffstat (limited to 'src/routes/+page.svelte')
| -rw-r--r-- | src/routes/+page.svelte | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..1fd4752 --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,88 @@ +<script> + import Sensor from '$lib/components/sensor.svelte'; + import Background from '$lib/components/background.svelte'; + import Palette from '$lib/components/palette.svelte'; + import Hud from '$lib/components/hud.svelte'; + import Minimap from '$lib/components/minimap.svelte'; + import Widget from '$lib/components/widget.svelte'; + import { modulo } from '$lib/math'; + import { widgets } from '$lib/stores/widgets'; + import { canvas } from '$lib/stores/canvas'; + + import { coordinateLength, maxSize } from '$lib/config'; + + $: shouldShowPalette = false; + + let dragging = false; + + const moveCanvas = function moveCanvas(event) { + + if (dragging) { + let deltaX = event.x - dragging.x; + let deltaY = event.y - dragging.y; + let x = modulo($canvas.x - deltaX, maxSize); + let y = modulo($canvas.y - deltaY, maxSize); + dragging.x = event.x; + dragging.y = event.y; + canvas.set({ x, y }) + } + } + + const startDragging = function startDragging(event) { + dragging = { + x: event.x, + y: event.y + }; + } + + const stopDragging = function startDragging() { + dragging = null; + } + + const showPalette = function showPalette(event) { + event.preventDefault(); + dragging = null; + document.documentElement.style.setProperty('--palette-x', event.clientX + 'px'); + document.documentElement.style.setProperty('--palette-y', event.clientY + 'px'); + shouldShowPalette = true; + } + + const hidePalette = function hidePalette() { + event.preventDefault(); + shouldShowPalette = false; + } +</script> + +<div + class="canvas" + on:click={hidePalette} + on:contextmenu={showPalette} + on:mousedown={startDragging} + on:mouseup={stopDragging} + on:mousemove={moveCanvas} +> + <Sensor /> + <Background /> + <Hud /> + <Minimap /> + + {#if shouldShowPalette } + <Palette/> + {/if} + + {#if $widgets} + {#each $widgets as widget} + <Widget widget={widget}/> + {/each} + {/if} +</div> + +<style> + .canvas { + user-select: none; + padding: 0; + margin: 0; + width: 100vw; + height: 100vh; + } +</style> |