Files
splinter/client/src/components/Game/GameBoard.js

89 lines
2.6 KiB
JavaScript

import { useContext, useEffect, useState } from 'react';
import { Context } from '../../store/Store';
import '../../styles/GameBoard.css';
import Card from '../Cards/Card';
import { DeckCard } from '../Cards/DeckCard';
import jsonCards from '../../store/cards.json';
export default function GameBoard() {
const [state, dispatch] = useContext(Context);
const [trigger, setTrigger] = useState(true);
const [rowThree, setRowThree] = useState(null);
const [rowTwo, setRowTwo] = useState(null);
const [rowOne, setRowOne] = useState(null);
const { tierOne, tierTwo, tierThree } = jsonCards;
useEffect(() => {
const AllDecks = [tierOne, tierTwo, tierThree];
// param limit sets limit on number of cards rendered
const buildGameBoardRow = (limit, tier) => {
let newBoard = [<DeckCard tier={tier} />];
let i = 0;
while (i < limit) {
i++;
if (!AllDecks[tier-1][i-1]) continue;
newBoard.push(<Card tier={tier} props={AllDecks[tier-1][i-1]} />);
}
switch (tier) {
case 1:
setRowOne(newBoard);
setTrigger(false);
break;
case 2:
setRowTwo(newBoard);
setTrigger(false);
break;
case 3:
setRowThree(newBoard);
setTrigger(false);
break;
default:
setTrigger(false);
break;
}
}
if (trigger) {
buildGameBoardRow(4,3);
buildGameBoardRow(4,2);
buildGameBoardRow(4,1);
}
}, [trigger]);
return (
<div className="gameboard">
<a href='/' className="gameboard-title">SPLINTER</a>
<div>
<h2>Players:</h2>
{state.players.map(player => {
return (
<div className="player-info">
<p>{player.name}</p>
<p>{player.points && `Score: ${player.points}`}</p>
</div>
)
})
}
</div>
<div className="gameboard-row">
{rowThree || 'Loading'}
</div>
<div className="gameboard-row">
{rowTwo || 'Loading'}
</div>
<div className="gameboard-row">
{rowOne || 'Loading'}
</div>
<div className="section-border"></div>
</div>
)
}