From f9d0659bd4d977209e7d066c2a66ff065d879331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:29:49 -0600 Subject: [PATCH] feat: opaque amror --- .vscode/settings.json | 1 + .../[id]/components/Model/TankDisplay.tsx | 54 ++++++++++++++----- .../components/Model/components/TankArmor.tsx | 3 ++ src/components/ArmorMesh/index.tsx | 13 +++-- .../ArmorMesh/shaders/fragment.glsl | 16 +++--- .../ArmorMesh/shaders/fragmentOpaque.glsl | 52 ++++++++++++++++++ src/components/ArmorMesh/shaders/vertex.glsl | 6 +-- src/stores/tankopedia.ts | 2 + 8 files changed, 119 insertions(+), 28 deletions(-) create mode 100644 src/components/ArmorMesh/shaders/fragmentOpaque.glsl diff --git a/.vscode/settings.json b/.vscode/settings.json index 0ca7d3e4e..eed8bbe76 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -37,6 +37,7 @@ "fullstats", "fuzzysort", "gamemode", + "glsl", "GLTF", "immer", "JOINTINDEX", diff --git a/src/app/tools/tankopedia/[id]/components/Model/TankDisplay.tsx b/src/app/tools/tankopedia/[id]/components/Model/TankDisplay.tsx index 73183d7de..d9d8e5076 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/TankDisplay.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/TankDisplay.tsx @@ -1,9 +1,16 @@ import { EnterFullScreenIcon, ExitFullScreenIcon, - FrameIcon, + GearIcon, } from '@radix-ui/react-icons'; -import { Button, Card, Flex, Tabs, Theme } from '@radix-ui/themes'; +import { + Button, + Card, + DropdownMenu, + Flex, + Tabs, + Theme, +} from '@radix-ui/themes'; import { Html } from '@react-three/drei'; import { Canvas } from '@react-three/fiber'; import { Suspense, use, useEffect, useRef, useState } from 'react'; @@ -29,6 +36,7 @@ export function TankDisplay() { const [isFullScreen, setIsFullScreen] = useState(false); const mode = useTankopedia((state) => state.mode); const showGrid = useTankopedia((state) => state.model.showGrid); + const opaqueArmor = useTankopedia((state) => state.model.opaqueArmor); const protagonist = useTankopedia((state) => { if (!state.areTanksAssigned) return; return state.protagonist; @@ -147,17 +155,37 @@ export function TankDisplay() { right: 18, }} > - + + + + + + + { + mutateTankopedia((draft) => { + draft.model.showGrid = checked; + }); + }} + > + Show grid + + + { + mutateTankopedia((draft) => { + draft.model.opaqueArmor = checked; + }); + }} + > + Opaque armor + + +