feat: update room control widgets and menus

This commit is contained in:
Lorenzune
2026-04-03 12:09:16 +02:00
parent 60f0355a13
commit e4b1f14fa2
8 changed files with 82 additions and 29 deletions
+18 -3
View File
@@ -1,12 +1,13 @@
import { ColorConverter, GetRenderer, GetRoomEngine, GetStage, IRoomSession, NitroAdjustmentFilter, NitroSprite, NitroTexture, RoomBackgroundColorEvent, RoomEngineEvent, RoomEngineObjectEvent, RoomGeometry, RoomId, RoomObjectCategory, RoomObjectHSLColorEnabledEvent, RoomObjectOperationType, RoomSessionEvent, RoomVariableEnum, Vector3d } from '@nitrots/nitro-renderer';
import { ColorConverter, GetRenderer, GetRoomEngine, GetStage, HanditemBlockStateMessageEvent, IRoomSession, NitroAdjustmentFilter, NitroSprite, NitroTexture, RoomBackgroundColorEvent, RoomEngineEvent, RoomEngineObjectEvent, RoomGeometry, RoomId, RoomObjectCategory, RoomObjectHSLColorEnabledEvent, RoomObjectOperationType, RoomSessionEvent, RoomVariableEnum, Vector3d } from '@nitrots/nitro-renderer';
import { useEffect, useState } from 'react';
import { useBetween } from 'use-between';
import { CanManipulateFurniture, DispatchUiEvent, GetRoomSession, IsFurnitureSelectionDisabled, ProcessRoomObjectOperation, RoomWidgetUpdateBackgroundColorPreviewEvent, RoomWidgetUpdateRoomObjectEvent, SetActiveRoomId, StartRoomSession } from '../../api';
import { useNitroEvent, useUiEvent } from '../events';
import { useMessageEvent, useNitroEvent, useUiEvent } from '../events';
const useRoomState = () =>
{
const [roomSession, setRoomSession] = useState<IRoomSession>(null);
const [isHandItemBlocked, setIsHandItemBlocked] = useState(false);
const [roomBackground, setRoomBackground] = useState<NitroSprite>(null);
const [roomFilter, setRoomFilter] = useState<NitroAdjustmentFilter>(null);
const [originalRoomBackgroundColor, setOriginalRoomBackgroundColor] = useState(0);
@@ -91,9 +92,11 @@ const useRoomState = () =>
case RoomEngineEvent.INITIALIZED:
SetActiveRoomId(event.roomId);
setRoomSession(session);
setIsHandItemBlocked(false);
return;
case RoomEngineEvent.DISPOSED:
setRoomSession(null);
setIsHandItemBlocked(false);
return;
}
});
@@ -110,10 +113,22 @@ const useRoomState = () =>
return;
case RoomSessionEvent.ENDED:
setRoomSession(null);
setIsHandItemBlocked(false);
return;
}
});
useMessageEvent<HanditemBlockStateMessageEvent>(HanditemBlockStateMessageEvent, event =>
{
const parser = event.getParser();
const session = (roomSession || GetRoomSession());
if(!parser || !session) return;
if(parser.stateData.roomId !== session.roomId) return;
setIsHandItemBlocked(parser.stateData.blocked);
});
useNitroEvent<RoomEngineObjectEvent>([
RoomEngineObjectEvent.SELECTED,
RoomEngineObjectEvent.DESELECTED,
@@ -281,7 +296,7 @@ const useRoomState = () =>
};
}, [roomSession]);
return { roomSession };
return { roomSession, isHandItemBlocked };
};
export const useRoom = () => useBetween(useRoomState);