GameBoard: show slected board stones
This commit is contained in:
		
							parent
							
								
									f27eafa3f0
								
							
						
					
					
						commit
						758e7ce10f
					
				| @ -18,30 +18,36 @@ export const Color = { | ||||
| /* | ||||
|  * Stone | ||||
|  */ | ||||
| export function Stone({ color }) { | ||||
| export function Stone({ color, type }) { | ||||
|     switch (color) { | ||||
|         case Color.white: | ||||
|             return WhiteStone(); | ||||
|             return <WhiteStone type={type} />; | ||||
| 
 | ||||
|         case Color.black: | ||||
|             return BlackStone(); | ||||
|             return <BlackStone type={type} />; | ||||
| 
 | ||||
|         case '': | ||||
|         case undefined: | ||||
|         case null: | ||||
|             return; // no color :) | ||||
|             return; // no stone :) | ||||
| 
 | ||||
|         default: | ||||
|             console.warn("Unknown color: ", color) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| export function WhiteStone() { | ||||
|     return <span className="Stone white">⛀</span> | ||||
| export function WhiteStone({ type }) { | ||||
|     if (type === 'KING') | ||||
|         return <span className="Stone white king">⛁</span> | ||||
|     else | ||||
|         return <span className="Stone white man">⛀</span> | ||||
| } | ||||
| 
 | ||||
| export function BlackStone() { | ||||
|     return <span className="Stone black">⛂</span> | ||||
| export function BlackStone({ type }) { | ||||
|     if (type === 'KING') | ||||
|         return <span className="Stone white king">⛃</span> | ||||
|     else | ||||
|         return <span className="Stone black man">⛂</span> | ||||
| } | ||||
| 
 | ||||
| /* | ||||
| @ -59,67 +65,98 @@ export function Player({ color, name }) { | ||||
| /* | ||||
|  * Board | ||||
|  */ | ||||
| export function Board() { | ||||
| export function Board({ game }) { | ||||
| 
 | ||||
|     const board = (game && game.board && typeof game.board === 'object') ? game.board : defaultBoard(); | ||||
| 
 | ||||
|     return <div className='Board'> | ||||
|         <div className='row'> | ||||
|             <BlackTile /> <WhiteTile id={0} stone={WhiteStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={1} stone={WhiteStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={2} stone={WhiteStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={4} stone={WhiteStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={1} stone={board[1]} /> | ||||
|             <BlackTile /> <WhiteTile id={2} stone={board[2]} /> | ||||
|             <BlackTile /> <WhiteTile id={3} stone={board[3]} /> | ||||
|             <BlackTile /> <WhiteTile id={4} stone={board[4]} /> | ||||
|         </div> | ||||
|         <div className='row'> | ||||
|             <WhiteTile id={5} stone={WhiteStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={6} stone={WhiteStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={7} stone={WhiteStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={8} stone={WhiteStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={5} stone={board[5]} /> <BlackTile /> | ||||
|             <WhiteTile id={6} stone={board[6]} /> <BlackTile /> | ||||
|             <WhiteTile id={7} stone={board[7]} /> <BlackTile /> | ||||
|             <WhiteTile id={8} stone={board[8]} /> <BlackTile /> | ||||
|         </div> | ||||
|         <div className='row'> | ||||
|             <BlackTile /> <WhiteTile id={9} stone={WhiteStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={10} stone={WhiteStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={11} stone={WhiteStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={12} stone={WhiteStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={9} stone={board[9]} /> | ||||
|             <BlackTile /> <WhiteTile id={10} stone={board[10]} /> | ||||
|             <BlackTile /> <WhiteTile id={11} stone={board[11]} /> | ||||
|             <BlackTile /> <WhiteTile id={12} stone={board[12]} /> | ||||
|         </div> | ||||
|         <div className='row'> | ||||
|             <WhiteTile id={13} stone={null} /> <BlackTile /> | ||||
|             <WhiteTile id={14} stone={null} /> <BlackTile /> | ||||
|             <WhiteTile id={15} stone={null} /> <BlackTile /> | ||||
|             <WhiteTile id={16} stone={null} /> <BlackTile /> | ||||
|             <WhiteTile id={13} stone={board[13]} /> <BlackTile /> | ||||
|             <WhiteTile id={14} stone={board[14]} /> <BlackTile /> | ||||
|             <WhiteTile id={15} stone={board[15]} /> <BlackTile /> | ||||
|             <WhiteTile id={16} stone={board[16]} /> <BlackTile /> | ||||
|         </div> | ||||
| 
 | ||||
|         <div className='row'> | ||||
|             <BlackTile /> <WhiteTile id={17} stone={null} /> | ||||
|             <BlackTile /> <WhiteTile id={18} stone={null} /> | ||||
|             <BlackTile /> <WhiteTile id={19} stone={null} /> | ||||
|             <BlackTile /> <WhiteTile id={20} stone={null} /> | ||||
|             <BlackTile /> <WhiteTile id={17} stone={board[17]} /> | ||||
|             <BlackTile /> <WhiteTile id={18} stone={board[18]} /> | ||||
|             <BlackTile /> <WhiteTile id={19} stone={board[19]} /> | ||||
|             <BlackTile /> <WhiteTile id={20} stone={board[20]} /> | ||||
|         </div> | ||||
|         <div className='row'> | ||||
|             <WhiteTile id={21} stone={BlackStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={22} stone={BlackStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={23} stone={BlackStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={24} stone={BlackStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={21} stone={board[21]} /> <BlackTile /> | ||||
|             <WhiteTile id={22} stone={board[22]} /> <BlackTile /> | ||||
|             <WhiteTile id={23} stone={board[23]} /> <BlackTile /> | ||||
|             <WhiteTile id={24} stone={board[24]} /> <BlackTile /> | ||||
|         </div> | ||||
|         <div className='row'> | ||||
|             <BlackTile /> <WhiteTile id={25} stone={BlackStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={26} stone={BlackStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={27} stone={BlackStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={28} stone={BlackStone()} /> | ||||
|             <BlackTile /> <WhiteTile id={25} stone={board[25]} /> | ||||
|             <BlackTile /> <WhiteTile id={26} stone={board[26]} /> | ||||
|             <BlackTile /> <WhiteTile id={27} stone={board[27]} /> | ||||
|             <BlackTile /> <WhiteTile id={28} stone={board[28]} /> | ||||
|         </div> | ||||
|         <div className='row'> | ||||
|             <WhiteTile id={29} stone={BlackStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={30} stone={BlackStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={31} stone={BlackStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={32} stone={BlackStone()} /> <BlackTile /> | ||||
|             <WhiteTile id={29} stone={board[29]} /> <BlackTile /> | ||||
|             <WhiteTile id={30} stone={board[30]} /> <BlackTile /> | ||||
|             <WhiteTile id={31} stone={board[31]} /> <BlackTile /> | ||||
|             <WhiteTile id={32} stone={board[32]} /> <BlackTile /> | ||||
|         </div> | ||||
|     </div> | ||||
| } | ||||
| 
 | ||||
| function defaultBoard() { | ||||
|     return { | ||||
|         1: { color: "BLACK", type: "MAN" }, | ||||
|         2: { color: "BLACK", type: "MAN" }, | ||||
|         3: { color: "BLACK", type: "MAN" }, | ||||
|         4: { color: "BLACK", type: "MAN" }, | ||||
|         5: { color: "BLACK", type: "MAN" }, | ||||
|         6: { color: "BLACK", type: "MAN" }, | ||||
|         7: { color: "BLACK", type: "MAN" }, | ||||
|         8: { color: "BLACK", type: "MAN" }, | ||||
|         9: { color: "BLACK", type: "MAN" }, | ||||
|         10: { color: "BLACK", type: "MAN" }, | ||||
|         11: { color: "BLACK", type: "MAN" }, | ||||
|         12: { color: "BLACK", type: "MAN" }, | ||||
|         21: { color: "WHITE", type: "MAN" }, | ||||
|         22: { color: "WHITE", type: "MAN" }, | ||||
|         23: { color: "WHITE", type: "MAN" }, | ||||
|         24: { color: "WHITE", type: "MAN" }, | ||||
|         25: { color: "WHITE", type: "MAN" }, | ||||
|         26: { color: "WHITE", type: "MAN" }, | ||||
|         27: { color: "WHITE", type: "MAN" }, | ||||
|         28: { color: "WHITE", type: "MAN" }, | ||||
|         29: { color: "WHITE", type: "MAN" }, | ||||
|         30: { color: "WHITE", type: "MAN" }, | ||||
|         31: { color: "WHITE", type: "MAN" }, | ||||
|         32: { color: "WHITE", type: "MAN" }, | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| function WhiteTile({ id, stone }) { | ||||
|     return ( | ||||
|         <div className='Tile white' | ||||
|             onClick={() => console.log('click', id)} | ||||
|         > | ||||
|             {stone} | ||||
|             <Stone color={stone?.color} type={stone?.type} /> | ||||
|         </div> | ||||
|     ); | ||||
| } | ||||
|  | ||||
| @ -10,23 +10,16 @@ export function Create({ onClick }) { | ||||
| 
 | ||||
|     const hasOpponent = games.newGame.opponentName && games.newGame.opponentColor; | ||||
| 
 | ||||
|     const prepareNewGameRequest = () => { | ||||
|     const validateNewGame = () => { | ||||
|         if (!hasOpponent) | ||||
|             return alert("You have to select an opponent"); | ||||
| 
 | ||||
|         const reqParams = { | ||||
|             opponentName: games.newGame.opponentName, | ||||
|             opponentColor: games.newGame.opponentColor, | ||||
|             board: null, // default board configuration | ||||
|             message: games.newGame.message | ||||
|         } | ||||
| 
 | ||||
|         onClick(reqParams); | ||||
|         onClick(games.newGame); | ||||
|     } | ||||
| 
 | ||||
|     return ( | ||||
|         <button className={'Create' + (hasOpponent ? ' ready' : '')} | ||||
|             onClick={prepareNewGameRequest} | ||||
|             onClick={validateNewGame} | ||||
|         > | ||||
|             <Wobler text="Create" dance={games.isPushingNewGame} /> | ||||
|         </button> | ||||
|  | ||||
| @ -9,30 +9,36 @@ export default function GameBoard() { | ||||
|   const games = useContext(GamesContext); | ||||
|   const { pathname } = useLocation(); | ||||
| 
 | ||||
|   const [opponentName, opponentColor, myColor] = (() => { | ||||
|   const game = (() => { | ||||
|     if (matchPath('/games/new', pathname)) | ||||
|       return [games.newGame.opponentName, games.newGame.opponentColor, Color.opposite(games.newGame.opponentColor)]; | ||||
| 
 | ||||
|     let selectedGame; | ||||
|       return gameFrom(games.newGame); | ||||
| 
 | ||||
|     if (matchPath('/games/proposal', pathname)) | ||||
|       selectedGame = games.findGame({ uuid: games.proposal.selectedUUID }); | ||||
|       return games.findGame({ uuid: games.proposal.selectedUUID }); | ||||
|     else if (matchPath('/games/active', pathname)) | ||||
|       selectedGame = games.findGame({ uuid: games.active.selectedUUID }); | ||||
|       return games.findGame({ uuid: games.active.selectedUUID }); | ||||
|     else if (matchPath('/games/archive', pathname)) | ||||
|       selectedGame = games.findGame({ uuid: games.archive.selectedUUID }); | ||||
|       return games.findGame({ uuid: games.archive.selectedUUID }); | ||||
| 
 | ||||
|     if (selectedGame) | ||||
|       return [selectedGame?.opponentName, Color.opposite(selectedGame?.myColor), selectedGame?.myColor]; | ||||
|     else | ||||
|       return ['', Color.white, Color.black]; //  defaults | ||||
|     return {}; //  defaults | ||||
|   })(); // <<-- Execute | ||||
| 
 | ||||
|   const opponentColor = Color.opposite(game?.myColor); | ||||
| console.log("game", game) | ||||
|   return ( | ||||
|     <div className='GameBoard'> | ||||
|       <Player color={opponentColor} name={opponentName} /> | ||||
|       <Board /> | ||||
|       <Player color={myColor} name={opponentName ? 'MyName' : ''} /> | ||||
|       <Player color={opponentColor || Color.white} name={game?.opponentName} /> | ||||
|       <Board game={game} /> | ||||
|       <Player color={game?.myColor || Color.black} name={game?.opponentName ? 'MyName' : ''} /> | ||||
|     </div> | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function gameFrom(newGame) { | ||||
|   return { | ||||
|     myColor: Color.opposite(newGame.opponentColor), | ||||
|     opponentName: newGame.opponentName, | ||||
|     opponentColor: newGame.opponentColor, | ||||
|     board: newGame.board, | ||||
|   }; | ||||
| } | ||||
| @ -7,6 +7,7 @@ export const gamesInitialState = { | ||||
|   newGame: { | ||||
|     opponentName: '', | ||||
|     opponentColor: '', | ||||
|     board: null, | ||||
|     message: '', | ||||
|   }, | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user