feat: tweak a few things and enable guess game

This commit is contained in:
TrèsAbhi committed 2025-08-27 17:43:42 -05:00
1 parent aea4905d20
commit 5747d7549f
6 files changed
+49 -56

No files matched your search

@@ -5,7 +5,7 @@ import { Controls } from './Tankopedia/HeroSection/components/TankSandbox/compon
import { Lighting } from './Tankopedia/HeroSection/components/TankSandbox/components/Lighting'; import { Lighting } from './Tankopedia/HeroSection/components/TankSandbox/components/Lighting';
import { TankModel } from './Tankopedia/HeroSection/components/TankSandbox/components/TankModel'; import { TankModel } from './Tankopedia/HeroSection/components/TankSandbox/components/TankModel';
const BRIGHTNESS = 2 ** -5; const BRIGHTNESS = 2 ** -5.5;
const CONTRAST = 2 ** 2; const CONTRAST = 2 ** 2;
export function GuessRenderer() { export function GuessRenderer() {
@@ -16,13 +16,12 @@ export function GuessRenderer() {
<SmartCanvas <SmartCanvas
style={{ style={{
filter: `grayscale(${isRevealed ? 0 : 1}) contrast(${isRevealed ? 1 : CONTRAST}) brightness(${isRevealed ? 1 : BRIGHTNESS})`, filter: `grayscale(${isRevealed ? 0 : 1}) contrast(${isRevealed ? 1 : CONTRAST}) brightness(${isRevealed ? 1 : BRIGHTNESS})`,
// filter: `drop-shadow(0 0 1rem ${Var('black-a11')})`,
transitionDuration: isRevealed ? '2s' : undefined, transitionDuration: isRevealed ? '2s' : undefined,
transitionProperty: 'filter', transitionProperty: 'filter',
}} }}
camera={{ position: [-5, 5, -5] }} camera={{ position: [-5, 5, -5] }}
> >
<Controls distanceScale={2} zoomable={false} /> <Controls zoomable={false} />
<Lighting display={TankopediaDisplay.Model} /> <Lighting display={TankopediaDisplay.Model} />
<TankModel /> <TankModel />
</SmartCanvas> </SmartCanvas>
+1 -1
View File
@@ -88,7 +88,7 @@ export function Guesser() {
position="absolute" position="absolute"
bottom="0" bottom="0"
left="50%" left="50%"
style={{ transform: 'translateX(-50%)' }} style={{ transform: 'translateX(-50%)', pointerEvents: 'none' }}
width="100%" width="100%"
p="4" p="4"
maxWidth="25rem" maxWidth="25rem"
@@ -24,7 +24,6 @@ interface ControlsProps {
autoRotate?: boolean; autoRotate?: boolean;
zoomable?: boolean; zoomable?: boolean;
enableRotate?: boolean; enableRotate?: boolean;
distanceScale?: number;
} }
export function Controls({ export function Controls({
@@ -32,7 +31,6 @@ export function Controls({
autoRotate = true, autoRotate = true,
zoomable = true, zoomable = true,
enableRotate = true, enableRotate = true,
distanceScale = 1,
}: ControlsProps) { }: ControlsProps) {
const mutateTankopediaEphemeral = TankopediaEphemeral.useMutation(); const mutateTankopediaEphemeral = TankopediaEphemeral.useMutation();
const duelStore = Duel.useStore(); const duelStore = Duel.useStore();
@@ -86,7 +84,7 @@ export function Controls({
-8, -8,
gunHeight + (naked ? 10 : 2), gunHeight + (naked ? 10 : 2),
-13, -13,
).multiplyScalar(distanceScale); );
const t0 = useRef(Date.now() / 1000); const t0 = useRef(Date.now() / 1000);
useFrame(() => { useFrame(() => {
+1 -1
View File
@@ -131,7 +131,7 @@ export const TOOLS: Tool[] = [
tankopediaTool, tankopediaTool,
compareTool, compareTool,
performanceTool, performanceTool,
// guessTool, guessTool,
// chartsTool, // chartsTool,
galleryTool, galleryTool,
sessionTool, sessionTool,
@@ -7,7 +7,6 @@ import { GuessRendererLoader } from '../../../components/GuessRendererLoader';
import { awaitableModelDefinitions } from '../../../core/awaitables/modelDefinitions'; import { awaitableModelDefinitions } from '../../../core/awaitables/modelDefinitions';
import { awaitableProvisionDefinitions } from '../../../core/awaitables/provisionDefinitions'; import { awaitableProvisionDefinitions } from '../../../core/awaitables/provisionDefinitions';
import { awaitableTankDefinitions } from '../../../core/awaitables/tankDefinitions'; import { awaitableTankDefinitions } from '../../../core/awaitables/tankDefinitions';
import { Var } from '../../../core/radix/var';
import { import {
type LocaleAcceptorProps, type LocaleAcceptorProps,
LocaleProvider, LocaleProvider,
@@ -33,13 +32,13 @@ export function Page({ locale }: LocaleAcceptorProps) {
return ( return (
<GuessEphemeral.Provider data={initialTank}> <GuessEphemeral.Provider data={initialTank}>
<LocaleProvider locale={locale}> <LocaleProvider locale={locale}>
<Page2 /> <Container />
</LocaleProvider> </LocaleProvider>
</GuessEphemeral.Provider> </GuessEphemeral.Provider>
); );
} }
function Page2() { function Container() {
const tank = GuessEphemeral.use((state) => state.tank); const tank = GuessEphemeral.use((state) => state.tank);
const model = modelDefinitions.models[tank.id]; const model = modelDefinitions.models[tank.id];
@@ -57,65 +56,62 @@ function Content() {
const tank = GuessEphemeral.use((state) => state.tank); const tank = GuessEphemeral.use((state) => state.tank);
const guessState = GuessEphemeral.use((state) => state.guessState); const guessState = GuessEphemeral.use((state) => state.guessState);
const isRevealed = guessState !== null; const isRevealed = guessState !== null;
const name = unwrap(tank.name);
const fontSize = `min(48vh, ${55 / name.length}vw)`;
const transitionDuration = isRevealed ? '2s' : undefined;
return ( return (
<Flex flexGrow="1" position="relative" overflow="hidden"> <Flex flexGrow="1" position="relative" overflow="hidden">
<GuessBackground /> <GuessBackground />
<Flex <Heading
position="absolute"
left="50%"
top="50%"
ml="9"
style={{ style={{
transitionDuration,
opacity: isRevealed ? 1 : 0, opacity: isRevealed ? 1 : 0,
transitionDuration: isRevealed ? '2s' : undefined, fontWeight: 900,
transform: 'translateY(-50%)', position: 'absolute',
left: '50%',
top: '50%',
transform: 'translate(-50%, -50%)',
fontSize,
userSelect: 'none',
whiteSpace: 'nowrap',
pointerEvents: 'none',
}} }}
> >
<Heading weight="medium" size="9"> {name}
{unwrap(tank.name)} </Heading>
</Heading>
</Flex>
<Box <Box
position="absolute" position="absolute"
top="0"
left="0"
width="100%" width="100%"
height="100%" height="100%"
top="0" style={{ transitionDuration }}
right={isRevealed ? '16rem' : '0'}
style={{
transitionDuration: isRevealed ? '2s' : undefined,
}}
> >
<Suspense fallback={<GuessRendererLoader />}> <Suspense fallback={<GuessRendererLoader />}>
<GuessRenderer /> <GuessRenderer />
</Suspense> </Suspense>
</Box> </Box>
<Flex <Heading
position="absolute"
left="50%"
top="50%"
ml="9"
style={{ style={{
opacity: isRevealed ? 1 : 0, transitionDuration,
transitionDuration: isRevealed ? '2s' : undefined, opacity: isRevealed ? 0.5 : 0,
transform: 'translateY(-50%)', fontWeight: 900,
color: 'transparent', position: 'absolute',
WebkitTextStroke: `1px ${Var('gray-12')}`, left: '50%',
top: '50%',
transform: 'translate(-50%, -50%)',
fontSize,
userSelect: 'none',
whiteSpace: 'nowrap',
pointerEvents: 'none',
}} }}
> >
<Heading {name}
style={{ </Heading>
WebkitTextStroke: `1px inherit`,
}}
weight="medium"
size="9"
>
{unwrap(tank.name)}
</Heading>
</Flex>
<Guesser /> <Guesser />
</Flex> </Flex>
@@ -7,7 +7,6 @@ import { Box, Flex, Heading, Link } from '@radix-ui/themes';
import type { GetStaticPaths } from 'astro'; import type { GetStaticPaths } from 'astro';
import { AesonPlug } from '../../components/AesonPlug'; import { AesonPlug } from '../../components/AesonPlug';
import HomeHero from '../../components/HomeHero.astro'; import HomeHero from '../../components/HomeHero.astro';
import { HomePageHotTanks } from '../../components/HomePageHotTanks';
import { Plugs } from '../../components/Plugs'; import { Plugs } from '../../components/Plugs';
import ToolCard from '../../components/ToolCard.astro'; import ToolCard from '../../components/ToolCard.astro';
import { import {
@@ -15,6 +14,7 @@ import {
discordTool, discordTool,
embedTool, embedTool,
galleryTool, galleryTool,
guessTool,
moreTool, moreTool,
performanceTool, performanceTool,
sessionTool, sessionTool,
@@ -110,22 +110,22 @@ export const getStaticPaths = (() => {
<Flex gap="4" direction={{ initial: 'column', sm: 'row' }}> <Flex gap="4" direction={{ initial: 'column', sm: 'row' }}>
<!-- <ToolCard tool={chartsTool} /> --> <!-- <ToolCard tool={chartsTool} /> -->
<!-- <ToolCard tool={guessTool} /> --> <ToolCard tool={guessTool} />
<ToolCard tool={galleryTool} /> <ToolCard tool={galleryTool} />
</Flex>
<Flex gap="4" direction={{ initial: 'column', sm: 'row' }}>
<ToolCard tool={sessionTool} /> <ToolCard tool={sessionTool} />
</Flex>
<Flex gap="4" direction={{ initial: 'column', sm: 'row' }}>
<ToolCard tool={discordTool} /> <ToolCard tool={discordTool} />
</Flex>
<Flex gap="4" direction={{ initial: 'column', sm: 'row' }}>
<ToolCard tool={tierListTool} /> <ToolCard tool={tierListTool} />
</Flex>
<Flex gap="4" direction={{ initial: 'column', sm: 'row' }}>
<ToolCard tool={embedTool} /> <ToolCard tool={embedTool} />
<ToolCard tool={moreTool} />
</Flex> </Flex>
<Flex gap="4" direction={{ initial: 'column', sm: 'row' }}> <Flex gap="4" direction={{ initial: 'column', sm: 'row' }}>
<ToolCard tool={moreTool} />
<Box flexGrow="1" /> <Box flexGrow="1" />
</Flex> </Flex>