import { IRoomSession, RoomObjectVariable, RoomPreviewer } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; import { attemptBotPlacement, GetRoomEngine, LocalizeText, UnseenItemCategory } from '../../../../api'; import { AutoGrid, Button, Column, Grid, LayoutRoomPreviewerView, Text } from '../../../../common'; import { useInventoryBots, useInventoryUnseenTracker } from '../../../../hooks'; import { InventoryCategoryEmptyView } from '../InventoryCategoryEmptyView'; import { InventoryBotItemView } from './InventoryBotItemView'; interface InventoryBotViewProps { roomSession: IRoomSession; roomPreviewer: RoomPreviewer; } export const InventoryBotView: FC = props => { const { roomSession = null, roomPreviewer = null } = props; const [ isVisible, setIsVisible ] = useState(false); const { botItems = [], selectedBot = null, activate = null, deactivate = null } = useInventoryBots(); const { isUnseen = null, removeUnseen = null } = useInventoryUnseenTracker(); useEffect(() => { if(!selectedBot || !roomPreviewer) return; const botData = selectedBot.botData; const roomEngine = GetRoomEngine(); let wallType = roomEngine.getRoomInstanceVariable(roomEngine.activeRoomId, RoomObjectVariable.ROOM_WALL_TYPE); let floorType = roomEngine.getRoomInstanceVariable(roomEngine.activeRoomId, RoomObjectVariable.ROOM_FLOOR_TYPE); let landscapeType = roomEngine.getRoomInstanceVariable(roomEngine.activeRoomId, RoomObjectVariable.ROOM_LANDSCAPE_TYPE); wallType = (wallType && wallType.length) ? wallType : '101'; floorType = (floorType && floorType.length) ? floorType : '101'; landscapeType = (landscapeType && landscapeType.length) ? landscapeType : '1.1'; roomPreviewer.reset(false); roomPreviewer.updateRoomWallsAndFloorVisibility(true, true); roomPreviewer.updateObjectRoom(floorType, wallType, landscapeType); roomPreviewer.addAvatarIntoRoom(botData.figure, 0); }, [ roomPreviewer, selectedBot ]); useEffect(() => { if(!selectedBot || !isUnseen(UnseenItemCategory.BOT, selectedBot.botData.id)) return; removeUnseen(UnseenItemCategory.BOT, selectedBot.botData.id); }, [ selectedBot, isUnseen, removeUnseen ]); useEffect(() => { if(!isVisible) return; const id = activate(); return () => deactivate(id); }, [ isVisible, activate, deactivate ]); useEffect(() => { setIsVisible(true); return () => setIsVisible(false); }, []); if(!botItems || !botItems.length) return ; return ( { botItems && (botItems.length > 0) && botItems.map(item => ) } { selectedBot && { selectedBot.botData.name } { !!roomSession && } } ); }