mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-22 19:19:52 +02:00
feat: some guessing mechanics
This commit is contained in:
1 parent
46441d74d8
commit
232f24181f
10 files changed
+265
-76
No files matched your search
@@ -6,7 +6,6 @@ import {
|
||||
import { literals } from '@blitzkit/i18n/src/literals';
|
||||
import { CaretLeftIcon, Link2Icon, PersonIcon } from '@radix-ui/react-icons';
|
||||
import {
|
||||
Badge,
|
||||
Button,
|
||||
Dialog,
|
||||
Flex,
|
||||
@@ -22,6 +21,7 @@ import type { embedConfigurations } from '../../constants/embeds';
|
||||
import { useLocale } from '../../hooks/useLocale';
|
||||
import { EmbedState, type EmbedStateStore } from '../../stores/embedState';
|
||||
import { CopyButton } from '../CopyButton';
|
||||
import { SearchResults } from '../SearchResults';
|
||||
|
||||
interface GenerateURLProps {
|
||||
embed: keyof typeof embedConfigurations;
|
||||
@@ -118,25 +118,19 @@ export function GenerateURL({ embed }: GenerateURLProps) {
|
||||
)}
|
||||
|
||||
{!searching && results.length > 0 && (
|
||||
<Flex direction="column" gap="2" width="100%">
|
||||
<SearchResults.Root>
|
||||
{results.map((result) => (
|
||||
<Button
|
||||
variant="ghost"
|
||||
<SearchResults.Item
|
||||
text={result.nickname}
|
||||
discriminator={strings.common.regions.short[result.region]}
|
||||
onClick={() => {
|
||||
setCopyUser(result);
|
||||
setCopyDialogOpen(true);
|
||||
setSearchDialogOpen(false);
|
||||
}}
|
||||
>
|
||||
<Flex justify="between" width="100%" gap="2">
|
||||
{result.nickname}
|
||||
<Badge>
|
||||
{strings.common.regions.short[result.region]}
|
||||
</Badge>
|
||||
</Flex>
|
||||
</Button>
|
||||
/>
|
||||
))}
|
||||
</Flex>
|
||||
</SearchResults.Root>
|
||||
)}
|
||||
</Flex>
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import {
|
||||
Badge,
|
||||
Button,
|
||||
Flex,
|
||||
type ButtonProps,
|
||||
type FlexProps,
|
||||
} from '@radix-ui/themes';
|
||||
import type { ReactNode } from 'react';
|
||||
|
||||
function Root(props: FlexProps) {
|
||||
return <Flex direction="column" gap="2" width="100%" {...props} />;
|
||||
}
|
||||
|
||||
interface ItemProps extends ButtonProps {
|
||||
text: string;
|
||||
discriminator?: ReactNode;
|
||||
}
|
||||
|
||||
function Item({ text, discriminator, ...props }: ItemProps) {
|
||||
return (
|
||||
<Button variant="ghost" {...props} highContrast>
|
||||
<Flex
|
||||
justify={discriminator === undefined ? 'center' : 'between'}
|
||||
width="100%"
|
||||
gap="2"
|
||||
>
|
||||
{text}
|
||||
{discriminator !== undefined && <Badge>{discriminator}</Badge>}
|
||||
</Flex>
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
export const SearchResults = { Root, Item };
|
||||
+6
-4
@@ -36,6 +36,7 @@ interface ControlsProps {
|
||||
autoRotate?: boolean;
|
||||
zoomable?: boolean;
|
||||
enableRotate?: boolean;
|
||||
distanceScale?: number;
|
||||
}
|
||||
|
||||
export function Controls({
|
||||
@@ -43,6 +44,7 @@ export function Controls({
|
||||
autoRotate = true,
|
||||
zoomable = true,
|
||||
enableRotate = true,
|
||||
distanceScale = 1,
|
||||
}: ControlsProps) {
|
||||
const mutateTankopediaEphemeral = TankopediaEphemeral.useMutation();
|
||||
const display = TankopediaEphemeral.use((state) => state.display);
|
||||
@@ -94,11 +96,11 @@ export function Controls({
|
||||
protagonistHullOrigin.y +
|
||||
protagonistTurretOrigin.y +
|
||||
protagonistGunOrigin.y;
|
||||
const inspectModeInitialPosition = [
|
||||
const inspectModeInitialPosition = new Vector3(
|
||||
-8,
|
||||
gunHeight + (naked ? 10 : 2),
|
||||
-13,
|
||||
] as const;
|
||||
).multiplyScalar(distanceScale);
|
||||
const protagonistGunOriginOnlyY = new Vector3(
|
||||
0,
|
||||
protagonistTurretModelDefinition.gun_origin.y,
|
||||
@@ -203,7 +205,7 @@ export function Controls({
|
||||
}
|
||||
|
||||
case Pose.Default: {
|
||||
camera.position.set(...inspectModeInitialPosition);
|
||||
camera.position.copy(inspectModeInitialPosition);
|
||||
orbitControls.current?.target.set(0, 1.25, 0);
|
||||
break;
|
||||
}
|
||||
@@ -312,7 +314,7 @@ export function Controls({
|
||||
.add(shellOrigin);
|
||||
}
|
||||
} else {
|
||||
camera.position.set(...inspectModeInitialPosition);
|
||||
camera.position.copy(inspectModeInitialPosition);
|
||||
orbitControls.current.target.set(0, gunHeight / (naked ? 4 : 2), 0);
|
||||
orbitControls.current.enablePan = true;
|
||||
orbitControls.current.enableZoom = true;
|
||||
|
||||
Reference in new issue
Block a user