From 5208cf867837559c6f5f51ceb263de61515dd0c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com>
Date: Sat, 6 Jan 2024 18:17:04 -0600
Subject: [PATCH] feat: code split
---
.../tankopedia/[id]/components/Control.tsx | 4 +-
.../[id]/components/Model/TankDisplay.tsx | 168 +++++++++++
.../{ => Model/components}/TankModel.tsx | 12 +-
.../tankopedia/[id]/components/SceneProps.tsx | 33 ++-
src/app/tools/tankopedia/[id]/page.tsx | 280 ++++--------------
src/stores/tankopedia.ts | 7 +-
6 files changed, 253 insertions(+), 251 deletions(-)
create mode 100644 src/app/tools/tankopedia/[id]/components/Model/TankDisplay.tsx
rename src/app/tools/tankopedia/[id]/components/{ => Model/components}/TankModel.tsx (93%)
diff --git a/src/app/tools/tankopedia/[id]/components/Control.tsx b/src/app/tools/tankopedia/[id]/components/Control.tsx
index 30e687573..22dc7afbe 100644
--- a/src/app/tools/tankopedia/[id]/components/Control.tsx
+++ b/src/app/tools/tankopedia/[id]/components/Control.tsx
@@ -14,5 +14,7 @@ export function Controls() {
orbitControls.current?.target.set(0, 1.5, 0);
}, []);
- return ;
+ return (
+
+ );
}
diff --git a/src/app/tools/tankopedia/[id]/components/Model/TankDisplay.tsx b/src/app/tools/tankopedia/[id]/components/Model/TankDisplay.tsx
new file mode 100644
index 000000000..5d0e18171
--- /dev/null
+++ b/src/app/tools/tankopedia/[id]/components/Model/TankDisplay.tsx
@@ -0,0 +1,168 @@
+import {
+ EnterFullScreenIcon,
+ ExitFullScreenIcon,
+ FrameIcon,
+} from '@radix-ui/react-icons';
+import { Button, Card, Flex, Tabs, Theme } from '@radix-ui/themes';
+import { Html } from '@react-three/drei';
+import { Canvas } from '@react-three/fiber';
+import { Suspense, useEffect, useRef, useState } from 'react';
+import { Group } from 'three';
+import { theme } from '../../../../../../stitches.config';
+import mutateTankopedia, {
+ TankopediaMode,
+ useTankopedia,
+} from '../../../../../../stores/tankopedia';
+import { Loader } from '../../../../components/Loader';
+import { Controls } from '../Control';
+import { RotationInputs } from '../RotationInputs';
+import { SceneProps } from '../SceneProps';
+import { TankModel } from './components/TankModel';
+
+interface TankDisplayProps {
+ tankId: number;
+ turretId: number;
+ gunId: number;
+}
+
+export function TankDisplay({ tankId, turretId, gunId }: TankDisplayProps) {
+ const canvas = useRef(null);
+ const canvasWrapper = useRef(null);
+ const [isFullScreen, setIsFullScreen] = useState(false);
+ const mode = useTankopedia((state) => state.mode);
+ const hullContainer = useRef(null);
+ const showGrid = useTankopedia((state) => state.model.showGrid);
+
+ function handlePointerDown() {
+ window.addEventListener('pointermove', handlePointerMove);
+ window.addEventListener('pointerup', handlePointerUp);
+ }
+ function handlePointerMove(event: PointerEvent) {
+ event.preventDefault();
+ }
+ function handlePointerUp(event: PointerEvent) {
+ event.preventDefault();
+
+ window.removeEventListener('pointermove', handlePointerMove);
+ window.removeEventListener('pointerup', handlePointerUp);
+ }
+
+ useEffect(() => {
+ function handleFullScreenChange() {
+ setIsFullScreen(document.fullscreenElement !== null);
+ }
+
+ document.addEventListener('fullscreenchange', handleFullScreenChange);
+
+ return () => {
+ document.removeEventListener('fullscreenchange', handleFullScreenChange);
+ };
+ });
+
+ return (
+
+
+
+
+ {
+ mutateTankopedia((draft) => {
+ draft.mode = mode as TankopediaMode;
+ });
+ }}
+ >
+
+ Model
+ Armor
+
+
+
+
+