Synthetic changes based on coding preferences

This commit is contained in:
aronmal 2023-08-05 23:25:25 +02:00
parent a95c0b1f7f
commit 6e9485df22
Signed by: aronmal
GPG key ID: 816B7707426FC612
12 changed files with 107 additions and 99 deletions

View file

@ -141,7 +141,7 @@ function BorderTiles() {
: true), : true),
}) })
} }
></div> />
) )
})} })}
</> </>

View file

@ -329,7 +329,7 @@ function EventBar({ clear }: { clear: () => void }) {
return ( return (
<div className="event-bar"> <div className="event-bar">
{menu !== "main" && ( {menu !== "main" ? (
<Item <Item
props={{ props={{
icon: faReply, icon: faReply,
@ -339,13 +339,13 @@ function EventBar({ clear }: { clear: () => void }) {
useGameProps.setState({ menu: "main" }) useGameProps.setState({ menu: "main" })
}, },
}} }}
></Item> />
)} ) : null}
{items[menu].map((e, i) => { {items[menu].map((e, i) => {
if (!isActiveIndex && menu === "main" && i === 1) return if (!isActiveIndex && menu === "main" && i === 1) return
return <Item key={i} props={e} /> return <Item key={i} props={e} />
})} })}
{menu === "moves" && ( {menu === "moves" ? (
<Item <Item
props={{ props={{
icon: icon:
@ -362,29 +362,32 @@ function EventBar({ clear }: { clear: () => void }) {
payload?.game?.state === "running" && mode >= 0 && target.show, payload?.game?.state === "running" && mode >= 0 && target.show,
callback: () => { callback: () => {
if (selfIndex < 0) return if (selfIndex < 0) return
if (payload?.game?.state === "starting") { switch (payload?.game?.state) {
const isReady = !userStates[selfIndex].isReady case "starting":
setIsReady({ isReady, i: selfIndex }) const isReady = !userStates[selfIndex].isReady
socket.emit("isReady", isReady) setIsReady({ isReady, i: selfIndex })
} socket.emit("isReady", isReady)
if (payload?.game?.state === "running") { break
const i = (selfUser?.moves ?? [])
.map((e) => e.index) case "running":
.reduce((prev, curr) => (curr > prev ? curr : prev), 0) const i = (selfUser?.moves ?? [])
const props = { .map((e) => e.index)
type: modes[mode].type, .reduce((prev, curr) => (curr > prev ? curr : prev), 0)
x: target.x, const props = {
y: target.y, type: modes[mode].type,
orientation: target.orientation, x: target.x,
index: (selfUser?.moves ?? []).length ? i + 1 : 0, y: target.y,
} orientation: target.orientation,
socket.emit("dispatchMove", props) index: (selfUser?.moves ?? []).length ? i + 1 : 0,
setTarget((t) => ({ ...t, show: false })) }
socket.emit("dispatchMove", props)
setTarget((t) => ({ ...t, show: false }))
break
} }
}, },
}} }}
></Item> />
)} ) : null}
</div> </div>
) )
} }

View file

@ -20,7 +20,7 @@ import Ships from "./Ships"
export const count = 12 export const count = 12
function Gamefield() { function Gamefield() {
const { isActiveIndex, selfUser } = useIndex() const { selfUser } = useIndex()
const router = useRouter() const router = useRouter()
const { const {
userStates, userStates,
@ -110,17 +110,15 @@ function Gamefield() {
setMouseCursor((e) => ({ ...e, shouldShow: false })) setMouseCursor((e) => ({ ...e, shouldShow: false }))
} }
> >
{/* Bordes */}
<BorderTiles /> <BorderTiles />
{/* Collumn lettes and row numbers */} {/* Collumn lettes and row numbers */}
<Labeling /> <Labeling />
{/* Ships */} <Ships />
<HitElems />
{(payload?.game?.state !== "running" || !isActiveIndex) && <Ships />} <HitElems />
{/* Fog images */}
{/* <FogImages /> */} {/* <FogImages /> */}
<Targets /> <Targets />

View file

@ -40,9 +40,7 @@ function Item({
> >
<HexColorPicker color={color} onChange={setColor} /> <HexColorPicker color={color} onChange={setColor} />
</div> </div>
) : ( ) : null}
<></>
)}
<div <div
className={classNames("container", { className={classNames("container", {
amount: typeof amount !== "undefined", amount: typeof amount !== "undefined",

View file

@ -1,8 +1,12 @@
import { useGameProps } from "@hooks/useGameProps"
import useIndex from "@hooks/useIndex" import useIndex from "@hooks/useIndex"
import Ship from "./Ship" import Ship from "./Ship"
function Ships() { function Ships() {
const { selfUser } = useIndex() const { payload } = useGameProps()
const { isActiveIndex, selfUser } = useIndex()
if (payload?.game?.state === "running" && isActiveIndex) return null
return ( return (
<>{selfUser?.ships.map((props, i) => <Ship key={i} props={props} />)}</> <>{selfUser?.ships.map((props, i) => <Ship key={i} props={props} />)}</>

View file

@ -15,52 +15,57 @@ function Targets() {
const { payload, target, targetPreview, mode } = useGameProps() const { payload, target, targetPreview, mode } = useGameProps()
const { ships } = useShips() const { ships } = useShips()
if (payload?.game?.state === "running") switch (payload?.game?.state) {
return ( case "running":
<> return (
{[ <>
...composeTargetTiles(target, mode, activeUser?.hits ?? []).map( {[
(props, i) => <GamefieldPointer key={"t" + i} props={props} />, ...composeTargetTiles(target, mode, activeUser?.hits ?? []).map(
), (props, i) => <GamefieldPointer key={"t" + i} props={props} />,
...composeTargetTiles( ),
targetPreview, ...composeTargetTiles(
mode, targetPreview,
activeUser?.hits ?? [], mode,
).map((props, i) => ( activeUser?.hits ?? [],
<GamefieldPointer key={"p" + i} props={props} preview /> ).map((props, i) => (
)), <GamefieldPointer key={"p" + i} props={props} preview />
]} )),
</> ]}
) </>
)
if (payload?.game?.state === "starting" && mode >= 0 && targetPreview.show) { case "starting":
const ship = shipProps(ships, mode, targetPreview) if (mode < 0 && !targetPreview.show) return null
const { fields, borders, score } = intersectingShip(ships, ship) const ship = shipProps(ships, mode, targetPreview)
return ( const { fields, borders, score } = intersectingShip(ships, ship)
<> return (
<Ship <>
preview <Ship
warn={score > 0} preview
color={fields.length ? "red" : borders.length ? "orange" : undefined} warn={score > 0}
key={targetPreview.orientation} color={
props={ship} fields.length ? "red" : borders.length ? "orange" : undefined
/> }
<HitElems key={targetPreview.orientation}
props={{ props={ship}
hits: fields.map((e, i) => ({ ...e, i, hit: true })), />
}} <HitElems
/> props={{
<HitElems hits: fields.map((e, i) => ({ ...e, i, hit: true })),
props={{ }}
hits: borders.map((e, i) => ({ ...e, i, hit: true })), />
colorOverride: "orange", <HitElems
}} props={{
/> hits: borders.map((e, i) => ({ ...e, i, hit: true })),
</> colorOverride: "orange",
) }}
/>
</>
)
default:
return null
} }
return <></>
} }
export default Targets export default Targets

View file

@ -86,7 +86,7 @@ function Grid() {
className={classNames("tile", { active: active })} className={classNames("tile", { active: active })}
style={{ "--delay": pos + "s" } as CSSProperties} style={{ "--delay": pos + "s" } as CSSProperties}
onClick={() => doEffect(x, y)} onClick={() => doEffect(x, y)}
></div> />
) )
} }

View file

@ -87,7 +87,7 @@ function Grid2() {
className={classNames("tile", active ? "active" : "inactive")} className={classNames("tile", active ? "active" : "inactive")}
style={{ "--delay": pos + "s" } as CSSProperties} style={{ "--delay": pos + "s" } as CSSProperties}
onClick={() => doEffect(x, y)} onClick={() => doEffect(x, y)}
></div> />
) )
} }

View file

@ -78,9 +78,7 @@ function Player({
icon={faCaretDown} icon={faCaretDown}
/> />
</button> </button>
) : ( ) : null}
<></>
)}
</div> </div>
<Button <Button
type={isConnected ? (isReady ? "green" : "orange") : "gray"} type={isConnected ? (isReady ? "green" : "orange") : "gray"}

View file

@ -38,7 +38,7 @@ export default function Game() {
return ( return (
<div className="h-full bg-theme"> <div className="h-full bg-theme">
<div className="mx-auto flex h-full max-w-screen-md flex-col items-center justify-evenly"></div> <div className="mx-auto flex h-full max-w-screen-md flex-col items-center justify-evenly" />
</div> </div>
) )
} }

View file

@ -33,7 +33,7 @@ export default function Lobby() {
<LobbyFrame openSettings={() => setSettings(true)} /> <LobbyFrame openSettings={() => setSettings(true)} />
</div> </div>
<BurgerMenu blur={settings} /> <BurgerMenu blur={settings} />
{settings ? <Settings closeSettings={() => setSettings(false)} /> : <></>} {settings ? <Settings closeSettings={() => setSettings(false)} /> : null}
</div> </div>
) )
} }

View file

@ -129,19 +129,21 @@ function Login() {
</button> </button>
</div> </div>
</div> </div>
{errorType && <hr className="mt-8 border-gray-400" />} {errorType ? (
{errorType && ( <>
<div className="flex flex-col items-center"> <hr className="mt-8 border-gray-400" />
<button <div className="flex flex-col items-center">
id="back" <button
onClick={() => router.push("/")} id="back"
className="mt-10 rounded-lg border-2 border-gray-400 bg-gray-500 bg-opacity-75 px-16 py-2 text-white shadow-inner drop-shadow-md backdrop-blur-md transition-colors duration-300 hover:border-blue-600" onClick={() => router.push("/")}
> className="mt-10 rounded-lg border-2 border-gray-400 bg-gray-500 bg-opacity-75 px-16 py-2 text-white shadow-inner drop-shadow-md backdrop-blur-md transition-colors duration-300 hover:border-blue-600"
<FontAwesomeIcon icon={faLeftLong} /> >
<span className="mx-4 font-bold">Return</span> <FontAwesomeIcon icon={faLeftLong} />
</button> <span className="mx-4 font-bold">Return</span>
</div> </button>
)} </div>
</>
) : null}
</div> </div>
</div> </div>
) )