5180 fichiers 38.5 Mo 0 téléchargements 201 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / wired / useWiredLabelEvents.ts
useWiredLabelEvents.ts 2.1 Ko Télécharger le fichier
import {
    RoomEngineEvent,
    RoomId,
    RoomObjectCategory,
    RoomSessionEvent,
    WiredLabelsEvent,
    WiredLabelsUpdateEvent
} from '@octane/renderer';
import { useFurniRemovedEvent, useObjectRollOutEvent, useObjectRollOverEvent, useObjectSelectedEvent } from '../rooms/engine';
import { useMessageEvent, useOctaneEvent } from '../events';
import { useWiredLabelStore } from './wiredLabelStore';

/**
 * Feeds the label store from the two server packets, and opens a label when its furni is clicked
 * or shows it faded while the mouse is over it, as the official client does.
 */
export const useWiredLabelEvents = () => {
    const replace = useWiredLabelStore((state) => state.replace);
    const update = useWiredLabelStore((state) => state.update);
    const toggle = useWiredLabelStore((state) => state.toggle);
    const setHovered = useWiredLabelStore((state) => state.setHovered);
    const clear = useWiredLabelStore((state) => state.clear);

    useMessageEvent<WiredLabelsEvent>(WiredLabelsEvent, (event) => {
        const parser = event.getParser();

        if (parser) replace(parser.labels);
    });

    useMessageEvent<WiredLabelsUpdateEvent>(WiredLabelsUpdateEvent, (event) => {
        const parser = event.getParser();

        if (parser) update(parser.changed, parser.removedIds);
    });

    useObjectSelectedEvent((event) => {
        if (event.category === RoomObjectCategory.FLOOR) toggle(event.id);
    });

    useObjectRollOverEvent((event) => {
        if (event.category === RoomObjectCategory.FLOOR) setHovered(event.id, true);
    });

    useObjectRollOutEvent((event) => {
        if (event.category === RoomObjectCategory.FLOOR) setHovered(event.id, false);
    });

    useFurniRemovedEvent(true, (event) => {
        if (event.category === RoomObjectCategory.FLOOR) update([], [event.id]);
    });

    useOctaneEvent<RoomSessionEvent>(RoomSessionEvent.ENDED, () => clear());
    // A closed inventory/catalog preview disposes its own room; only the real room clears.
    useOctaneEvent<RoomEngineEvent>(RoomEngineEvent.DISPOSED, (event) => {
        if (!RoomId.isRoomPreviewerId(event.roomId)) clear();
    });
};
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