From ee98d92f525eac572534b708965d6d00ae907521 Mon Sep 17 00:00:00 2001 From: minie4 Date: Tue, 11 Mar 2025 17:09:20 +0100 Subject: [PATCH] feat(frontend): implement basic card rendering, drawing and playing --- .../src/components/Cards/ClassicCard.svelte | 109 ++++++++++++++ .../src/components/Game/CardDisplay.svelte | 91 +++++++++++ frontend/src/components/Game/Main.svelte | 0 .../components/Game/OpponentDisplay.svelte | 37 +++++ frontend/src/routes/Game.svelte | 6 +- frontend/src/stores/sessionStore.ts | 141 ++++++++++++++++-- .../Game/EndScreen.svelte | 0 .../{components => views}/Game/Lobby.svelte | 2 +- frontend/src/views/Game/Main.svelte | 75 ++++++++++ 9 files changed, 447 insertions(+), 14 deletions(-) create mode 100644 frontend/src/components/Cards/ClassicCard.svelte create mode 100644 frontend/src/components/Game/CardDisplay.svelte delete mode 100644 frontend/src/components/Game/Main.svelte create mode 100644 frontend/src/components/Game/OpponentDisplay.svelte rename frontend/src/{components => views}/Game/EndScreen.svelte (100%) rename frontend/src/{components => views}/Game/Lobby.svelte (99%) create mode 100644 frontend/src/views/Game/Main.svelte diff --git a/frontend/src/components/Cards/ClassicCard.svelte b/frontend/src/components/Cards/ClassicCard.svelte new file mode 100644 index 0000000..475a769 --- /dev/null +++ b/frontend/src/components/Cards/ClassicCard.svelte @@ -0,0 +1,109 @@ + + +
+ {#if data.Symbol.length <= 2} + {data.Symbol} + {:else} + {data.Symbol.split(":")[1].replace("_", " ")} + {/if} + {#if data.Color == "black" && canUpdateCard} +
+
+ + +
+
+ + +
+
+ {/if} +
+ + diff --git a/frontend/src/components/Game/CardDisplay.svelte b/frontend/src/components/Game/CardDisplay.svelte new file mode 100644 index 0000000..2c7a201 --- /dev/null +++ b/frontend/src/components/Game/CardDisplay.svelte @@ -0,0 +1,91 @@ + + +
+ {#each cards as cardInfo, i} + {@const rotation = getCardRotation(i, cards.length, rotationDeg)} + {@const position = getCardOffset(rotation)} + + {/each} +
+ + diff --git a/frontend/src/components/Game/Main.svelte b/frontend/src/components/Game/Main.svelte deleted file mode 100644 index e69de29..0000000 diff --git a/frontend/src/components/Game/OpponentDisplay.svelte b/frontend/src/components/Game/OpponentDisplay.svelte new file mode 100644 index 0000000..9b98d2b --- /dev/null +++ b/frontend/src/components/Game/OpponentDisplay.svelte @@ -0,0 +1,37 @@ + + +{#if state} +
+

{player.Username}

+ +
+{/if} + + diff --git a/frontend/src/routes/Game.svelte b/frontend/src/routes/Game.svelte index 3054386..ef0cb65 100644 --- a/frontend/src/routes/Game.svelte +++ b/frontend/src/routes/Game.svelte @@ -1,7 +1,7 @@ + +{#snippet OpponentCards(players: PlayerObj[], rotationDeg: number)} + {#each players as player} + + {/each} +{/snippet} + +
+
{@render OpponentCards($opponents.slice(0, perSide), 0)}
+
+
+ {@render OpponentCards($opponents.slice(perSide, perSide * 2), -90)} +
+
+
+ +
+
+ { + sessionStore.updatePlayedCard(data); + }} + cards={[{ Card: undefined, PlayedBy: "", CardIndex: -1 }, ...$sessionStore.playedCards]} + centerDistancePx={0} + maxRotationDeg={10} + /> +
+
+
+ {@render OpponentCards($opponents.slice(perSide * 2, perSide * 3), 90)} +
+
+
+
+ { + if (get(playerActive)) sessionStore.playCard(i); + }} + centerDistancePx={centerDistancePx * 3} + {maxRotationDeg} + cards={$sessionStore.ownCards} + /> +
+
+