5180 fichiers 38.5 Mo 0 téléchargements 215 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / session / useSessionInfo.ts
useSessionInfo.ts 2.1 Ko Télécharger le fichier
import { GetSessionDataManager, RoomUnitChatStyleComposer, UserInfoDataParser, UserInfoEvent, UserSettingsEvent } from '@octane/renderer';
import { useState } from 'react';
import { registerSharedHook, useSharedHook } from '@/state/useSharedHook';
import { SendMessageComposer } from '../../api';
import { useMessageEvent } from '../events';
import { useUserDataSnapshot } from './useSessionSnapshots';

// Singleton source published through the Zustand-backed shared-hook bridge.
const useSessionInfoState = () => {
    const [userInfo, setUserInfo] = useState<UserInfoDataParser>(null);
    const [chatStyleId, setChatStyleId] = useState<number>(0);

    const updateChatStyleId = (styleId: number) => {
        setChatStyleId(styleId);

        SendMessageComposer(new RoomUnitChatStyleComposer(styleId));
    };

    const respectUser = (userId: number) => GetSessionDataManager().giveRespect(userId);
    const respectPet = (petId: number) => GetSessionDataManager().givePetRespect(petId);
    const replenishRespect = () => GetSessionDataManager().replenishRespect();

    useMessageEvent<UserInfoEvent>(UserInfoEvent, (event) => {
        setUserInfo(event.getParser().userInfo);
    });

    useMessageEvent<UserSettingsEvent>(UserSettingsEvent, (event) => {
        setChatStyleId(event.getParser().chatType);
    });

    return { userInfo, chatStyleId, respectUser, respectPet, replenishRespect, updateChatStyleId };
};

// Public surface. SessionDataManager already invalidates the
// snapshot on UserInfoEvent / FigureUpdateEvent / giveRespect /
// givePetRespect, so userFigure / respectsLeft / respectsPetLeft stay
// in sync without local useState mirrors.
export const useSessionInfo = () => {
    const shared = useSharedHook(useSessionInfoState);
    const userData = useUserDataSnapshot();

    return {
        ...shared,
        userFigure: userData.figure,
        userRespectRemaining: userData.respectsLeft,
        respectReplenishesLeft: userData.respectReplenishesLeft ?? 0,
        petRespectRemaining: userData.respectsPetLeft
    };
};

registerSharedHook(useSessionInfoState);
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