perf: applique les échelles aux assets instanciés
This commit is contained in:
@@ -14,10 +14,13 @@ import {
|
||||
type MapInstancingAssetConfig,
|
||||
type MapInstancingAssetType,
|
||||
} from "@/data/world/mapInstancingConfig";
|
||||
import {
|
||||
type MapAssetInstance,
|
||||
useMapInstancingData,
|
||||
} from "@/hooks/world/useMapInstancingData";
|
||||
import { useMapInstancingData } from "@/hooks/world/useMapInstancingData";
|
||||
import type { MapAssetInstance } from "@/types/map/mapScene";
|
||||
|
||||
interface MapInstancingSystemProps {
|
||||
onlyModelName?: string | null;
|
||||
streaming?: boolean;
|
||||
}
|
||||
|
||||
interface MapAssetChunk {
|
||||
key: string;
|
||||
@@ -72,14 +75,20 @@ function createMapAssetChunks(
|
||||
});
|
||||
}
|
||||
|
||||
export function MapInstancingSystem(): React.JSX.Element | null {
|
||||
export function MapInstancingSystem({
|
||||
onlyModelName = null,
|
||||
streaming = true,
|
||||
}: MapInstancingSystemProps): React.JSX.Element | null {
|
||||
const cameraMode = useCameraMode();
|
||||
const sceneMode = useSceneMode();
|
||||
const groups = useMapPerformanceStore((state) => state.groups);
|
||||
const models = useMapPerformanceStore((state) => state.models);
|
||||
const { data, isLoading } = useMapInstancingData();
|
||||
const streamingEnabled =
|
||||
CHUNK_CONFIG.enabled && sceneMode === "game" && cameraMode === "player";
|
||||
streaming &&
|
||||
CHUNK_CONFIG.enabled &&
|
||||
sceneMode === "game" &&
|
||||
cameraMode === "player";
|
||||
|
||||
const chunks = useMemo(() => {
|
||||
if (!data) return [];
|
||||
@@ -87,6 +96,8 @@ export function MapInstancingSystem(): React.JSX.Element | null {
|
||||
return MAP_INSTANCING_ASSET_TYPES.flatMap((type) => {
|
||||
const config = MAP_INSTANCING_ASSETS[type];
|
||||
|
||||
if (onlyModelName && config.mapName !== onlyModelName) return [];
|
||||
|
||||
if (
|
||||
!config.enabled ||
|
||||
!isMapModelVisible(config.mapName, { groups, models })
|
||||
@@ -99,7 +110,7 @@ export function MapInstancingSystem(): React.JSX.Element | null {
|
||||
|
||||
return createMapAssetChunks(type, config, instances);
|
||||
});
|
||||
}, [data, groups, models]);
|
||||
}, [data, groups, models, onlyModelName]);
|
||||
|
||||
const visibleChunks = useVisibleWorldChunks(chunks, streamingEnabled);
|
||||
|
||||
@@ -114,6 +125,7 @@ export function MapInstancingSystem(): React.JSX.Element | null {
|
||||
<InstancedMapAsset
|
||||
modelPath={chunk.config.modelPath}
|
||||
instances={chunk.instances}
|
||||
scaleMultiplier={chunk.config.scaleMultiplier}
|
||||
castShadow={chunk.config.castShadow}
|
||||
receiveShadow={chunk.config.receiveShadow}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user