mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-29 21:49:50 +01:00
loader
This commit is contained in:
1 parent
078bc9d6cd
commit
6e35c06cfc
4 files changed
+81
-25
No files matched your search
@@ -0,0 +1,44 @@
|
|||||||
|
.loader {
|
||||||
|
position: absolute;
|
||||||
|
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--space-5);
|
||||||
|
|
||||||
|
opacity: 1;
|
||||||
|
filter: blur(0);
|
||||||
|
|
||||||
|
transition: var(--duration-subtle);
|
||||||
|
|
||||||
|
&[data-visible="false"] {
|
||||||
|
opacity: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
|
||||||
|
filter: blur(4rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
height: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress {
|
||||||
|
height: var(--space-2);
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
background-color: var(--gray-3);
|
||||||
|
|
||||||
|
border-radius: calc(var(--space-2) / 2);
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.bar {
|
||||||
|
height: 100%;
|
||||||
|
background-color: var(--accent-9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import { alias } from "@blitzkit/core";
|
||||||
|
import { useProgress } from "@react-three/drei";
|
||||||
|
import { Tankopedia } from "../../stores/tankopedia";
|
||||||
|
import styles from "./index.module.css";
|
||||||
|
|
||||||
|
export function TankSandboxLoader() {
|
||||||
|
const tank = Tankopedia.use((state) => state.protagonist.tank);
|
||||||
|
const revealed = Tankopedia.use((state) => state.revealed);
|
||||||
|
|
||||||
|
const data = useProgress();
|
||||||
|
|
||||||
|
const isVisible = !revealed;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.loader} data-visible={isVisible}>
|
||||||
|
<img
|
||||||
|
className={styles.icon}
|
||||||
|
src={alias("api", `/tanks/${tank}/icons/big.webp`)}
|
||||||
|
/>
|
||||||
|
<Progress value={data.progress} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ProgressProps {
|
||||||
|
value: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Progress({ value }: ProgressProps) {
|
||||||
|
return (
|
||||||
|
<div className={styles.progress}>
|
||||||
|
<div className={styles.bar} style={{ width: `${value}%` }} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
import { alias } from "@blitzkit/core";
|
|
||||||
import { Flex, type FlexProps, Progress } from "@radix-ui/themes";
|
|
||||||
import { useProgress } from "@react-three/drei";
|
|
||||||
|
|
||||||
type TankSandboxLoaderProps = Omit<FlexProps, "id"> & {
|
|
||||||
id: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
export function TankSandboxLoader({ id, ...props }: TankSandboxLoaderProps) {
|
|
||||||
const data = useProgress();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Flex width="100%" height="100%" align="center" justify="center" {...props}>
|
|
||||||
<img
|
|
||||||
src={alias("api", `/tanks/${id}/icons/big.webp`)}
|
|
||||||
style={{ height: "75%", filter: "blur(1rem)" }}
|
|
||||||
/>
|
|
||||||
<Progress
|
|
||||||
size="3"
|
|
||||||
value={data.progress}
|
|
||||||
style={{ position: "absolute", width: "16rem", maxWidth: "50vw" }}
|
|
||||||
/>
|
|
||||||
</Flex>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -24,6 +24,7 @@ import { StaticArmor, type ThicknessRange } from "../StaticArmor";
|
|||||||
import { TankModel } from "../TankModel";
|
import { TankModel } from "../TankModel";
|
||||||
import { TankopediaAntagonistControl } from "../TankopediaAntagonistControl";
|
import { TankopediaAntagonistControl } from "../TankopediaAntagonistControl";
|
||||||
import { TankopediaSkinSwitcher } from "../TankopediaSkinSwitcher";
|
import { TankopediaSkinSwitcher } from "../TankopediaSkinSwitcher";
|
||||||
|
import { TankSandboxLoader } from "../TankSandboxLoader";
|
||||||
import styles from "./index.module.css";
|
import styles from "./index.module.css";
|
||||||
|
|
||||||
type TankSandboxProps = MaybeSkeletonComponentProps & {
|
type TankSandboxProps = MaybeSkeletonComponentProps & {
|
||||||
@@ -172,6 +173,7 @@ export function TankopediaSandbox({
|
|||||||
{!skeleton && <Content thicknessRange={thicknessRange} />}
|
{!skeleton && <Content thicknessRange={thicknessRange} />}
|
||||||
</SmartCanvas>
|
</SmartCanvas>
|
||||||
|
|
||||||
|
<TankSandboxLoader />
|
||||||
<TankopediaSkinSwitcher />
|
<TankopediaSkinSwitcher />
|
||||||
<TankopediaAntagonistControl
|
<TankopediaAntagonistControl
|
||||||
antagonistCharacteristics={antagonistCharacteristics}
|
antagonistCharacteristics={antagonistCharacteristics}
|
||||||
|
|||||||
Reference in new issue
Block a user