From 898c72dd993ca39b24fa6f64894544e228dd17bf Mon Sep 17 00:00:00 2001 From: DuckieTM Date: Sat, 16 Mar 2024 13:06:08 +0100 Subject: [PATCH] New: Furni detail in Infostand --- .../infostand/InfoStandWidgetFurniView.tsx | 67 ++++++++++++------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx index aa4b388..780cf6c 100644 --- a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx +++ b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx @@ -1,6 +1,5 @@ import { CrackableDataType, GroupInformationComposer, GroupInformationEvent, NowPlayingEvent, RoomControllerLevel, RoomObjectCategory, RoomObjectOperationType, RoomObjectVariable, RoomWidgetEnumItemExtradataParameter, RoomWidgetFurniInfoUsagePolicyEnum, SetObjectDataMessageComposer, SongInfoReceivedEvent, StringDataType } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useState } from 'react'; -import { FaTimes } from 'react-icons/fa'; import { AvatarInfoFurni, CreateLinkEvent, GetGroupInformation, GetNitroInstance, GetRoomEngine, LocalizeText, SendMessageComposer } from '../../../../../api'; import { Base, Button, Column, Flex, LayoutBadgeImageView, LayoutLimitedEditionCompactPlateView, LayoutRarityLevelView, Text, UserProfileIconView } from '../../../../../common'; import { useMessageEvent, useRoom, useSoundEvent } from '../../../../../hooks'; @@ -19,7 +18,7 @@ export const InfoStandWidgetFurniView: FC = props { const { avatarInfo = null, onClose = null } = props; const { roomSession = null } = useRoom(); - + const [ pickupMode, setPickupMode ] = useState(0); const [ canMove, setCanMove ] = useState(false); const [ canRotate, setCanRotate ] = useState(false); @@ -39,6 +38,7 @@ export const InfoStandWidgetFurniView: FC = props const [ songId, setSongId ] = useState(-1); const [ songName, setSongName ] = useState(''); const [ songCreator, setSongCreator ] = useState(''); + const [itemLocation, setItemLocation] = useState<{ x: number; y: number; z: number; }>({ x: -1, y: -1, z: -1 }); useSoundEvent(NowPlayingEvent.NPE_SONG_CHANGED, event => { @@ -48,7 +48,7 @@ export const InfoStandWidgetFurniView: FC = props useSoundEvent(SongInfoReceivedEvent.SIR_TRAX_SONG_INFO_RECEIVED, event => { if(event.id !== songId) return; - + const songInfo = GetNitroInstance().soundManager.musicController.getSongInfo(event.id); if(!songInfo) return; @@ -75,7 +75,13 @@ export const InfoStandWidgetFurniView: FC = props let furniIsJukebox = false; let furniIsSongDisk = false; let furniSongId = -1; - + + const roomObject = GetRoomEngine().getRoomObject( roomSession.roomId, avatarInfo.id, avatarInfo.isWallItem ? RoomObjectCategory.WALL : RoomObjectCategory.FLOOR ); + const location = roomObject.getLocation(); + if (location) { + setItemLocation({ x: location.x, y: location.y, z: location.z, }); + } + const isValidController = (avatarInfo.roomControllerLevel >= RoomControllerLevel.GUEST); if(isValidController || avatarInfo.isOwner || avatarInfo.isRoomOwner || avatarInfo.isAnyRoomController) @@ -90,7 +96,7 @@ export const InfoStandWidgetFurniView: FC = props { canSeeFurniId = true; } - + if((((avatarInfo.usagePolicy === RoomWidgetFurniInfoUsagePolicyEnum.EVERYBODY) || ((avatarInfo.usagePolicy === RoomWidgetFurniInfoUsagePolicyEnum.CONTROLLER) && isValidController)) || ((avatarInfo.extraParam === RoomWidgetEnumItemExtradataParameter.JUKEBOX) && isValidController)) || ((avatarInfo.extraParam === RoomWidgetEnumItemExtradataParameter.USABLE_PRODUCT) && isValidController)) canUse = true; if(avatarInfo.extraParam) @@ -120,7 +126,7 @@ export const InfoStandWidgetFurniView: FC = props else if(avatarInfo.extraParam.indexOf(RoomWidgetEnumItemExtradataParameter.SONGDISK) === 0) { furniSongId = parseInt(avatarInfo.extraParam.substr(RoomWidgetEnumItemExtradataParameter.SONGDISK.length)); - + furniIsSongDisk = true; } @@ -189,7 +195,7 @@ export const InfoStandWidgetFurniView: FC = props setIsJukeBox(furniIsJukebox); setIsSongDisk(furniIsSongDisk); setSongId(furniSongId); - + if(avatarInfo.groupId) SendMessageComposer(new GroupInformationComposer(avatarInfo.groupId, false)); }, [ roomSession, avatarInfo ]); @@ -290,7 +296,7 @@ export const InfoStandWidgetFurniView: FC = props for(const part of dataParts) { const [ key, value ] = part.split('=', 2); - + mapData.set(key, value); } } @@ -328,12 +334,13 @@ export const InfoStandWidgetFurniView: FC = props return ( - + - { avatarInfo.name } - + { !(isSongDisk) && { avatarInfo.name } } + { (songName.length > 0) && { songName } } +
@@ -347,27 +354,27 @@ export const InfoStandWidgetFurniView: FC = props
} - { avatarInfo.image && avatarInfo.image.src.length && + { avatarInfo.image && avatarInfo.image.src.length && }
- { avatarInfo.description } + { avatarInfo.description }
- + { LocalizeText('furni.owner', [ 'name' ], [ avatarInfo.ownerName ]) } { (avatarInfo.purchaseOfferId > 0) && - processButtonAction('buy_one') }> + } { (isJukeBox || isSongDisk) && @@ -396,7 +403,7 @@ export const InfoStandWidgetFurniView: FC = props { isCrackable && <>
- { LocalizeText('infostand.crackable_furni.hits_remaining', [ 'hits', 'target' ], [ crackableHits.toString(), crackableTarget.toString() ]) } + { LocalizeText('infostand.crackable_furni.hits_remaining', [ 'hits', 'target' ], [ crackableHits.toString(), crackableTarget.toString() ]) } } { avatarInfo.groupId > 0 && <> @@ -406,10 +413,18 @@ export const InfoStandWidgetFurniView: FC = props { groupName } } + <> +
+ + X = {itemLocation.x} and Y = {itemLocation.y}
+ BuildHeight = {itemLocation.z < 0.01 ? 0 : itemLocation.z}
+ { canSeeFurniId && Room Furnishing ID: { avatarInfo.id } } +
+ + {itemLocation.x > -1} { godMode && <>
- { canSeeFurniId && ID: { avatarInfo.id } } { (furniKeys.length > 0) && <>
@@ -418,7 +433,7 @@ export const InfoStandWidgetFurniView: FC = props { return ( - { key } + { key } onFurniSettingChange(index, event.target.value) }/> ); }) } @@ -442,29 +457,29 @@ export const InfoStandWidgetFurniView: FC = props
- + { canMove && - } { canRotate && - } { (pickupMode !== PICKUP_MODE_NONE) && - } { canUse && - } { ((furniKeys.length > 0 && furniValues.length > 0) && (furniKeys.length === furniValues.length)) && - } { ((customKeys.length > 0 && customValues.length > 0) && (customKeys.length === customValues.length)) && - }