import { AvatarAction, AvatarExpressionEnum, CreateLinkEvent, RoomControllerLevel, RoomObjectCategory, RoomUnitDropHandItemComposer } from '@nitrots/nitro-renderer'; import { Dispatch, FC, SetStateAction, useState } from 'react'; import { FaChevronLeft, FaChevronRight } from 'react-icons/fa'; import { AvatarInfoUser, DispatchUiEvent, GetCanStandUp, GetCanUseExpression, GetOwnPosture, GetUserProfile, HasHabboClub, HasHabboVip, IsRidingHorse, LocalizeText, PostureTypeEnum, SendMessageComposer } from '../../../../../api'; import { LayoutCurrencyIcon } from '../../../../../common'; import { HelpNameChangeEvent } from '../../../../../events'; import { useRoom, useWiredTools } from '../../../../../hooks'; import { ContextMenuHeaderView } from '../../context-menu/ContextMenuHeaderView'; import { ContextMenuListItemView } from '../../context-menu/ContextMenuListItemView'; import { ContextMenuView } from '../../context-menu/ContextMenuView'; interface AvatarInfoWidgetOwnAvatarViewProps { avatarInfo: AvatarInfoUser; isDancing: boolean; setIsDecorating: Dispatch>; onClose: () => void; } const MODE_NORMAL = 0; const MODE_CLUB_DANCES = 1; const MODE_NAME_CHANGE = 2; const MODE_EXPRESSIONS = 3; const MODE_SIGNS = 4; export const AvatarInfoWidgetOwnAvatarView: FC = props => { const { avatarInfo = null, isDancing = false, setIsDecorating = null, onClose = null } = props; const [ mode, setMode ] = useState((isDancing && HasHabboClub()) ? MODE_CLUB_DANCES : MODE_NORMAL); const { roomSession = null } = useRoom(); const { openInspectionForUser, showInspectButton } = useWiredTools(); const processAction = (name: string) => { let hideMenu = true; if(name) { if(name.startsWith('sign_')) { const sign = parseInt(name.split('_')[1]); roomSession.sendSignMessage(sign); } else { switch(name) { case 'decorate': setIsDecorating(true); break; case 'change_name': DispatchUiEvent(new HelpNameChangeEvent(HelpNameChangeEvent.INIT)); break; case 'change_looks': CreateLinkEvent('avatar-editor/show'); break; case 'avatar_effect': CreateLinkEvent('avatar-effects/show'); break; case 'expressions': hideMenu = false; setMode(MODE_EXPRESSIONS); break; case 'sit': roomSession.sendPostureMessage(PostureTypeEnum.POSTURE_SIT); break; case 'stand': roomSession.sendPostureMessage(PostureTypeEnum.POSTURE_STAND); break; case 'wave': roomSession.sendExpressionMessage(AvatarExpressionEnum.WAVE.ordinal); break; case 'blow': roomSession.sendExpressionMessage(AvatarExpressionEnum.BLOW.ordinal); break; case 'laugh': roomSession.sendExpressionMessage(AvatarExpressionEnum.LAUGH.ordinal); break; case 'idle': roomSession.sendExpressionMessage(AvatarExpressionEnum.IDLE.ordinal); break; case 'dance_menu': hideMenu = false; setMode(MODE_CLUB_DANCES); break; case 'dance': roomSession.sendDanceMessage(1); break; case 'dance_stop': roomSession.sendDanceMessage(0); break; case 'dance_1': case 'dance_2': case 'dance_3': case 'dance_4': roomSession.sendDanceMessage(parseInt(name.charAt((name.length - 1)))); break; case 'signs': hideMenu = false; setMode(MODE_SIGNS); break; case 'back': hideMenu = false; setMode(MODE_NORMAL); break; case 'drop_carry_item': SendMessageComposer(new RoomUnitDropHandItemComposer()); break; case 'inspect': openInspectionForUser(avatarInfo.roomIndex); break; } } } if(hideMenu) onClose(); }; const isShowDecorate = () => (avatarInfo.amIOwner || avatarInfo.amIAnyRoomController || (avatarInfo.roomControllerLevel > RoomControllerLevel.GUEST)); const isRidingHorse = IsRidingHorse(); return ( GetUserProfile(avatarInfo.webID) }> { avatarInfo.name } { (mode === MODE_NORMAL) && <> { avatarInfo.allowNameChange && processAction('change_name') }> { LocalizeText('widget.avatar.change_name') } } { isShowDecorate() && processAction('decorate') }> { LocalizeText('widget.avatar.decorate') } } processAction('change_looks') }> { LocalizeText('widget.memenu.myclothes') } processAction('avatar_effect') }> { LocalizeText('product.type.effect') } { (HasHabboClub() && !isRidingHorse) && processAction('dance_menu') }> { LocalizeText('widget.memenu.dance') } } { (!isDancing && !HasHabboClub() && !isRidingHorse) && processAction('dance') }> { LocalizeText('widget.memenu.dance') } } { (isDancing && !HasHabboClub() && !isRidingHorse) && processAction('dance_stop') }> { LocalizeText('widget.memenu.dance.stop') } } processAction('expressions') }> { LocalizeText('infostand.link.expressions') } processAction('signs') }> { LocalizeText('infostand.show.signs') } { (avatarInfo.carryItem > 0) && processAction('drop_carry_item') }> { LocalizeText('avatar.widget.drop_hand_item') } } { showInspectButton && processAction('inspect') }> Inspect } } { (mode === MODE_CLUB_DANCES) && <> { isDancing && processAction('dance_stop') }> { LocalizeText('widget.memenu.dance.stop') } } processAction('dance_1') }> { LocalizeText('widget.memenu.dance1') } processAction('dance_2') }> { LocalizeText('widget.memenu.dance2') } processAction('dance_3') }> { LocalizeText('widget.memenu.dance3') } processAction('dance_4') }> { LocalizeText('widget.memenu.dance4') } processAction('back') }> { LocalizeText('generic.back') } } { (mode === MODE_EXPRESSIONS) && <> { (GetOwnPosture() === AvatarAction.POSTURE_STAND) && processAction('sit') }> { LocalizeText('widget.memenu.sit') } } { GetCanStandUp() && processAction('stand') }> { LocalizeText('widget.memenu.stand') } } { GetCanUseExpression() && processAction('wave') }> { LocalizeText('widget.memenu.wave') } } { GetCanUseExpression() && processAction('laugh') }> { !HasHabboVip() && } { LocalizeText('widget.memenu.laugh') } } { GetCanUseExpression() && processAction('blow') }> { !HasHabboVip() && } { LocalizeText('widget.memenu.blow') } } processAction('idle') }> { LocalizeText('widget.memenu.idle') } processAction('back') }> { LocalizeText('generic.back') } } { (mode === MODE_SIGNS) && <>
processAction('sign_1') }> 1 processAction('sign_2') }> 2 processAction('sign_3') }> 3
processAction('sign_4') }> 4 processAction('sign_5') }> 5 processAction('sign_6') }> 6
processAction('sign_7') }> 7 processAction('sign_8') }> 8 processAction('sign_9') }> 9
processAction('sign_10') }> 10 processAction('sign_11') }> processAction('sign_12') }>
processAction('sign_0') }> 0 processAction('sign_13') }> processAction('sign_15') }>
processAction('sign_14') }> processAction('sign_17') }> processAction('sign_16') }>
processAction('back') }> { LocalizeText('generic.back') } }
); };