Synthetic changes based on coding preferences
This commit is contained in:
parent
a95c0b1f7f
commit
6e9485df22
12 changed files with 107 additions and 99 deletions
|
@ -141,7 +141,7 @@ function BorderTiles() {
|
||||||
: true),
|
: true),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
></div>
|
/>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
</>
|
</>
|
||||||
|
|
|
@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 />
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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} />)}</>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"}
|
||||||
|
|
|
@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue