Files
blitzkit/packages/website/src/components/GuessBackground/index.tsx
T

78 lines
2.4 KiB
TypeScript
Raw Normal View History

2025-09-01 19:22:38 -05:00
import { Box } from "@radix-ui/themes";
import { useEffect } from "react";
import { awaitableModelDefinitions } from "../../core/awaitables/modelDefinitions";
import { awaitableProvisionDefinitions } from "../../core/awaitables/provisionDefinitions";
import { tankToDuelMember } from "../../core/blitzkit/tankToDuelMember";
import { Var } from "../../core/radix/var";
import { Duel } from "../../stores/duel";
2025-09-01 22:56:39 -05:00
import { Guess, GuessState } from "../../stores/guess";
import { Tankopedia } from "../../stores/tankopedia";
2025-09-01 19:22:38 -05:00
import "./index.css";
2025-05-04 21:39:09 -05:00
const [modelDefinitions, provisionDefinitions] = await Promise.all([
awaitableModelDefinitions,
awaitableProvisionDefinitions,
]);
export function GuessBackground() {
2025-09-01 19:22:38 -05:00
const guessState = Guess.use((state) => state.guessState);
const tank = Guess.use((state) => state.tank);
2025-05-04 21:39:09 -05:00
useEffect(() => {
2025-09-02 16:24:13 -05:00
Duel.mutate((state) => {
2025-08-29 13:42:44 -05:00
state.protagonist = tankToDuelMember(tank, provisionDefinitions);
2025-05-04 21:39:09 -05:00
});
2025-09-01 22:56:39 -05:00
Tankopedia.mutate((state) => {
2025-05-04 21:39:09 -05:00
state.model = modelDefinitions.models[tank.id];
});
}, [tank]);
return (
<>
<Box
position="absolute"
width="100%"
height="100%"
top="0"
left="0"
style={{
2025-09-01 19:22:38 -05:00
transitionDuration: "2s",
2025-05-05 21:05:46 -05:00
backgroundColor: Var(
2025-09-01 22:55:31 -05:00
guessState === GuessState.NotGuessed
2025-09-01 19:22:38 -05:00
? "accent-2"
2025-09-01 22:55:31 -05:00
: guessState === GuessState.Correct
2025-09-01 19:22:38 -05:00
? "jade-3"
: "tomato-3"
2025-05-05 21:05:46 -05:00
),
2025-05-04 21:39:09 -05:00
}}
2025-05-05 21:22:05 -05:00
>
<Box
width="100%"
height="100%"
style={{
2025-09-01 19:22:38 -05:00
background: `radial-gradient(circle, ${Var("color-panel-translucent")}, ${Var("color-panel-solid")})`,
2025-05-05 21:22:05 -05:00
}}
/>
</Box>
2025-05-04 21:39:09 -05:00
<Box
className="guess-background"
position="absolute"
width="200%"
height="200%"
top="0"
left="0"
style={{
backgroundImage: `
2025-09-01 19:22:38 -05:00
radial-gradient(circle, ${Var("white-a1")} 20%, transparent 20%),
radial-gradient(circle at 0 0, ${Var("white-a1")} 10%, transparent 10%),
radial-gradient(circle at 100% 0, ${Var("white-a1")} 10%, transparent 10%),
radial-gradient(circle at 0 100%, ${Var("white-a1")} 10%, transparent 10%),
radial-gradient(circle at 100% 100%, ${Var("white-a1")} 10%, transparent 10%)
2025-05-04 21:39:09 -05:00
`,
2025-09-01 19:22:38 -05:00
backgroundSize: "4rem 4rem",
2025-05-04 21:39:09 -05:00
}}
/>
</>
);
}