重新定义天体大小的展现逻辑

main
mula.liu 2026-01-12 17:29:27 +08:00
parent 14fb922cd2
commit 5b8cc1cf0c
5 changed files with 41 additions and 7 deletions

View File

@ -0,0 +1,31 @@
import asyncio
import sys
import os
sys.path.append(os.path.join(os.getcwd(), "backend"))
from app.database import AsyncSessionLocal
from sqlalchemy import select
from app.models.db.star_system import StarSystem
from app.models.db.celestial_body import CelestialBody
async def check_sirius():
async with AsyncSessionLocal() as session:
# Check Star Systems
print("Checking Star Systems:")
stmt = select(StarSystem).where(StarSystem.name.ilike('%Sirius%'))
result = await session.execute(stmt)
systems = result.scalars().all()
for s in systems:
print(f"System: {s.name} ({s.name_zh}), ID: {s.id}, Pos: {s.position_x}, {s.position_y}, {s.position_z}")
# Check Celestial Bodies
print("\nChecking Celestial Bodies:")
stmt = select(CelestialBody).where(CelestialBody.name.ilike('%Sirius%'))
result = await session.execute(stmt)
bodies = result.scalars().all()
for b in bodies:
print(f"Body: {b.name} ({b.name_zh}), ID: {b.id}, Type: {b.type}, SystemID: {b.system_id}")
if __name__ == "__main__":
asyncio.run(check_sirius())

View File

@ -11,13 +11,13 @@ import { calculateRenderPosition, getOffsetDescription } from '../utils/renderPo
import { fetchBodyResources } from '../utils/api'; import { fetchBodyResources } from '../utils/api';
import { getCelestialSize } from '../config/celestialSizes'; import { getCelestialSize } from '../config/celestialSizes';
import { createLabelTexture } from '../utils/labelTexture'; import { createLabelTexture } from '../utils/labelTexture';
import { useSystemSetting } from '../hooks/useSystemSetting';
interface CelestialBodyProps { interface CelestialBodyProps {
body: CelestialBodyType; body: CelestialBodyType;
allBodies: CelestialBodyType[]; allBodies: CelestialBodyType[];
isSelected?: boolean; isSelected?: boolean;
onBodySelect?: (body: CelestialBodyType) => void; onBodySelect?: (body: CelestialBodyType) => void;
typeConfigs?: any;
} }
// Planetary Rings component - handles texture-based rings // Planetary Rings component - handles texture-based rings
@ -487,10 +487,9 @@ function PlanetMesh({ body, size, emissive, emissiveIntensity, scaledPos, textur
); );
} }
export function CelestialBody({ body, allBodies, isSelected = false, onBodySelect }: CelestialBodyProps) { export function CelestialBody({ body, allBodies, isSelected = false, onBodySelect, typeConfigs }: CelestialBodyProps) {
// Get the current position (use the first position for now) // Get the current position (use the first position for now)
const position = body.positions[0]; const position = body.positions[0];
const [typeConfigs] = useSystemSetting('celestial_type_configs', null);
if (!position) return null; if (!position) return null;

View File

@ -10,13 +10,13 @@ import type { CelestialBody } from '../types';
import { calculateRenderPosition, getOffsetDescription } from '../utils/renderPosition'; import { calculateRenderPosition, getOffsetDescription } from '../utils/renderPosition';
import { fetchBodyResources } from '../utils/api'; import { fetchBodyResources } from '../utils/api';
import { createLabelTexture } from '../utils/labelTexture'; import { createLabelTexture } from '../utils/labelTexture';
import { useSystemSetting } from '../hooks/useSystemSetting';
interface ProbeProps { interface ProbeProps {
body: CelestialBody; body: CelestialBody;
allBodies: CelestialBody[]; allBodies: CelestialBody[];
isSelected?: boolean; isSelected?: boolean;
onBodySelect?: (body: CelestialBody) => void; onBodySelect?: (body: CelestialBody) => void;
typeConfigs?: any;
} }
// Separate component for each probe type to properly use hooks // Separate component for each probe type to properly use hooks
@ -255,12 +255,11 @@ function ProbeFallback({ body, allBodies, isSelected = false, onBodySelect, type
); );
} }
export function Probe({ body, allBodies, isSelected = false, onBodySelect }: ProbeProps) { export function Probe({ body, allBodies, isSelected = false, onBodySelect, typeConfigs }: ProbeProps) {
const position = body.positions[0]; const position = body.positions[0];
const [modelPath, setModelPath] = useState<string | null | undefined>(undefined); const [modelPath, setModelPath] = useState<string | null | undefined>(undefined);
const [loadError, setLoadError] = useState<boolean>(false); const [loadError, setLoadError] = useState<boolean>(false);
const [resourceScale, setResourceScale] = useState<number>(1.0); const [resourceScale, setResourceScale] = useState<number>(1.0);
const [typeConfigs] = useSystemSetting('celestial_type_configs', null);
// Fetch model from backend API // Fetch model from backend API
useEffect(() => { useEffect(() => {

View File

@ -172,6 +172,7 @@ export function Scene({ bodies, selectedBody, trajectoryPositions = [], showOrbi
allBodies={bodies} allBodies={bodies}
isSelected={selectedBody?.id === body.id} isSelected={selectedBody?.id === body.id}
onBodySelect={onBodySelect} onBodySelect={onBodySelect}
typeConfigs={typeConfigs}
/> />
))} ))}
@ -186,6 +187,7 @@ export function Scene({ bodies, selectedBody, trajectoryPositions = [], showOrbi
allBodies={bodies} allBodies={bodies}
isSelected={selectedBody?.id === body.id} isSelected={selectedBody?.id === body.id}
onBodySelect={onBodySelect} onBodySelect={onBodySelect}
typeConfigs={typeConfigs}
/> />
))} ))}

View File

@ -26,7 +26,10 @@ export function useSystemSetting<T>(key: string, defaultValue: T): [T, boolean,
}; };
fetchSetting(); fetchSetting();
}, [key, defaultValue]); // Disable exhaustive-deps because we don't want to re-fetch when defaultValue changes
// (defaultValue is often an inline object/array literal which would cause infinite loops)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [key]);
return [settingValue, loading, error]; return [settingValue, loading, error];
} }