diff --git a/src/components/Card/Card.tsx b/src/components/Card/Card.tsx index f7b261d..3f7090d 100644 --- a/src/components/Card/Card.tsx +++ b/src/components/Card/Card.tsx @@ -11,35 +11,38 @@ export default function Card({ data, state, setState }: CardProps) { if (!data) return
; return ( -
-

Counts as: {data.gemValue}

- { (data.points && data.points > 0) ?

{data.points} points

: null } -
- { - Object.keys(data.resourceCost).map((key: keyof ResourceCost | string) => { - // @ts-ignore - return (data.resourceCost[key as keyof ResourceCost] > 0) && ( -

- {data.resourceCost[key as keyof ResourceCost]} -

- ) - }) - } +
+ +
+

{data.gemValue.toUpperCase()}

+ { (data.points && data.points > 0) ?

{data.points} {data.points === 1 ? 'point' : 'points'}

: null } +
+ { + Object.keys(data.resourceCost).map((key: keyof ResourceCost | string) => { + // @ts-ignore + return (data.resourceCost[key as keyof ResourceCost] > 0) && ( +

+ {data.resourceCost[key as keyof ResourceCost]} +

+ ) + }) + } +
+ { state.actions.buyCard.active && + + } + { state.actions.reserveCard.active && + + }
- { state.actions.buyCard.active && - - } - { state.actions.reserveCard.active && - - }
) } \ No newline at end of file diff --git a/src/components/Card/CardRow.scss b/src/components/Card/CardRow.scss index 6fcae54..3c8d1d6 100644 --- a/src/components/Card/CardRow.scss +++ b/src/components/Card/CardRow.scss @@ -4,9 +4,18 @@ .card-row { display: flex; flex-flow: column nowrap; - margin: 2rem; + margin: 1rem; width: 80vw; + .card-row-top-bar { + display: flex; + align-items: center; + justify-content: center; + > * { + margin: 8px 16px; + } + } + .card-row-cards-visible { display: flex; flex-flow: row nowrap; @@ -15,25 +24,39 @@ .card { width: 25%; - min-height: 24vh; + height: 40vh; border: 2px solid black; - .total-card-cost { + img { + width: 100%; + height: 100%; + object-fit: cover; + z-index: 1; + } + + .foreground { + position: relative; + top: -100%; display: flex; - justify-content: center; - - @include map-gem-values(".card-cost"); + flex-direction: column; + align-items: center; + z-index: 6; + + > * { + margin: 1rem; + padding: 6px; + border-radius: 12px; + background-color: rgb(39, 36, 36); + } + + .total-card-cost { + display: flex; + flex-flow: row wrap; + justify-content: center; + @include map-gem-values(".card-cost"); + } } - > * { - margin: 1rem; - } - - p { - background-color: black; - } - - background-size: cover; } .card-count { diff --git a/src/components/Card/CardRow.tsx b/src/components/Card/CardRow.tsx index 9c31ab8..7e6a996 100644 --- a/src/components/Card/CardRow.tsx +++ b/src/components/Card/CardRow.tsx @@ -1,11 +1,13 @@ +import { useState } from 'react'; +import { v4 } from 'uuid'; +import cardTierToKey from '../../util/cardTierToKey'; import { CardRowProps } from '../../util/propTypes'; import { CardData } from "../../util/types" import Card from "../Card/Card" -import { v4 } from 'uuid'; -import cardTierToKey from '../../util/cardTierToKey'; import "./CardRow.scss"; export default function CardRow({tier, state, setState}: CardRowProps) { + const [collapsed, setCollapsed] = useState(true); const typedTier = cardTierToKey(tier); let cards: Array @@ -26,8 +28,11 @@ export default function CardRow({tier, state, setState}: CardRowProps) { return (
-

Tier: {tier}

-
+
+

Tier: {tier}

+ +
+

Remaining: {state.gameboard.deck[typedTier].length}

diff --git a/src/components/Gameboard/Gameboard.tsx b/src/components/Gameboard/Gameboard.tsx index 073821e..d6c3e11 100644 --- a/src/components/Gameboard/Gameboard.tsx +++ b/src/components/Gameboard/Gameboard.tsx @@ -20,6 +20,7 @@ const { validateChips } = getChipsActions; export default function Gameboard({ state, setState }: StateProps) { const [view, setView] = useState(

Loading...

); const [endgame, setEndgame] = useState(); + const [winner, setWinner] = useState(); // callbacks for lifting state const liftSelection = useCallback((value: keyof ResourceCost) => { @@ -63,12 +64,12 @@ export default function Gameboard({ state, setState }: StateProps) { useEffect(() => { if (endgame) { let winner: PlayerData; + const winnerData = state.players; const currentPlayer = useCurrentPlayer(state); if (!currentPlayer) return; if (currentPlayer.id <= endgame.id) { - const winnerData = state.players; - winner = winnerData.sort((x,y) => x.points - y.points)[0]; + winner = winnerData.sort((x,y) => x.points + y.points)[0]; console.log(winner.name + ' wins!'); } } diff --git a/src/components/Player/AllPlayers.scss b/src/components/Player/AllPlayers.scss index 4f3d8d2..cc8a204 100644 --- a/src/components/Player/AllPlayers.scss +++ b/src/components/Player/AllPlayers.scss @@ -20,5 +20,15 @@ @include map-gem-values(".player-chip"); } } + + .reserved-card-view { + background-color: rgb(232, 224, 200); + .reserved-card-cost { + display: flex; + flex-flow: row wrap; + justify-content: center; + @include map-gem-values(".reserve-cost"); + } + } } } \ No newline at end of file diff --git a/src/components/Player/Player.tsx b/src/components/Player/Player.tsx index c8b984b..5baeebb 100644 --- a/src/components/Player/Player.tsx +++ b/src/components/Player/Player.tsx @@ -27,14 +27,21 @@ export default function Player({ player, state, setState }: PlayerProps) { ) dynamic && setReservedView( - <> +

Reserved cards:

{ - dynamic.reservedCards?.map((data: CardData) => { - return - }) + dynamic.reservedCards?.map((data: CardData) => ( +
+

{data.gemValue} card: {data.points || 0} points

+
+ { + Object.entries(data.resourceCost).map(([key, value]) => value > 0 &&

{value}

) + } +
+
+ )) } - +
) }, [dynamic, setState])