import { asset } from "@blitzkit/core";
import { CaretRightIcon, UpdateIcon } from "@radix-ui/react-icons";
import {
Box,
Button,
Dialog,
Flex,
Skeleton,
Text,
type ButtonProps,
} from "@radix-ui/themes";
import { useRef, useState } from "react";
import { MixerScene } from "../../../components/MixerScene";
import { PageWrapper } from "../../../components/PageWrapper";
import { ScreenshotButton } from "../../../components/ScreenshotButton";
import {
TankSearch,
type TankSearchProps,
} from "../../../components/TankSearch";
import { curateMixer } from "../../../core/blitzkit/curateMixer";
import {
LocaleProvider,
useLocale,
type LocaleAcceptorProps,
} from "../../../hooks/useLocale";
import { Mixer } from "../../../stores/mixer";
import type { MaybeSkeletonComponentProps } from "../../../types/maybeSkeletonComponentProps";
export function Page({
locale,
skeleton,
}: LocaleAcceptorProps & MaybeSkeletonComponentProps) {
const initial = useRef(curateMixer());
Mixer.useInitialization(initial.current);
return (
);
}
function ModuleButton({
skeleton,
tank,
onSelect,
...props
}: Omit &
MaybeSkeletonComponentProps & {
tank: number;
onSelect: TankSearchProps["onSelect"];
}) {
const { strings } = useLocale();
const [open, setOpen] = useState(false);
return (
{strings.website.common.tank_search.select_dialog_title}
{
onSelect?.(tank);
setOpen(false);
}}
/>
);
}
function ModuleSeparator() {
return (
);
}
function Content({ skeleton }: MaybeSkeletonComponentProps) {
const hull = Mixer.use((state) => state.hull);
const turretId = Mixer.use((state) => state.turret.tank.id);
const gunId = Mixer.use((state) => state.gun.tank.id);
const canvas = useRef(null!);
const { strings } = useLocale();
return (
{!skeleton && }
{strings.website.tools.mixer.screenshot}
{
Mixer.mutate((draft) => {
draft.hull = tank;
});
}}
/>
{
Mixer.mutate((draft) => {
draft.turret = {
tank,
turret: tank.turrets.at(-1)!,
};
});
}}
/>
{
Mixer.mutate((draft) => {
draft.gun = {
tank,
turret: tank.turrets.at(-1)!,
gun: tank.turrets.at(-1)!.guns.at(-1)!,
};
});
}}
/>
);
}