From dd6be92a19e066568c171d29d51833151cd6eb57 Mon Sep 17 00:00:00 2001 From: ECWireless Date: Tue, 11 Jun 2024 15:45:52 -0600 Subject: [PATCH 1/7] General mobile-friendly improvements --- packages/client/src/App.tsx | 1 + packages/client/src/components/MapPanel.tsx | 4 +- .../client/src/pages/CharacterCreation.tsx | 1 - packages/client/src/pages/GameBoard.tsx | 59 ++++++++++--------- 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/packages/client/src/App.tsx b/packages/client/src/App.tsx index c948574b4..1576990b3 100644 --- a/packages/client/src/App.tsx +++ b/packages/client/src/App.tsx @@ -9,6 +9,7 @@ export const App = (): JSX.Element => { return ( { return ( diff --git a/packages/client/src/pages/CharacterCreation.tsx b/packages/client/src/pages/CharacterCreation.tsx index 60f4cbef1..6888d0b60 100644 --- a/packages/client/src/pages/CharacterCreation.tsx +++ b/packages/client/src/pages/CharacterCreation.tsx @@ -128,7 +128,6 @@ export const CharacterCreation = (): JSX.Element => { direction={{ base: 'column', lg: 'row' }} gap={{ base: 4, sm: 6 }} justifyContent="center" - maxW="1800px" mx="auto" my={4} onSubmit={onCreateCharacter} diff --git a/packages/client/src/pages/GameBoard.tsx b/packages/client/src/pages/GameBoard.tsx index 1621f9361..04a08ab26 100644 --- a/packages/client/src/pages/GameBoard.tsx +++ b/packages/client/src/pages/GameBoard.tsx @@ -9,71 +9,72 @@ export const GameBoard = (): JSX.Element => { return ( {/* Chat */} Tray From 37d780ad3085772d980c6faea19432424c5a5124 Mon Sep 17 00:00:00 2001 From: ECWireless Date: Tue, 11 Jun 2024 17:43:04 -0600 Subject: [PATCH 2/7] TileDetailsPanel mobile improvements --- packages/client/src/App.tsx | 2 +- packages/client/src/components/Header.tsx | 12 +- packages/client/src/components/MapPanel.tsx | 200 +++++++++--------- .../components/TileDetailsPanel/Monsters.tsx | 30 --- .../components/TileDetailsPanel/Players.tsx | 18 -- .../components/TileDetailsPanel/SafeZone.tsx | 34 --- .../src/components/TileDetailsPanel/data.ts | 40 ++++ .../src/components/TileDetailsPanel/index.tsx | 113 ++++++++-- packages/client/src/pages/GameBoard.tsx | 22 +- packages/client/src/utils/theme.ts | 9 + 10 files changed, 274 insertions(+), 206 deletions(-) delete mode 100644 packages/client/src/components/TileDetailsPanel/Monsters.tsx delete mode 100644 packages/client/src/components/TileDetailsPanel/Players.tsx delete mode 100644 packages/client/src/components/TileDetailsPanel/SafeZone.tsx create mode 100644 packages/client/src/components/TileDetailsPanel/data.ts diff --git a/packages/client/src/App.tsx b/packages/client/src/App.tsx index 1576990b3..8932af956 100644 --- a/packages/client/src/App.tsx +++ b/packages/client/src/App.tsx @@ -11,7 +11,7 @@ export const App = (): JSX.Element => { diff --git a/packages/client/src/components/Header.tsx b/packages/client/src/components/Header.tsx index 8fc6bee75..45489172b 100644 --- a/packages/client/src/components/Header.tsx +++ b/packages/client/src/components/Header.tsx @@ -11,8 +11,16 @@ export const Header = (): JSX.Element => { } return ( - - + + Ultimate Dominion diff --git a/packages/client/src/components/MapPanel.tsx b/packages/client/src/components/MapPanel.tsx index 805b0686a..76c2fbffe 100644 --- a/packages/client/src/components/MapPanel.tsx +++ b/packages/client/src/components/MapPanel.tsx @@ -98,124 +98,134 @@ export const MapPanel = (): JSX.Element => { Dark Cave - 2,344 Players - + + ); +}; + +const CharacterPiece = (): JSX.Element => ( + +); + +const NavigationCompass = ({ + onMove, +}: { + onMove: (direction: 'up' | 'down' | 'left' | 'right') => void; +}): JSX.Element => { + return ( + + + + + - - - - + + + + N + + + + + - N + W - - - - - W - - - - - - - E - - - + - S + E - + + + + + + S + ); }; - -const CharacterPiece = (): JSX.Element => ( - -); diff --git a/packages/client/src/components/TileDetailsPanel/Monsters.tsx b/packages/client/src/components/TileDetailsPanel/Monsters.tsx deleted file mode 100644 index e66d7b611..000000000 --- a/packages/client/src/components/TileDetailsPanel/Monsters.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Box, HStack, Spacer, Text } from '@chakra-ui/react'; - -export const Monsters = (): JSX.Element => { - return ( - - - Monsters - - - - Kobold - - Level 2 - - - - Green Slime - - Level 2 - - - - Cave Bandit - - Level 2 - - - - ); -}; diff --git a/packages/client/src/components/TileDetailsPanel/Players.tsx b/packages/client/src/components/TileDetailsPanel/Players.tsx deleted file mode 100644 index db3ca4e13..000000000 --- a/packages/client/src/components/TileDetailsPanel/Players.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Box, Text, VStack } from '@chakra-ui/react'; - -export const Players = (): JSX.Element => { - return ( - - - Players - - - Mon-o 🧙‍♂️ - GUATY 🎭 - Wolf R ※ - GUATY 🎭 - Wolf R ※ - - - ); -}; diff --git a/packages/client/src/components/TileDetailsPanel/SafeZone.tsx b/packages/client/src/components/TileDetailsPanel/SafeZone.tsx deleted file mode 100644 index dd5269e2e..000000000 --- a/packages/client/src/components/TileDetailsPanel/SafeZone.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Box, HStack, Text, VStack } from '@chakra-ui/react'; -import { IoIosArrowForward } from 'react-icons/io'; - -export const SafeZone = (): JSX.Element => { - return ( - - - Safe Zone - - - - Level 1 - - - - Level 2 - - - - Level 1 - - - - Level 2 - - - - Level 1 - - - - - ); -}; diff --git a/packages/client/src/components/TileDetailsPanel/data.ts b/packages/client/src/components/TileDetailsPanel/data.ts new file mode 100644 index 000000000..ba8c4a644 --- /dev/null +++ b/packages/client/src/components/TileDetailsPanel/data.ts @@ -0,0 +1,40 @@ +export const MONSTERS = [ + { + name: 'Kobold', + color: 'yellow', + level: 2, + }, + { + name: 'Green Slime', + color: 'green', + level: 2, + }, + { + name: 'Cave Bandit', + color: 'red', + level: 2, + }, +]; + +export const PLAYERS = [ + { + name: 'Mon-o 🧙‍♂️', + level: 1, + }, + { + name: 'GUATY 🎭', + level: 2, + }, + { + name: 'Wolf R ※', + level: 1, + }, + { + name: 'GUATY 🎭', + level: 1, + }, + { + name: 'Wolf R ※', + level: 2, + }, +]; diff --git a/packages/client/src/components/TileDetailsPanel/index.tsx b/packages/client/src/components/TileDetailsPanel/index.tsx index baaa3edc1..124123183 100644 --- a/packages/client/src/components/TileDetailsPanel/index.tsx +++ b/packages/client/src/components/TileDetailsPanel/index.tsx @@ -1,21 +1,104 @@ -import { Grid, GridItem } from '@chakra-ui/react'; +import { Box, Grid, GridItem, HStack, Text } from '@chakra-ui/react'; +import { IoIosArrowForward } from 'react-icons/io'; -import { Monsters } from './Monsters'; -import { Players } from './Players'; -import { SafeZone } from './SafeZone'; +import { MONSTERS, PLAYERS } from './data'; + +const ROW_HEIGHT = { base: 5, md: 8, lg: 10 }; export const TileDetailsPanel = (): JSX.Element => { return ( - - - - - - - - - - - + + + + + Monsters + + + + + Players + + + + + Safe Zone + + + + + + {MONSTERS.map((monster, i) => ( + + ))} + + + {PLAYERS.map((player, i) => ( + + ))} + + + {PLAYERS.map((player, i) => ( + + ))} + + + + ); +}; + +const MonsterRow = ({ monster }: { monster: (typeof MONSTERS)[0] }) => { + const { color, level, name } = monster; + + const isFighting = monster.name === 'Green Slime'; + + return ( + + + {name} + + + Level {level} + + + ); +}; + +const PlayerRow = ({ player }: { player: (typeof PLAYERS)[0] }) => { + const { name } = player; + + return ( + + {name} + + ); +}; + +const PlayerLevelRow = ({ player }: { player: (typeof PLAYERS)[0] }) => { + const { level } = player; + + return ( + + + Level {level} + + + ); }; diff --git a/packages/client/src/pages/GameBoard.tsx b/packages/client/src/pages/GameBoard.tsx index 04a08ab26..5c2e0d893 100644 --- a/packages/client/src/pages/GameBoard.tsx +++ b/packages/client/src/pages/GameBoard.tsx @@ -1,4 +1,4 @@ -import { Grid, GridItem, Heading } from '@chakra-ui/react'; +import { Grid, GridItem } from '@chakra-ui/react'; import { ActionsPanel } from '../components/ActionsPanel'; import { MapPanel } from '../components/MapPanel'; @@ -9,10 +9,10 @@ export const GameBoard = (): JSX.Element => { return ( { colSpan={{ base: 1, lg: 8 }} colStart={{ base: 0, lg: 5 }} overflowY="auto" - p={4} - rowSpan={{ base: 4, lg: 6 }} + p={{ base: 2, lg: 4 }} + rowSpan={{ base: 5, lg: 6 }} rowStart={{ base: 0, lg: 0 }} > @@ -41,16 +41,16 @@ export const GameBoard = (): JSX.Element => { colStart={{ base: 0, lg: 5 }} overflowY="auto" p={4} - rowSpan={{ base: 4, lg: 6 }} - rowStart={{ base: 5, lg: 7 }} + rowSpan={{ base: 5, lg: 6 }} + rowStart={{ base: 6, lg: 7 }} > @@ -66,7 +66,7 @@ export const GameBoard = (): JSX.Element => { > Chat */} - { rowStart={{ base: 13, lg: 0 }} > Tray - + */} ); }; diff --git a/packages/client/src/utils/theme.ts b/packages/client/src/utils/theme.ts index 7f9b73dba..b95d57204 100644 --- a/packages/client/src/utils/theme.ts +++ b/packages/client/src/utils/theme.ts @@ -98,6 +98,15 @@ const Progress = { }; const Text = { sizes: { + '4xs': { + fontSize: '6px', + }, + '3xs': { + fontSize: '8px', + }, + '2xs': { + fontSize: '10px', + }, xs: { fontSize: '12px', }, From 5aa88ea17f0611ffa9030f79f03faccd82ed29e0 Mon Sep 17 00:00:00 2001 From: ECWireless Date: Tue, 11 Jun 2024 17:54:10 -0600 Subject: [PATCH 3/7] Make ActionsPanel mobile improvements --- .../client/src/components/ActionsPanel.tsx | 311 ++++++++---------- 1 file changed, 135 insertions(+), 176 deletions(-) diff --git a/packages/client/src/components/ActionsPanel.tsx b/packages/client/src/components/ActionsPanel.tsx index 5cc0c339a..2143ec729 100644 --- a/packages/client/src/components/ActionsPanel.tsx +++ b/packages/client/src/components/ActionsPanel.tsx @@ -1,195 +1,154 @@ import { Stack, Text } from '@chakra-ui/react'; +enum ActionEvents { + Attack = 'attack', + Defend = 'defend against', + GainGold = 'gold', + GainExperience = 'experience', +} + +type BattleEvent = { + type: ActionEvents; + monster: string; + amount: number; +}; + +type ResolutionEvent = { + type: ActionEvents; + amount: number; +}; + +const BATTLE_EVENTS: BattleEvent[] = [ + { + type: ActionEvents.Defend, + amount: 1, + monster: 'Green Slime', + }, + { + type: ActionEvents.Attack, + amount: 2, + monster: 'Green Slime', + }, +]; + +const RESOLUTION_EVENTS: ResolutionEvent[] = [ + { + type: ActionEvents.GainGold, + amount: 2, + }, + { + type: ActionEvents.GainExperience, + amount: 3, + }, +]; + export const ActionsPanel = (): JSX.Element => { return ( - - You attack{' '} - - Green Slime - {' '} - for{' '} - - 2 damage - - . - - - - Green Slime - {' '} - attacks and misses! - - - You attack{' '} - - Green Slime - {' '} - for{' '} - - 1 damage - - . - - Green slime is slain! You gain 2 $GOLD! + {BATTLE_EVENTS.map((event, i) => ( + + You {event.type}{' '} + + {event.monster} + {' '} + {event.type === ActionEvents.Attack ? 'for' : 'taking'}{' '} + + {event.amount} damage + + . + + ))} - - You gain 2{' '} - - $GOLD - - ! - - - You gain 3{' '} - - experience - - ! - + {RESOLUTION_EVENTS.map((event, i) => ( + + You gain {event.amount}{' '} + + {event.type === ActionEvents.GainGold ? '$GOLD' : 'experience'} + + ! + + ))} - - You attack{' '} - - Green Slime - {' '} - for{' '} - - 2 damage - - . - - - - Green Slime - {' '} - attacks and misses! - - - You attack{' '} - - Green Slime - {' '} - for{' '} - - 1 damage - - . - - Green slime is slain! You gain 2 $GOLD! + {BATTLE_EVENTS.map((event, i) => ( + + You {event.type}{' '} + + {event.monster} + {' '} + {event.type === ActionEvents.Attack ? 'for' : 'taking'}{' '} + + {event.amount} damage + + . + + ))} - - You gain 2{' '} - - $GOLD - - ! - - - You gain 3{' '} - - experience - - ! - + {RESOLUTION_EVENTS.map((event, i) => ( + + You gain {event.amount}{' '} + + {event.type === ActionEvents.GainGold ? '$GOLD' : 'experience'} + + ! + + ))} - - You attack{' '} - - Green Slime - {' '} - for{' '} - - 2 damage - - . - - - - Green Slime - {' '} - attacks and misses! - - - You attack{' '} - - Green Slime - {' '} - for{' '} - - 1 damage - - . - - Green slime is slain! You gain 2 $GOLD! - - - - You gain 2{' '} - - $GOLD - - ! - - - You gain 3{' '} - - experience - - ! - + {BATTLE_EVENTS.map((event, i) => ( + + You {event.type}{' '} + + {event.monster} + {' '} + {event.type === ActionEvents.Attack ? 'for' : 'taking'}{' '} + + {event.amount} damage + + . + + ))} - - You attack{' '} - - Green Slime - {' '} - for{' '} - - 2 damage - - . - - - - Green Slime - {' '} - attacks and misses! - - - You attack{' '} - - Green Slime - {' '} - for{' '} - - 1 damage - - . - - Green slime is slain! You gain 2 $GOLD! - - - - You gain 2{' '} - - $GOLD - - ! - - - You gain 3{' '} - - experience - - ! - + {RESOLUTION_EVENTS.map((event, i) => ( + + You gain {event.amount}{' '} + + {event.type === ActionEvents.GainGold ? '$GOLD' : 'experience'} + + ! + + ))} ); From 0a8be612240ba46b71f9d45b94d20ba31a3c43fe Mon Sep 17 00:00:00 2001 From: ECWireless Date: Tue, 11 Jun 2024 18:24:35 -0600 Subject: [PATCH 4/7] Make MapsPanel responsive --- packages/client/src/App.tsx | 9 +++++-- packages/client/src/components/MapPanel.tsx | 26 ++++++++++++--------- packages/client/src/pages/GameBoard.tsx | 16 ++++++------- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/packages/client/src/App.tsx b/packages/client/src/App.tsx index 8932af956..222074d61 100644 --- a/packages/client/src/App.tsx +++ b/packages/client/src/App.tsx @@ -1,4 +1,4 @@ -import { Grid } from '@chakra-ui/react'; +import { Box, Grid, useBreakpointValue } from '@chakra-ui/react'; import { BrowserRouter as Router } from 'react-router-dom'; import { Footer } from './components/Footer'; @@ -6,6 +6,7 @@ import { Header } from './components/Header'; import AppRoutes from './Routes'; export const App = (): JSX.Element => { + const isMobile = useBreakpointValue({ base: true, lg: false }); return ( { >
-