nitro-react/src/views/room/widgets/avatar-info/AvatarInfoWidgetView.tsx

134 lines
6.7 KiB
TypeScript
Raw Normal View History

2021-06-13 10:13:46 +02:00
import { RoomObjectCategory } from 'nitro-renderer';
import { FC, useCallback, useState } from 'react';
2021-06-12 04:53:56 +02:00
import { CreateEventDispatcherHook } from '../../../../hooks/events/event-dispatcher.base';
2021-06-17 19:23:34 +02:00
import { useRoomContext } from '../../context/RoomContext';
import { RoomWidgetObjectNameEvent, RoomWidgetRoomEngineUpdateEvent, RoomWidgetRoomObjectUpdateEvent, RoomWidgetUpdateEvent, RoomWidgetUpdateInfostandEvent, RoomWidgetUpdateInfostandFurniEvent, RoomWidgetUpdateInfostandPetEvent, RoomWidgetUpdateInfostandRentableBotEvent, RoomWidgetUpdateInfostandUserEvent } from '../../events';
import { RoomWidgetRoomObjectMessage } from '../../messages';
2021-06-12 04:53:56 +02:00
import { AvatarInfoWidgetViewProps } from './AvatarInfoWidgetView.types';
2021-06-13 10:13:46 +02:00
import { AvatarInfoWidgetNameView } from './views/name/AvatarInfoWidgetNameView';
2021-06-12 04:53:56 +02:00
export const AvatarInfoWidgetView: FC<AvatarInfoWidgetViewProps> = props =>
{
2021-06-17 19:23:34 +02:00
const { eventDispatcher = null, widgetHandler = null } = useRoomContext();
const [ name, setName ] = useState<RoomWidgetObjectNameEvent>(null);
const [ infoStandEvent, setInfoStandEvent ] = useState<RoomWidgetUpdateInfostandEvent>(null);
2021-06-13 10:13:46 +02:00
const [ isGameMode, setGameMode ] = useState(false);
2021-06-12 04:53:56 +02:00
2021-06-17 19:23:34 +02:00
const onRoomWidgetUpdateEvent = useCallback((event: RoomWidgetUpdateEvent) =>
2021-06-12 04:53:56 +02:00
{
2021-06-13 10:13:46 +02:00
switch(event.type)
2021-06-12 04:53:56 +02:00
{
2021-06-17 19:23:34 +02:00
case RoomWidgetRoomEngineUpdateEvent.NORMAL_MODE: {
const roomEngineEvent = (event as RoomWidgetRoomEngineUpdateEvent);
setGameMode(false);
return;
}
case RoomWidgetRoomEngineUpdateEvent.GAME_MODE: {
const roomEngineEvent = (event as RoomWidgetRoomEngineUpdateEvent);
setGameMode(true);
return;
}
case RoomWidgetRoomObjectUpdateEvent.USER_ADDED: {
const roomObjectEvent = (event as RoomWidgetRoomObjectUpdateEvent);
return;
}
case RoomWidgetRoomObjectUpdateEvent.FURNI_REMOVED:
case RoomWidgetRoomObjectUpdateEvent.USER_REMOVED: {
const roomObjectEvent = (event as RoomWidgetRoomObjectUpdateEvent);
setName(prevValue =>
{
if(!prevValue || (roomObjectEvent.id === prevValue.id)) return null;
2021-06-12 04:53:56 +02:00
2021-06-17 19:23:34 +02:00
return prevValue;
})
2021-06-12 04:53:56 +02:00
2021-06-17 19:23:34 +02:00
setInfoStandEvent(prevValue =>
{
if(!prevValue) return null;
2021-06-13 10:13:46 +02:00
2021-06-17 19:23:34 +02:00
switch(event.type)
2021-06-13 10:13:46 +02:00
{
2021-06-17 19:23:34 +02:00
case RoomWidgetRoomObjectUpdateEvent.FURNI_REMOVED:
if(prevValue instanceof RoomWidgetUpdateInfostandFurniEvent)
{
if(prevValue.id === roomObjectEvent.id) return null;
}
break;
case RoomWidgetRoomObjectUpdateEvent.USER_REMOVED:
if(prevValue instanceof RoomWidgetUpdateInfostandUserEvent || prevValue instanceof RoomWidgetUpdateInfostandRentableBotEvent)
2021-06-13 10:13:46 +02:00
{
2021-06-22 08:55:34 +02:00
if(prevValue.roomIndex === roomObjectEvent.id) return null;
2021-06-17 19:23:34 +02:00
}
else if(prevValue instanceof RoomWidgetUpdateInfostandPetEvent)
{
2021-06-22 08:55:34 +02:00
if(prevValue.roomIndex === roomObjectEvent.id) return null;
2021-06-17 19:23:34 +02:00
}
break;
}
return prevValue;
});
2021-06-13 10:13:46 +02:00
return;
}
2021-06-17 19:23:34 +02:00
case RoomWidgetRoomObjectUpdateEvent.OBJECT_ROLL_OVER: {
const roomObjectEvent = (event as RoomWidgetRoomObjectUpdateEvent);
2021-06-13 10:13:46 +02:00
2021-06-17 19:23:34 +02:00
widgetHandler.processWidgetMessage(new RoomWidgetRoomObjectMessage(RoomWidgetRoomObjectMessage.GET_OBJECT_NAME, roomObjectEvent.id, roomObjectEvent.category));
return;
}
case RoomWidgetRoomObjectUpdateEvent.OBJECT_ROLL_OUT: {
const roomObjectEvent = (event as RoomWidgetRoomObjectUpdateEvent);
2021-06-12 04:53:56 +02:00
2021-06-17 19:23:34 +02:00
setName(null);
2021-06-13 10:13:46 +02:00
return;
}
2021-06-17 19:23:34 +02:00
case RoomWidgetObjectNameEvent.TYPE: {
const objectNameEvent = (event as RoomWidgetObjectNameEvent);
2021-06-12 04:53:56 +02:00
2021-06-17 19:23:34 +02:00
if(objectNameEvent.category !== RoomObjectCategory.UNIT) return;
setName(objectNameEvent);
return;
}
case RoomWidgetUpdateInfostandFurniEvent.FURNI:
case RoomWidgetUpdateInfostandUserEvent.OWN_USER:
case RoomWidgetUpdateInfostandUserEvent.PEER:
case RoomWidgetUpdateInfostandUserEvent.BOT:
case RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT: {
2021-06-22 08:55:34 +02:00
setInfoStandEvent((event as RoomWidgetUpdateInfostandFurniEvent));
2021-06-17 19:23:34 +02:00
return;
}
default:
console.log(event);
return;
}
}, [ widgetHandler ]);
2021-06-12 04:53:56 +02:00
2021-06-17 19:23:34 +02:00
CreateEventDispatcherHook(RoomWidgetRoomEngineUpdateEvent.NORMAL_MODE, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetRoomEngineUpdateEvent.GAME_MODE, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.USER_ADDED, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.USER_REMOVED, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.FURNI_REMOVED, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.OBJECT_ROLL_OVER, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.OBJECT_ROLL_OUT, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetObjectNameEvent.TYPE, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetUpdateInfostandFurniEvent.FURNI, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.OWN_USER, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.PEER, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.BOT, eventDispatcher, onRoomWidgetUpdateEvent);
CreateEventDispatcherHook(RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT, eventDispatcher, onRoomWidgetUpdateEvent);
2021-06-13 10:13:46 +02:00
return (
<>
2021-06-17 19:23:34 +02:00
{ name && <AvatarInfoWidgetNameView event={ name } /> }
2021-06-13 10:13:46 +02:00
</>
)
2021-06-12 04:53:56 +02:00
}