From 85b346cce1685637f75e25b9b61d9fc78ffcaa13 Mon Sep 17 00:00:00 2001 From: Cody Seibert Date: Wed, 23 Oct 2024 10:45:05 -0400 Subject: [PATCH] allowing to expand and contract playground --- app/playground/page.tsx | 121 +++++++++++++++++++++++++++++++++------- 1 file changed, 102 insertions(+), 19 deletions(-) diff --git a/app/playground/page.tsx b/app/playground/page.tsx index 9fd4181..0a1bfd8 100644 --- a/app/playground/page.tsx +++ b/app/playground/page.tsx @@ -1,8 +1,14 @@ "use client"; -import * as React from "react"; +import { useEffect, useState } from "react"; import { useAction, useMutation, useQuery } from "convex/react"; -import { ChevronLeft, UploadIcon } from "lucide-react"; +import { + ChevronDown, + ChevronLeft, + ChevronRight, + ChevronUp, + UploadIcon, +} from "lucide-react"; import { useSearchParams } from "next/navigation"; import { Map } from "@/components/Map"; import { MapStatus } from "@/components/MapStatus"; @@ -31,23 +37,22 @@ export default function PlaygroundPage() { ); const adminMap = adminMapMaybe ?? null; const { toast } = useToast(); - const [map, setMap] = React.useState([ + const [map, setMap] = useState([ [" ", " ", " ", " ", " "], [" ", " ", " ", " ", " "], [" ", " ", " ", " ", " "], [" ", " ", " ", " ", " "], [" ", " ", " ", " ", " "], ]); - const [model, setModel] = React.useState(""); - const [error, setError] = React.useState(null); - const [solution, setSolution] = React.useState(null); - const [reasoning, setReasoning] = React.useState(null); - const [publishing, setPublishing] = React.useState(false); - const [simulating, setSimulating] = React.useState(false); - const [userPlaying, setUserPlaying] = React.useState(false); - const [userSolution, setUserSolution] = React.useState([]); - const [visualizingUserSolution, setVisualizingUserSolution] = - React.useState(false); + const [model, setModel] = useState(""); + const [error, setError] = useState(null); + const [solution, setSolution] = useState(null); + const [reasoning, setReasoning] = useState(null); + const [publishing, setPublishing] = useState(false); + const [simulating, setSimulating] = useState(false); + const [userPlaying, setUserPlaying] = useState(false); + const [userSolution, setUserSolution] = useState([]); + const [visualizingUserSolution, setVisualizingUserSolution] = useState(false); async function handlePublish() { if (!ZombieSurvival.mapHasZombies(map)) { @@ -172,7 +177,47 @@ export default function PlaygroundPage() { setVisualizingUserSolution(false); } - React.useEffect(() => { + function handleIncreaseUp() { + setMap([[...map[0].map(() => " ")], ...map.map((row) => [...row])]); + } + + function handleDecreaseUp() { + if (map.length > 1) { + setMap([...map.slice(1).map((row) => [...row])]); + } + } + + function handleIncreaseLeft() { + setMap(map.map((row) => [" ", ...row])); + } + + function handleDecreaseLeft() { + if (map[0].length > 1) { + setMap(map.map((row) => [...row.slice(1)])); + } + } + + function handleIncreaseDown() { + setMap([...map.map((row) => [...row]), [...map[0].map(() => " ")]]); + } + + function handleDecreaseDown() { + if (map.length > 1) { + setMap([...map.slice(0, -1).map((row) => [...row])]); + } + } + + function handleIncreaseRight() { + setMap(map.map((row) => [...row, " "])); + } + + function handleDecreaseRight() { + if (map[0].length > 1) { + setMap(map.map((row) => [...row.slice(0, -1)])); + } + } + + useEffect(() => { const maybeMap = window.localStorage.getItem(STORAGE_MAP_KEY); const maybeModel = window.localStorage.getItem(STORAGE_MODEL_KEY); @@ -184,7 +229,7 @@ export default function PlaygroundPage() { } }, []); - React.useEffect(() => { + useEffect(() => { if (adminMap !== null) { setMap(adminMap.grid); } @@ -199,9 +244,9 @@ export default function PlaygroundPage() {
{/* Left side: Grid */}
- + {!visualizing && !userPlaying && ( -

+

Click on the board to place or remove units. Use the buttons below to switch between unit types.

@@ -213,7 +258,7 @@ export default function PlaygroundPage() {

)}
{visualizing && ( + + {/* Grid expansion controls */} + {!userPlaying && !visualizing && ( + <> +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + )}
)}
@@ -295,7 +378,7 @@ export default function PlaygroundPage() {
{/* Right side: Action Panel */} - +
{userPlaying || solution !== null ? ( <>