5180 fichiers 38.5 Mo 0 téléchargements 431 vues mis à jour il y a 7 heures ui
nitro-v36-with-renderer-v36 / src / hooks / rooms / widgets / furniture / useFurnitureMannequinWidget.ts
useFurnitureMannequinWidget.ts 2.8 Ko Télécharger le fichier
import {
    FurnitureMannequinSaveLookComposer,
    FurnitureMannequinSaveNameComposer,
    FurnitureMultiStateComposer,
    GetAvatarRenderManager,
    GetRoomEngine,
    HabboClubLevelEnum,
    RoomEngineTriggerWidgetEvent,
    RoomObjectVariable
} from '@octane/renderer';
import { useState } from 'react';
import { MannequinUtilities, SendMessageComposer } from '../../../../api';
import { useOctaneEvent } from '../../../events';
import { useFurniRemovedEvent } from '../../engine';

const useFurnitureMannequinWidgetState = () => {
    const [objectId, setObjectId] = useState(-1);
    const [category, setCategory] = useState(-1);
    const [figure, setFigure] = useState(null);
    const [gender, setGender] = useState(null);
    const [clubLevel, setClubLevel] = useState(HabboClubLevelEnum.NO_CLUB);
    const [name, setName] = useState(null);

    const onClose = () => {
        setObjectId(-1);
        setCategory(-1);
        setFigure(null);
        setGender(null);
        setName(null);
    };

    const saveFigure = () => {
        if (objectId === -1) return;

        SendMessageComposer(new FurnitureMannequinSaveLookComposer(objectId));

        onClose();
    };

    const wearFigure = () => {
        if (objectId === -1) return;

        SendMessageComposer(new FurnitureMultiStateComposer(objectId));

        onClose();
    };

    const saveName = () => {
        if (objectId === -1) return;

        SendMessageComposer(new FurnitureMannequinSaveNameComposer(objectId, name));
    };

    useOctaneEvent<RoomEngineTriggerWidgetEvent>(RoomEngineTriggerWidgetEvent.REQUEST_MANNEQUIN, (event) => {
        const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category);

        if (!roomObject) return;

        const model = roomObject.model;
        const figure = model.getValue<string>(RoomObjectVariable.FURNITURE_MANNEQUIN_FIGURE) || null;
        const gender = model.getValue<string>(RoomObjectVariable.FURNITURE_MANNEQUIN_GENDER) || null;
        const figureContainer = GetAvatarRenderManager().createFigureContainer(figure);
        const figureClubLevel = GetAvatarRenderManager().getFigureClubLevel(figureContainer, gender, MannequinUtilities.MANNEQUIN_CLOTHING_PART_TYPES);

        setObjectId(event.objectId);
        setCategory(event.category);
        setFigure(figure);
        setGender(gender);
        setClubLevel(figureClubLevel);
        setName(model.getValue<string>(RoomObjectVariable.FURNITURE_MANNEQUIN_NAME) || null);
    });

    useFurniRemovedEvent(objectId !== -1 && category !== -1, (event) => {
        if (event.id !== objectId || event.category !== category) return;

        onClose();
    });

    return { objectId, figure, gender, clubLevel, name, setName, saveFigure, wearFigure, saveName, onClose };
};

export const useFurnitureMannequinWidget = useFurnitureMannequinWidgetState;
15Sujets
1Dépôts
20Membres
3En 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