perf(map): snap assets to terrain

This commit is contained in:
Tom Boullay
2026-05-25 00:51:03 +02:00
parent 50fa94b3ad
commit d17738eaf1
18 changed files with 402 additions and 62 deletions
@@ -1,4 +1,11 @@
import { EcoleModel } from "@/components/three/models/generated/EcoleModel";
import { EcoleModel } from "@/components/three/world/EcoleModel";
import { FermeVerticaleModel } from "@/components/three/world/FermeVerticaleModel";
import { GenerateurModel } from "@/components/three/world/GenerateurModel";
import { LafabrikModel } from "@/components/three/world/LafabrikModel";
import {
normalizeMapScale,
useTerrainSnappedPosition,
} from "@/hooks/three/useTerrainHeight";
import type { MapNode } from "@/types/editor/editor";
interface GeneratedMapNodeInstanceProps {
@@ -10,12 +17,48 @@ export function GeneratedMapNodeInstance({
node,
onLoaded,
}: GeneratedMapNodeInstanceProps): React.JSX.Element | null {
const position = useTerrainSnappedPosition(node.position);
const scale = normalizeMapScale(node.scale);
if (node.name === "ecole") {
return (
<EcoleModel
position={node.position}
position={position}
rotation={node.rotation}
scale={node.scale}
scale={scale}
onLoaded={onLoaded}
/>
);
}
if (node.name === "fermeverticale") {
return (
<FermeVerticaleModel
position={position}
rotation={node.rotation}
scale={scale}
onLoaded={onLoaded}
/>
);
}
if (node.name === "generateur") {
return (
<GenerateurModel
position={position}
rotation={node.rotation}
scale={scale}
onLoaded={onLoaded}
/>
);
}
if (node.name === "lafabrik") {
return (
<LafabrikModel
position={position}
rotation={node.rotation}
scale={scale}
onLoaded={onLoaded}
/>
);
@@ -1,4 +1,9 @@
const GENERATED_MAP_MODEL_NAMES = new Set(["ecole"]);
const GENERATED_MAP_MODEL_NAMES = new Set([
"ecole",
"fermeverticale",
"generateur",
"lafabrik",
]);
export function isGeneratedMapModelName(name: string): boolean {
return GENERATED_MAP_MODEL_NAMES.has(name);