From 3475186651249f144ccbcab32347af6dd839cadd Mon Sep 17 00:00:00 2001 From: ECWireless Date: Mon, 10 Jun 2024 07:44:49 -0600 Subject: [PATCH 1/3] Add MapPanel component --- packages/client/public/icons/navigation.svg | 3 + packages/client/src/components/MapPanel.tsx | 117 ++++++++++++++++++++ packages/client/src/pages/GameBoard.tsx | 4 +- packages/client/src/utils/theme.ts | 1 + 4 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 packages/client/public/icons/navigation.svg create mode 100644 packages/client/src/components/MapPanel.tsx diff --git a/packages/client/public/icons/navigation.svg b/packages/client/public/icons/navigation.svg new file mode 100644 index 000000000..20f47ab60 --- /dev/null +++ b/packages/client/public/icons/navigation.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/client/src/components/MapPanel.tsx b/packages/client/src/components/MapPanel.tsx new file mode 100644 index 000000000..79a7883f2 --- /dev/null +++ b/packages/client/src/components/MapPanel.tsx @@ -0,0 +1,117 @@ +import { Box, Button, HStack, Image, Text, VStack } from '@chakra-ui/react'; +import { useCallback, useState } from 'react'; + +const SAFE_ZONE_AREA = { + topLeft: { x: 0, y: 4 }, + bottomRight: { x: 4, y: 0 }, +}; + +export const MapPanel = (): JSX.Element => { + const [position, setPosition] = useState<{ x: number; y: number }>({ + x: 0, + y: 0, + }); + + const onMove = useCallback( + async (direction: 'up' | 'down' | 'left' | 'right') => { + setPosition(prevPosition => { + switch (direction) { + case 'up': + return { x: prevPosition.x, y: prevPosition.y + 1 }; + case 'down': + return { x: prevPosition.x, y: prevPosition.y - 1 }; + case 'left': + return { x: prevPosition.x - 1, y: prevPosition.y }; + case 'right': + return { x: prevPosition.x + 1, y: prevPosition.y }; + default: + return prevPosition; + } + }); + }, + [], + ); + + return ( + + + {[...Array(100)].map((_, i) => { + const row = 9 - Math.floor(i / 10); // Reverse the row + const col = i % 10; + const currentTile = position.x === col && position.y === row; + + const hasSafeZoneTopBorder = + row === SAFE_ZONE_AREA.topLeft.y && + col >= SAFE_ZONE_AREA.topLeft.x && + col <= SAFE_ZONE_AREA.bottomRight.x; + + const hasSafeZoneRightBorder = + col === SAFE_ZONE_AREA.bottomRight.x && + row >= SAFE_ZONE_AREA.bottomRight.y && + row <= SAFE_ZONE_AREA.topLeft.y; + + return ( + + {currentTile && } + + ); + })} + + + + + + {position.x}, {position.y} + + + Dark Cave - 2,344 Players + + + + + + + + + + + ); +}; + +const CharacterPiece = (): JSX.Element => ( + +); diff --git a/packages/client/src/pages/GameBoard.tsx b/packages/client/src/pages/GameBoard.tsx index 8a90a6aff..d14244aab 100644 --- a/packages/client/src/pages/GameBoard.tsx +++ b/packages/client/src/pages/GameBoard.tsx @@ -1,5 +1,6 @@ import { Grid, GridItem, Heading } from '@chakra-ui/react'; +import { MapPanel } from '../components/MapPanel'; import { StatsPanel } from '../components/StatsPanel'; export const GameBoard = (): JSX.Element => { @@ -43,7 +44,6 @@ export const GameBoard = (): JSX.Element => { ActionPanel { rowSpan={{ base: 4, md: 8 }} rowStart={{ base: 9, md: 0 }} > - MapPanel + Date: Mon, 10 Jun 2024 08:46:39 -0600 Subject: [PATCH 2/3] Add navigation compass --- packages/client/public/icons/navigation.svg | 3 - packages/client/src/components/MapPanel.tsx | 133 +++++++++++++++++--- 2 files changed, 114 insertions(+), 22 deletions(-) delete mode 100644 packages/client/public/icons/navigation.svg diff --git a/packages/client/public/icons/navigation.svg b/packages/client/public/icons/navigation.svg deleted file mode 100644 index 20f47ab60..000000000 --- a/packages/client/public/icons/navigation.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/client/src/components/MapPanel.tsx b/packages/client/src/components/MapPanel.tsx index 79a7883f2..881bc578c 100644 --- a/packages/client/src/components/MapPanel.tsx +++ b/packages/client/src/components/MapPanel.tsx @@ -1,5 +1,13 @@ -import { Box, Button, HStack, Image, Text, VStack } from '@chakra-ui/react'; +import { Box, Button, HStack, Text, VStack } from '@chakra-ui/react'; import { useCallback, useState } from 'react'; +import { BiSolidNavigation } from 'react-icons/bi'; +import { + IoIosArrowDropdownCircle, + IoIosArrowDropleftCircle, + IoIosArrowDroprightCircle, + IoIosArrowDropupCircle, +} from 'react-icons/io'; +import { TbDirectionArrows } from 'react-icons/tb'; const SAFE_ZONE_AREA = { topLeft: { x: 0, y: 4 }, @@ -74,32 +82,119 @@ export const MapPanel = (): JSX.Element => { - + {position.x}, {position.y} Dark Cave - 2,344 Players - - - - - + + + + + W + + + + + + + E + + - + + + + S + + ); From 6f514001e43ca10d2488b81ac55eca4541f51816 Mon Sep 17 00:00:00 2001 From: ECWireless Date: Mon, 10 Jun 2024 08:48:42 -0600 Subject: [PATCH 3/3] Remove MapPanel border --- packages/client/src/pages/GameBoard.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/client/src/pages/GameBoard.tsx b/packages/client/src/pages/GameBoard.tsx index d14244aab..db8f749ac 100644 --- a/packages/client/src/pages/GameBoard.tsx +++ b/packages/client/src/pages/GameBoard.tsx @@ -8,7 +8,7 @@ export const GameBoard = (): JSX.Element => { @@ -44,10 +44,8 @@ export const GameBoard = (): JSX.Element => { ActionPanel