From 9ed4fc0a39b1d510175c5b0ea0d5cea3075917fb Mon Sep 17 00:00:00 2001 From: sorrelbri Date: Wed, 24 Jun 2020 16:53:31 -0700 Subject: [PATCH] draw game record on canvas when menu is opened --- .../src/components/GameUI/Menu/Menu.js | 62 ++++++++++++++++++- .../src/components/GameUI/Menu/Menu.scss | 10 +++ 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/packages/play-node-go/src/components/GameUI/Menu/Menu.js b/packages/play-node-go/src/components/GameUI/Menu/Menu.js index 3ef8e1e..b18aea7 100644 --- a/packages/play-node-go/src/components/GameUI/Menu/Menu.js +++ b/packages/play-node-go/src/components/GameUI/Menu/Menu.js @@ -1,19 +1,75 @@ -import React from "react"; +import React, { useEffect, useRef } from "react"; import "./Menu.scss"; const Menu = ({ showMenu, clickClose, ...props }) => { + const { active, meta } = props.state; // active.game.boardSize, meta.gameRecord + const boardSize = active.game.boardSize; const handleBackgroundClick = (e) => { if (e.target.className === "Game__Menu-container") clickClose(); }; + const canvasRef = useRef(); + const drawGameRecord = () => { + return ; + }; + + useEffect(() => { + const canvas = canvasRef.current; + const ctx = canvas.getContext("2d"); + const scale = Math.min(window.innerWidth * 0.75, 500); + canvas.height = scale; + canvas.width = scale; + const space = scale / boardSize; + const offset = space / 2; + for (let i = 0; i < boardSize; i++) { + const start = i * space + offset; + const end = scale - offset; + ctx.beginPath(); + ctx.moveTo(start, offset); + ctx.lineTo(start, end); + ctx.closePath(); + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(offset, start); + ctx.lineTo(end, start); + ctx.closePath(); + ctx.stroke(); + } + if (!meta?.gameRecord) return; + meta.gameRecord.forEach(({ player, pos }, index) => { + ctx.beginPath(); + ctx.arc( + (pos.y - 1) * space + offset, + (pos.x - 1) * space + offset, + offset * 0.95, + 0, + Math.PI * 2, + true + ); + ctx.stroke(); + ctx.fillStyle = player === "white" ? "#fff" : "#000"; + ctx.fill(); + ctx.fillStyle = player === "white" ? "#000" : "#fff"; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillText( + index + 1, + (pos.y - 1) * space + offset, + (pos.x - 1) * space + offset + ); + }); + }, [showMenu, meta]); - if (!showMenu) return <>; return (
handleBackgroundClick(e)} >
+
+ {drawGameRecord()} +
+
); diff --git a/packages/play-node-go/src/components/GameUI/Menu/Menu.scss b/packages/play-node-go/src/components/GameUI/Menu/Menu.scss index 3dcafc4..0890ae6 100644 --- a/packages/play-node-go/src/components/GameUI/Menu/Menu.scss +++ b/packages/play-node-go/src/components/GameUI/Menu/Menu.scss @@ -1,4 +1,8 @@ div.Game__Menu-container { + &--hidden { + display: none; + } + background: rgba(0,0,0,0.5); display: flex; justify-content: center; @@ -13,4 +17,10 @@ div.Game__Menu-container { width: 80vw; min-height: 20vh; } + + div.Game__Menu__game-record-container { + display: flex; + flex-flow: column nowrap; + align-items: center; + } } \ No newline at end of file