5180 fichiers 38.5 Mo 0 téléchargements 297 vues mis à jour il y a 6 heures ui
nitro-v36-with-renderer-v36 / src / components / floorplan-editor / views / FloorplanRoomPreview.tsx
FloorplanRoomPreview.tsx 1.3 Ko Télécharger le fichier
import { GetRoomEngine, RoomPreviewer } from '@octane/renderer';
import { FC, useEffect, useMemo, useState } from 'react';
import { LayoutRoomPreviewerView } from '../../../common/layout/LayoutRoomPreviewerView';
import { serializeTilemap } from '../state/encoding';
import { FloorplanState } from '../state/types';

type Props = {
    state: FloorplanState;
    height?: number;
};

export const FloorplanRoomPreview: FC<Props> = ({ state, height = 320 }) => {
    const [previewer, setPreviewer] = useState<RoomPreviewer | null>(null);

    useEffect(() => {
        const instance = new RoomPreviewer(GetRoomEngine(), ++RoomPreviewer.PREVIEW_COUNTER);

        setPreviewer(instance);

        return () => {
            instance.dispose();
            setPreviewer((prev) => (prev === instance ? null : prev));
        };
    }, []);

    const tilemap = useMemo(() => serializeTilemap(state.tiles), [state.tiles]);

    useEffect(() => {
        if (!previewer) return;
        if (!tilemap) return;
        previewer.updatePreviewModel(tilemap, Math.max(0, state.wallHeight - 1), true);
    }, [previewer, tilemap, state.wallHeight]);

    if (!previewer) return <div className="w-full" style={{ height }} />;

    return <LayoutRoomPreviewerView roomPreviewer={previewer} height={height} />;
};
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser