fix: remove broken Room view, simplify to Overhead/Isometric
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
Test / backend-test (push) Waiting to run
Test / frontend-test (push) Waiting to run

- Remove ROOM_FOCUS preset (wasn't rendering correctly)
- Keep Overhead and Isometric views which work well
- FocusTarget now zooms within current preset
- Text navigation provides room selection
This commit is contained in:
fullsizemalt 2025-12-19 11:11:49 -08:00
parent 6d107c637b
commit c282943ec3
2 changed files with 17 additions and 30 deletions

View file

@ -1,7 +1,7 @@
import { useEffect, useRef } from 'react';
import { CameraControls } from '@react-three/drei';
export type CameraPreset = 'OVERHEAD' | 'ISOMETRIC' | 'ROOM_FOCUS';
export type CameraPreset = 'OVERHEAD' | 'ISOMETRIC';
interface CameraPresetsProps {
preset: CameraPreset;
@ -18,13 +18,15 @@ const getPresetConfig = (
floorHeight: number,
focusTarget?: { x: number; z: number } | null
) => {
const centerX = 0;
const centerZ = 0;
const maxDim = Math.max(floorWidth, floorHeight);
// If we have a focus target, use it as center, otherwise use floor center
const centerX = focusTarget?.x ?? 0;
const centerZ = focusTarget?.z ?? 0;
switch (preset) {
case 'OVERHEAD':
// Top-down view - looking straight down at full floor
// Top-down view - looking straight down
return {
position: [centerX, maxDim * 1.2, centerZ + 0.1] as [number, number, number],
target: [centerX, 0, centerZ] as [number, number, number],
@ -32,27 +34,16 @@ const getPresetConfig = (
case 'ISOMETRIC':
// 3/4 isometric view - classic strategy game angle
const isoDistance = maxDim * 0.8;
const isoDistance = focusTarget ? 15 : maxDim * 0.8;
return {
position: [centerX + isoDistance, isoDistance * 0.7, centerZ + isoDistance] as [number, number, number],
position: [centerX + isoDistance * 0.7, isoDistance * 0.6, centerZ + isoDistance * 0.7] as [number, number, number],
target: [centerX, 0, centerZ] as [number, number, number],
};
case 'ROOM_FOCUS':
// Focus on a specific room - position camera above looking down at room
const fx = focusTarget?.x ?? centerX;
const fz = focusTarget?.z ?? centerZ;
// Use a zoomed-in overhead-ish view centered on the room
// Height of 12 gives good room-level visibility
return {
position: [fx + 4, 12, fz + 4] as [number, number, number],
target: [fx, 0, fz] as [number, number, number],
};
default:
return {
position: [centerX + 40, 30, centerZ + 40] as [number, number, number],
target: [centerX, 0, centerZ] as [number, number, number],
position: [0, 30, 40] as [number, number, number],
target: [0, 0, 0] as [number, number, number],
};
}
};
@ -108,9 +99,9 @@ export function CameraPresets({
// Polar angle limits (don't go below floor)
minPolarAngle={0.1}
maxPolarAngle={Math.PI / 2.1}
// Enable panning for room exploration
// Enable panning for exploration
dollySpeed={1}
truckSpeed={preset === 'ROOM_FOCUS' ? 1 : 0.5}
truckSpeed={0.8}
// Smooth damping
smoothTime={0.25}
makeDefault
@ -118,7 +109,7 @@ export function CameraPresets({
);
}
// UI Component for preset selector buttons
// UI Component for preset selector buttons - just two options now
interface CameraPresetSelectorProps {
current: CameraPreset;
onChange: (preset: CameraPreset) => void;
@ -128,7 +119,6 @@ export function CameraPresetSelector({ current, onChange }: CameraPresetSelector
const presets: { id: CameraPreset; label: string; icon: string }[] = [
{ id: 'OVERHEAD', label: 'Overhead', icon: '⬇️' },
{ id: 'ISOMETRIC', label: 'Isometric', icon: '📐' },
{ id: 'ROOM_FOCUS', label: 'Room', icon: '🔍' },
];
return (

View file

@ -90,7 +90,7 @@ export default function Facility3DViewerPage() {
const plant: PlantPosition = { ...match, x, y, z };
setSelectedPlant(plant);
setFocusTarget({ x, z });
setCameraPreset('ROOM_FOCUS');
setCameraPreset('ISOMETRIC');
setBeaconPosition([x, y, z]);
setHighlightedTags([targetedPlantTag]);
setDimMode(true);
@ -150,7 +150,7 @@ export default function Facility3DViewerPage() {
const x = (room.posX + room.width / 2) * SCALE - (floorData.floor.width * SCALE / 2);
const z = (room.posY + room.height / 2) * SCALE - (floorData.floor.height * SCALE / 2);
setFocusTarget({ x, z });
setCameraPreset('ROOM_FOCUS');
setCameraPreset('ISOMETRIC');
// Clear search state when navigating by room
setBeaconPosition(null);
setHighlightedTags([]);
@ -194,7 +194,7 @@ export default function Facility3DViewerPage() {
const y = 0.4 + (result.position.tier * 0.6);
setFocusTarget({ x, z });
setCameraPreset('ROOM_FOCUS');
setCameraPreset('ISOMETRIC');
setBeaconPosition([x, y, z]);
setHighlightedTags([result.label]);
setDimMode(true);
@ -277,9 +277,6 @@ export default function Facility3DViewerPage() {
current={cameraPreset}
onChange={(preset) => {
setCameraPreset(preset);
if (preset !== 'ROOM_FOCUS') {
setFocusTarget(null);
}
}}
/>
</div>
@ -355,7 +352,7 @@ export default function Facility3DViewerPage() {
const y = 0.4 + (plant.tier * 0.6);
setFocusTarget({ x, z });
setCameraPreset('ROOM_FOCUS');
setCameraPreset('ISOMETRIC');
setBeaconPosition([x, y, z]);
setDimMode(false);
setHighlightedTags([plant.plant?.tagNumber || '']);