diff options
| author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-07-19 20:38:24 -0700 |
|---|---|---|
| committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-07-19 20:38:24 -0700 |
| commit | 0fd9fb097552686f2257c1aa689d797e80057bd1 (patch) | |
| tree | b8d0367bf7b62c049af60ace301ce1cffc08d821 /client/src/components | |
| download | jumpstorm-0fd9fb097552686f2257c1aa689d797e80057bd1.tar.gz jumpstorm-0fd9fb097552686f2257c1aa689d797e80057bd1.zip | |
initial commit
Diffstat (limited to 'client/src/components')
| -rw-r--r-- | client/src/components/GameCanvas.svelte | 28 | ||||
| -rw-r--r-- | client/src/components/LeaderBoard.svelte | 25 | ||||
| -rw-r--r-- | client/src/components/LeaderBoardCard.svelte | 20 |
3 files changed, 73 insertions, 0 deletions
diff --git a/client/src/components/GameCanvas.svelte b/client/src/components/GameCanvas.svelte new file mode 100644 index 0000000..766a08a --- /dev/null +++ b/client/src/components/GameCanvas.svelte @@ -0,0 +1,28 @@ +<script lang="ts"> + import { onMount } from "svelte"; + import { Game } from "../../lib/Game"; + import { Render } from "../../lib/systems"; + import { Floor } from "../../lib/entities"; + import { loadAssets } from "../../lib/config"; + import { JumpStorm } from "../../lib/JumpStorm"; + + let canvas: HTMLCanvasElement; + let ctx: CanvasRenderingContext2D; + + export let width: number; + export let height: number; + + let jumpStorm: JumpStorm; + + onMount(() => { + ctx = canvas.getContext("2d"); + ctx.imageSmoothingEnabled = false; + + loadAssets().then(() => { + jumpStorm = new JumpStorm(ctx); + jumpStorm.play(); + }); + }); +</script> + +<canvas bind:this={canvas} {width} {height} /> diff --git a/client/src/components/LeaderBoard.svelte b/client/src/components/LeaderBoard.svelte new file mode 100644 index 0000000..d6e4ce3 --- /dev/null +++ b/client/src/components/LeaderBoard.svelte @@ -0,0 +1,25 @@ +<script lang="ts"> + import { type LeaderBoardEntry } from "../../lib/interfaces"; + import LeaderBoardCard from "./LeaderBoardCard.svelte"; + + const MAX_ENTRIES = 8; + + export let entries: LeaderBoardEntry[] = []; +</script> + +<div class="leaderboard"> + {#each entries + .sort((a, b) => b.score - a.score) + .slice(0, MAX_ENTRIES) as entry} + <LeaderBoardCard {entry} /> + {/each} +</div> + +<style> + .leaderboard { + display: grid; + grid-template-columns: repeat(4, 1fr); + grid-template-rows: repeat(2, 1fr); + gap: 10px; + } +</style> diff --git a/client/src/components/LeaderBoardCard.svelte b/client/src/components/LeaderBoardCard.svelte new file mode 100644 index 0000000..446d734 --- /dev/null +++ b/client/src/components/LeaderBoardCard.svelte @@ -0,0 +1,20 @@ +<script lang="ts"> + import { type LeaderBoardEntry } from "../../lib/interfaces"; + + export let entry: LeaderBoardEntry = { + name: "simponic", + score: 100, + }; +</script> + +<div class="entry"> + <span class="name">{entry.name}</span> + <span class="score">{entry.score}</span> +</div> + +<style> + .entry { + display: flex; + justify-content: space-between; + } +</style> |
