Nitro-Cool-UI/src/hooks/camera/useCamera.ts
2025-03-10 23:12:52 +01:00

39 lines
1.7 KiB
TypeScript

import { GetRoomCameraWidgetManager, InitCameraMessageEvent, IRoomCameraWidgetEffect, RequestCameraConfigurationComposer, RoomCameraWidgetManagerEvent } from '@nitrots/nitro-renderer';
import { useEffect, useState } from 'react';
import { useBetween } from 'use-between';
import { CameraPicture, SendMessageComposer } from '../../api';
import { useMessageEvent, useNitroEvent } from '../events';
const useCameraState = () =>
{
const [ availableEffects, setAvailableEffects ] = useState<IRoomCameraWidgetEffect[]>([]);
const [ cameraRoll, setCameraRoll ] = useState<CameraPicture[]>([]);
const [ selectedPictureIndex, setSelectedPictureIndex ] = useState(-1);
const [ myLevel, setMyLevel ] = useState(10);
const [ price, setPrice ] = useState<{ credits: number, duckets: number, publishDucketPrice: number }>(null);
useNitroEvent<RoomCameraWidgetManagerEvent>(RoomCameraWidgetManagerEvent.INITIALIZED, event =>
{
setAvailableEffects(Array.from(GetRoomCameraWidgetManager().effects.values()));
});
useMessageEvent<InitCameraMessageEvent>(InitCameraMessageEvent, event =>
{
const parser = event.getParser();
setPrice({ credits: parser.creditPrice, duckets: parser.ducketPrice, publishDucketPrice: parser.publishDucketPrice });
});
useEffect(() =>
{
if(GetRoomCameraWidgetManager().isLoaded) return;
GetRoomCameraWidgetManager().init();
SendMessageComposer(new RequestCameraConfigurationComposer());
}, []);
return { availableEffects, cameraRoll, setCameraRoll, selectedPictureIndex, setSelectedPictureIndex, myLevel, price };
};
export const useCamera = () => useBetween(useCameraState);