diff --git a/frontend/src/components/RoundWinner/RoundWinner.jsx b/frontend/src/components/RoundWinner/RoundWinner.jsx index cfd790f..2618b80 100644 --- a/frontend/src/components/RoundWinner/RoundWinner.jsx +++ b/frontend/src/components/RoundWinner/RoundWinner.jsx @@ -1,8 +1,9 @@ export const RoundWinner = ({ roundWinner }) => { - return ( - <> -

{roundWinner[0]}

-

{roundWinner[1]}

- - ); + return ( + <> +

{roundWinner[0]}

+

{roundWinner[1]}

+

{roundWinner[2]}

+ + ); }; diff --git a/frontend/src/pages/PlayGamePage/PlayGamePage.jsx b/frontend/src/pages/PlayGamePage/PlayGamePage.jsx index 7d52965..904f685 100644 --- a/frontend/src/pages/PlayGamePage/PlayGamePage.jsx +++ b/frontend/src/pages/PlayGamePage/PlayGamePage.jsx @@ -42,249 +42,242 @@ import { postWinner } from "../../services/userStats"; import { RoundWinner } from "../../components/RoundWinner/RoundWinner"; export const PlayGamePage = () => { - const location = useLocation(); - const { startingPlayerHand, startingOpponentHand } = location.state || { - startingPlayerHand: [], - startingOpponentHand: [], - }; - const [playerHand, setPlayerHand] = useState(startingPlayerHand); - const [opponentHand, setOpponentHand] = useState(startingOpponentHand); - const [cardsInPlay, setCardsInPlay] = useState([]); - const [gameWinner, setGameWinner] = useState(""); - const [opponentCardShow, setOpponentCardShow] = useState(true); - const [isPlayersTurn, setIsPlayersTurn] = useState(true); - const [isLoading, setIsLoading] = useState(true); - const [loadingProgress, setLoadingProgress] = useState(0); - const [hintsOn, setHintsOn] = useState(true); - const [roundWinner, setRoundWinner] = useState(); + const location = useLocation(); + const { startingPlayerHand, startingOpponentHand } = location.state || { + startingPlayerHand: [], + startingOpponentHand: [], + }; + const [playerHand, setPlayerHand] = useState(startingPlayerHand); + const [opponentHand, setOpponentHand] = useState(startingOpponentHand); + const [cardsInPlay, setCardsInPlay] = useState([]); + const [gameWinner, setGameWinner] = useState(""); + const [opponentCardShow, setOpponentCardShow] = useState(true); + const [isPlayersTurn, setIsPlayersTurn] = useState(true); + const [isLoading, setIsLoading] = useState(true); + const [loadingProgress, setLoadingProgress] = useState(0); + const [hintsOn, setHintsOn] = useState(true); + const [roundWinner, setRoundWinner] = useState(); - const ORIGINAL_STATS_NAMES = { - year: "Discovery published in", - edible: "edible", - ph_range: "Soil pH range", - light: "Light Level", - soil_nutriments: "Nutrients required", - atmospheric_humidity: "Humidity Level", - }; + const ORIGINAL_STATS_NAMES = { + year: "Discovery published in", + edible: "edible", + ph_range: "Soil pH range", + light: "Light Level", + soil_nutriments: "Nutrients required", + atmospheric_humidity: "Humidity Level", + }; - const toggleHints = () => { - setHintsOn(!hintsOn); - }; + const toggleHints = () => { + setHintsOn(!hintsOn); + }; - // Preload all images when the component mounts - useEffect(() => { - const loadAllImages = async () => { - setIsLoading(true); + // Preload all images when the component mounts + useEffect(() => { + const loadAllImages = async () => { + setIsLoading(true); - // Combine all cards - const allCards = [...playerHand, ...opponentHand]; + // Combine all cards + const allCards = [...playerHand, ...opponentHand]; - // Preload all images - await preloadPlantImages(allCards, (loaded, total) => { - setLoadingProgress(Math.floor((loaded / total) * 100)); - }); + // Preload all images + await preloadPlantImages(allCards, (loaded, total) => { + setLoadingProgress(Math.floor((loaded / total) * 100)); + }); - setIsLoading(false); - }; + setIsLoading(false); + }; - loadAllImages(); - }, []); + loadAllImages(); + }, []); - // Pre-cache the next cards to be played - useEffect(() => { - const preloadNextCards = async () => { - if ( - playerHand.length > 0 && - opponentHand.length > 0 && - !isLoading - ) { - // Preload the next cards in each deck - await preloadPlantImages([playerHand[0], opponentHand[0]]); - } - }; + // Pre-cache the next cards to be played + useEffect(() => { + const preloadNextCards = async () => { + if (playerHand.length > 0 && opponentHand.length > 0 && !isLoading) { + // Preload the next cards in each deck + await preloadPlantImages([playerHand[0], opponentHand[0]]); + } + }; - preloadNextCards(); - }, [playerHand, opponentHand, isLoading]); + preloadNextCards(); + }, [playerHand, opponentHand, isLoading]); - const selectStat = ( - stat, - card1 = cardsInPlay[0], - card2 = cardsInPlay[1] - ) => { - setOpponentCardShow(true); + const selectStat = (stat, card1 = cardsInPlay[0], card2 = cardsInPlay[1]) => { + setOpponentCardShow(true); - const token = localStorage.getItem("token"); - setTimeout(() => { - postPlantForComparison(card1.id, card2.id, stat, token).then( - (response) => { - if (response.winner === "player") { - playerOneWinsComparison([card1, card2]); + const token = localStorage.getItem("token"); + setTimeout(() => { + postPlantForComparison(card1.id, card2.id, stat, token).then( + (response) => { + if (response.winner === "player") { + playerOneWinsComparison([card1, card2]); - setRoundWinner([ - "Player wins stat compared: ", - ORIGINAL_STATS_NAMES[response.compared_stat], - ]); - } else if (response.winner === "opponent") { - playerTwoWinsComparison([card1, card2]); - setRoundWinner([ - "Opponent wins stat compared: ", - ORIGINAL_STATS_NAMES[response.compared_stat], - ]); - } else if (response.winner === "draw") { - drawOutcome([card1, card2]); - setRoundWinner([ - "Draw stat compared: ", - ORIGINAL_STATS_NAMES[response.compared_stat], - ]); - } - // set a new token - localStorage.setItem("token", response.token); - } - ); - }, 1000); - }; + setRoundWinner([ + "Player wins hand!", + "Stat compared:", + ORIGINAL_STATS_NAMES[response.compared_stat], + ]); + } else if (response.winner === "opponent") { + playerTwoWinsComparison([card1, card2]); + setRoundWinner([ + "Opponent wins hand!", + "Stat compared:", + ORIGINAL_STATS_NAMES[response.compared_stat], + ]); + } else if (response.winner === "draw") { + drawOutcome([card1, card2]); + setRoundWinner([ + "Draw", + "Stat compared:", + ORIGINAL_STATS_NAMES[response.compared_stat], + ]); + } + // set a new token + localStorage.setItem("token", response.token); + }, + ); + }, 1000); + }; - const onClickNextRoundHandle = () => { - if (isPlayersTurn) { - setOpponentCardShow(false); - } - setIsPlayersTurn((prev) => !prev); - setRoundWinner(); - setCardsInPlay([]); - }; + const onClickNextRoundHandle = () => { + if (isPlayersTurn) { + setOpponentCardShow(false); + } + setIsPlayersTurn((prev) => !prev); + setRoundWinner(); + setCardsInPlay([]); + }; - const pickTopCards = async () => { - if (playerHand.length === 0 || opponentHand.length === 0) return; + const pickTopCards = async () => { + if (playerHand.length === 0 || opponentHand.length === 0) return; - const latestCardsInPlay = [playerHand[0], opponentHand[0]]; + const latestCardsInPlay = [playerHand[0], opponentHand[0]]; - // Ensure these cards' images are loaded before displaying them - await preloadPlantImages(latestCardsInPlay); + // Ensure these cards' images are loaded before displaying them + await preloadPlantImages(latestCardsInPlay); - setCardsInPlay(latestCardsInPlay); - setPlayerHand((prev) => prev.slice(1)); - setOpponentHand((prev) => prev.slice(1)); + setCardsInPlay(latestCardsInPlay); + setPlayerHand((prev) => prev.slice(1)); + setOpponentHand((prev) => prev.slice(1)); - if (!isPlayersTurn) { - selectStat(null, latestCardsInPlay[0], latestCardsInPlay[1]); - } - }; + if (!isPlayersTurn) { + selectStat(null, latestCardsInPlay[0], latestCardsInPlay[1]); + } + }; - const playerOneWinsComparison = (cards) => { - const token = localStorage.getItem("token"); - if (opponentHand.length === 0) { - setGameWinner("Player"); - postWinner(token, "player"); - } + const playerOneWinsComparison = (cards) => { + const token = localStorage.getItem("token"); + if (opponentHand.length === 0) { + setGameWinner("Player"); + postWinner(token, "player"); + } - setPlayerHand((prev) => { - const updatedCards = cards.map((card) => ({ - ...card, - owner: "player", - })); + setPlayerHand((prev) => { + const updatedCards = cards.map((card) => ({ + ...card, + owner: "player", + })); - return [...prev, ...updatedCards]; - }); - }; + return [...prev, ...updatedCards]; + }); + }; - const playerTwoWinsComparison = (cards) => { - const token = localStorage.getItem("token"); + const playerTwoWinsComparison = (cards) => { + const token = localStorage.getItem("token"); - if (playerHand.length === 0) { - setGameWinner("Opponent"); - postWinner(token, "opponent"); - } + if (playerHand.length === 0) { + setGameWinner("Opponent"); + postWinner(token, "opponent"); + } - setOpponentHand((prev) => { - const updatedCards = cards.map((card) => ({ - ...card, - owner: "opponent", - })); + setOpponentHand((prev) => { + const updatedCards = cards.map((card) => ({ + ...card, + owner: "opponent", + })); - return [...prev, ...updatedCards]; - }); - }; + return [...prev, ...updatedCards]; + }); + }; - const drawOutcome = (cards) => { - setPlayerHand((prev) => [...prev, cards[0]]); - setOpponentHand((prev) => [...prev, cards[1]]); - }; + const drawOutcome = (cards) => { + setPlayerHand((prev) => [...prev, cards[0]]); + setOpponentHand((prev) => [...prev, cards[1]]); + }; - if (isLoading) { - return ( -
-

Preparing Game...

-
-
-
-

{loadingProgress}% complete

-
- ); - } + if (isLoading) { + return ( +
+

Preparing Game...

+
+
+
+

{loadingProgress}% complete

+
+ ); + } - return gameWinner ? ( - <> -

{gameWinner} wins!

- - New Game? - - - - ) : ( - <> -
- {roundWinner && } - {((playerHand.length === 5 && opponentHand.length === 5) || - roundWinner) && ( - - )} -
-
-
- -
+ return gameWinner ? ( + <> +

{gameWinner} wins!

+ + New Game? + + + + ) : ( + <> +
+ {roundWinner && } + {((playerHand.length === 5 && opponentHand.length === 5) || + roundWinner) && ( + + )} +
+
+
+ +
- {(cardsInPlay.length > 0 || gameWinner) && ( -

Cards in Play

- )} - {(cardsInPlay.length > 0 || gameWinner) && ( - - )} -
- {playerHand && playerHand.length > 0 && ( -
-

Player Hand

- -
- )} - {opponentHand && opponentHand.length > 0 && ( -
-

Opponent Hand

- -
- )} -
+ {(cardsInPlay.length > 0 || gameWinner) &&

Cards in Play

} + {(cardsInPlay.length > 0 || gameWinner) && ( + + )} +
+ {playerHand && playerHand.length > 0 && ( +
+

Player Hand

+
- - ); + )} + {opponentHand && opponentHand.length > 0 && ( +
+

Opponent Hand

+ +
+ )} +
+
+ + ); };