From 7391d78c0340aef3f01c7dcf300f85258210dcb6 Mon Sep 17 00:00:00 2001 From: MiguelMLorente Date: Wed, 4 Dec 2024 22:38:28 +0100 Subject: [PATCH] Introduce clean and commit action buttons --- web/public/clean-icon.png | Bin 0 -> 9113 bytes web/public/commit-icon.png | Bin 0 -> 16323 bytes web/src/pages/game/GamePage.tsx | 42 ++++++++++++++++---- web/src/pages/game/components/DiceSet.scss | 8 +++- web/src/pages/game/components/DiceSet.tsx | 13 +++++- web/src/pages/game/components/GameBoard.tsx | 22 +++------- web/src/pages/game/types/DieViewProps.ts | 2 +- 7 files changed, 60 insertions(+), 27 deletions(-) create mode 100644 web/public/clean-icon.png create mode 100644 web/public/commit-icon.png diff --git a/web/public/clean-icon.png b/web/public/clean-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c06ba906d80c3f150600d10e774ef0842bb30a62 GIT binary patch literal 9113 zcmd5?hg%cR(+>oYu2Q7;1f+MQC?HJ^1T?^xULpcgM0$}LiGV0ANa#(16zNEj8bClg zB2A?Pk=~nhc#q#-@jl5txt+|;d}e26cW?IIJkozaL&-`Bfk0>gZ4CqjLbQK%k&}Ux zzVX>;@Q3V)?gI_T<<%#rxgZgwP`GQGc|jml^j8-VBrSs(0^x=L8uyL-e{D<$?i()z zFYO#2TM-WDLlVNK{(dNA*8EOhSU9T7CZ1yYqG;qDz`v}M`K(mEYJJj(U%JMpQ!;Ph z9ZM;Etp96O+QP`fvgrp8%_2!29S*1-vxWw>riO;b*V(h3bsPD!Gpj-S?CR{`!PA;? zYdyY*;Fclfp`~?4mD2!K3=H`H|6SE=qtnLlj*z`0(}IMDS>e}Ilk*c`f*0w1KTr=6 z37Y}yq!$d#c118C`UktM7uWrn-yTfEPCvo+QrX$K)T^eWNuvH*GzMnRwRmX4yx7^D zibY^>>r<&}DSljDA_Xwu;P5p=M-$Z~g}3Q{0A|(EycanW95g+mgE8XTcz-9oIm6Co zw^ba#IIp8vUk4m|py60pQSD%K z;zVj;KusmPe5HQq#D9IF0OCX+_it$6ZQKgh5`**hxiM~0?wHe9{|*KS3PB9U75Z&z z*DK_yM; zwKWI_bb6k(yEz`v?lt4x`@{jnfq58{RD+Vr(C$^|7f%@$g+-fTz=}M7p2RGTw|NMF zDV_k%lYKXoZ<&FOksWs}WJ~-1RP{+y?s4F4|0jla;C6pw7%A2UgIld3Vw0lW3lwby z<$QB?n%KZ||Bpu>-kAIE%l}wtuKfd5`TbA43FJRVhD8hVp$#~INOFULOm-q*-!UcL z4hb8#V>nPe!%Y}?*B%5NcBa?H7&Tv$YEn{}0udWEcd|qrOZ`uJ7vvPw8Y4d{R-_Ha z1fvs?bB5B}DkKq4_YZBLt~D&MgT+ti0T_&C{VmH(YIzq>f;sUJm-r#2 z4NZHGOi>yYb5dnPQHh3+mV+*cK(>74j~~sB#Z~*`5!&YsDxfL$$8egz-*6q1Z-*9f zEg6}}lr5;%ZxRfdr_bYV$r(>=uEd3rGAle>4uwOM2(QYwI4j`7KSRWyGB3t~d^(a1 z50)ySk<LpTiYW2IaBmS8kFLfvUA79I4vASJ>RJ|9(rSj3Vv4S4a@sd5mf1}43b3;? z!$P^gPrbb%y}anWMC$~9yiqan_T3~JC~aksvn^lPJmsP$j_GVkCIiqf85*rd?gVXojIhA9uUH5NeItN%&MiBi38AvLbA+Z zuOsJ}-4{2u9lB5OKxtB$BDqPkZ{1*gN_4&4qF%V zIBw=0Sxc(NHRGUlQa3W%N+*U~3#p3`*RQ$0fF>oLn$QyUs;T^NoQa4-E|qt?h`fc~ z5VR%}zk|0)*q}=qyX$!Qa3uG5rgZf=7-sWZ_yalhCO>V&uL&bvI$u5%1zyIM(_Pm6 zS$Ob_4Y2`KoLHP_E$lFnOPCAJk@Ft=AZ$~sS9KwzSlcb+3+gm!OJwV=EF^) zqAJ0W@TB1t=}0qJV=fvx82ZKUn>o#V_K<*ZG9{XPjwi6$>ms zm-NWcStY|?L7B@aXySqjbc=H6Umcy_YR=UZo$2VB`TWT#oqy^Z$&=I=XXLGwGLb`S ziHwYfL@8zs0m@uvvX~Zd~!}@2U+u{bL+G;233Bc+Q-zhFEvt=NPZSswJ>oUytMNPyWq- z+0Bt%`5art5UowMtpgfNbVmU5o=>HFX(_so4AX-ds)l=PzN% zix0Ec0F2NNE&qEW5vtiwytEM^?dl$8H-QxK8bO$#N`%>~!VESbrM%1J4qVX0GEs@s zE-V-v$`IRWN@yx;RdNxJT9e^*BW`gmUM zHEdyGLzCkqsPD0#i5A^rAZku761HGSb#3d0x-CYlgtpsV+Cx%M}2{;+<%%^!c2rKYO?i1po9M9 zNsqr)es*C(LYVP z9Z4Nko=-KvfVsjUn;Jf=Aig9&yK8JOQ6UPN8>_SiAlx`KO({y!xJ|YE$x3!hqn0

!iBoxHS#BHtQ)Me=SZvZC8V2&_S+r400#mz_7j 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 literal 0 HcmV?d00001 diff --git a/web/public/commit-icon.png b/web/public/commit-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d254d8d86fe123985ce1e9f5a02a34a84fbc27df GIT binary patch literal 16323 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 V{Loa7JqUj`bye-F1y?K|{6GGnGu;3H literal 0 HcmV?d00001 diff --git a/web/src/pages/game/GamePage.tsx b/web/src/pages/game/GamePage.tsx index 4e15ed6..4ad8707 100644 --- a/web/src/pages/game/GamePage.tsx +++ b/web/src/pages/game/GamePage.tsx @@ -2,7 +2,7 @@ import React, { useState } from "react"; import GameBoard from "./components/GameBoard"; import DiceSet from "./components/DiceSet"; import "./GamePage.scss"; -import { PieceId } from "interface"; +import { buildBoard, PieceId } from "interface"; import { DieViewProps } from "./types/DieViewProps"; const GamePage = () => { @@ -11,18 +11,18 @@ const GamePage = () => { return Object.values(PieceId)[randomId]; }; - const [dice, setDice] = useState( + const getRandomDiceSet: () => DieViewProps[] = () => [1, 2, 3, 4].map(() => { - const dieViewProps: DieViewProps = { + return { pieceId: getRandomPieceId(), isSelected: false, isDisabled: false, isSpecial: false, rotation: 0, }; - return dieViewProps; - }), - ); + }); + + const [dice, setDice] = useState(getRandomDiceSet()); const [specialDice, setSpecialDice] = useState( [ PieceId.P03, @@ -71,14 +71,40 @@ const GamePage = () => { return dice.concat(specialDice).find((die) => matcher(die)); }; + const [storedBoard, setStoredBoard] = useState(buildBoard()); + const [board, setBoard] = useState(buildBoard()); + const [id, setId] = useState(1); + const refreshBoardRender = () => { + setBoard(board); + setId(id + 1); + }; + const resetBoard = () => { + setBoard(storedBoard); + modifyDieState( + () => true, + () => { + return { isSelected: false, isDisabled: false }; + }, + ); + setId(id + 1); + }; + const commitBoard = () => { + if (dice.some((die) => !die.isDisabled)) return; + setStoredBoard(board); + setDice(getRandomDiceSet()); + setSpecialDieUsedInRound(false); + }; + return (

Game Page Title

-
+
{ specialDice={specialDice} modifyDieState={modifyDieState} specialDieUsedInRound={specialDieUsedInRound} + resetBoard={resetBoard} + commitBoard={commitBoard} />
diff --git a/web/src/pages/game/components/DiceSet.scss b/web/src/pages/game/components/DiceSet.scss index da09ab7..114a733 100644 --- a/web/src/pages/game/components/DiceSet.scss +++ b/web/src/pages/game/components/DiceSet.scss @@ -9,13 +9,17 @@ box-shadow: 0 0 10px green; border-radius: 20%; padding: 5px; - width: 80px; - height: 80px; + width: 70px; + height: 70px; margin-right: 10px; &.icon-inverted { transform: scaleX(-1); } + + &:last-child { + margin-right: 0; + } } } diff --git a/web/src/pages/game/components/DiceSet.tsx b/web/src/pages/game/components/DiceSet.tsx index 518e2a1..bf0b5a2 100644 --- a/web/src/pages/game/components/DiceSet.tsx +++ b/web/src/pages/game/components/DiceSet.tsx @@ -11,9 +11,18 @@ export interface DiceSetProps { newStateComputer: (die: DieViewProps) => Partial, ) => void; specialDieUsedInRound: boolean; + resetBoard: () => void; + commitBoard: () => void; } const DiceSet = (props: DiceSetProps) => { - const { dice, specialDice, modifyDieState, specialDieUsedInRound } = props; + const { + dice, + specialDice, + modifyDieState, + specialDieUsedInRound, + resetBoard, + commitBoard, + } = props; const handleDieClick = (clickedDie: DieViewProps) => { if (clickedDie.isDisabled) return; const isSpecialDie = clickedDie.isSpecial; @@ -51,6 +60,8 @@ const DiceSet = (props: DiceSetProps) => { className="icon-inverted" onClick={() => handleRotateButton(90)} > + +
{dice.map((die) => ( diff --git a/web/src/pages/game/components/GameBoard.tsx b/web/src/pages/game/components/GameBoard.tsx index 8ea33b9..2ddfb81 100644 --- a/web/src/pages/game/components/GameBoard.tsx +++ b/web/src/pages/game/components/GameBoard.tsx @@ -1,6 +1,5 @@ -import { buildBoard } from "interface"; +import { Cell } from "interface"; import "./GameBoard.scss"; -import { useState } from "react"; import BoardCell from "./BoardCell"; import { DieViewProps } from "../types/DieViewProps"; @@ -13,26 +12,17 @@ export interface GameBoardProps { matcher: (die: DieViewProps) => boolean, ) => DieViewProps | undefined; setSpecialDieUsedInRound: React.Dispatch>; + refreshBoardRender: () => void; + board: Cell[][]; } const GameBoard = (props: GameBoardProps) => { - const [board, setBoard] = useState(buildBoard()); - const [id, setId] = useState(1); - const refreshBoardRender = () => { - setBoard(board); - setId(id + 1); - }; + const { board } = props; return ( -
+
{board.flatMap((row) => - row.map((cell) => ( - - )), + row.map((cell) => ), )}
); diff --git a/web/src/pages/game/types/DieViewProps.ts b/web/src/pages/game/types/DieViewProps.ts index 05f049a..71914ed 100644 --- a/web/src/pages/game/types/DieViewProps.ts +++ b/web/src/pages/game/types/DieViewProps.ts @@ -4,6 +4,6 @@ export interface DieViewProps { pieceId: PieceId; isSelected: boolean; isDisabled: boolean; - isSpecial: boolean; + readonly isSpecial: boolean; rotation: number; }