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