mirror of
https://github.com/billsonnn/nitro-react.git
synced 2024-11-26 23:50:52 +01:00
Trophy Room Widget
This commit is contained in:
parent
c5424b2303
commit
f01eb065f3
Binary file not shown.
After Width: | Height: | Size: 6.4 KiB |
@ -1,2 +1,3 @@
|
|||||||
@import './manipulation-menu/FurnitureManipulationMenuView';
|
@import './manipulation-menu/FurnitureManipulationMenuView';
|
||||||
@import './stickie/FurnitureStickieView';
|
@import './stickie/FurnitureStickieView';
|
||||||
|
@import './trophy/FurnitureTrophyView';
|
||||||
|
@ -4,6 +4,7 @@ import { FurnitureManipulationMenuView } from './manipulation-menu/FurnitureMani
|
|||||||
import { FurnitureMannequinView } from './mannequin/FurnitureMannequinView';
|
import { FurnitureMannequinView } from './mannequin/FurnitureMannequinView';
|
||||||
import { FurniturePresentView } from './present/FurniturePresentView';
|
import { FurniturePresentView } from './present/FurniturePresentView';
|
||||||
import { FurnitureStickieView } from './stickie/FurnitureStickieView';
|
import { FurnitureStickieView } from './stickie/FurnitureStickieView';
|
||||||
|
import { FurnitureTrophyView } from './trophy/FurnitureTrophyView';
|
||||||
|
|
||||||
export function FurnitureWidgetsView(props: FurnitureWidgetsViewProps): JSX.Element
|
export function FurnitureWidgetsView(props: FurnitureWidgetsViewProps): JSX.Element
|
||||||
{
|
{
|
||||||
@ -16,6 +17,7 @@ export function FurnitureWidgetsView(props: FurnitureWidgetsViewProps): JSX.Elem
|
|||||||
<FurnitureMannequinView events={ events } />
|
<FurnitureMannequinView events={ events } />
|
||||||
<FurniturePresentView events={ events } />
|
<FurniturePresentView events={ events } />
|
||||||
<FurnitureStickieView events={ events } />
|
<FurnitureStickieView events={ events } />
|
||||||
|
<FurnitureTrophyView events={ events } />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
export class FurnitureTrophyData
|
||||||
|
{
|
||||||
|
constructor(
|
||||||
|
public objectId: number,
|
||||||
|
public category: number,
|
||||||
|
public color: string,
|
||||||
|
public ownerName: string,
|
||||||
|
public date: string,
|
||||||
|
public message: string) {}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
.nitro-trophy {
|
||||||
|
position: relative;
|
||||||
|
width: 340px;
|
||||||
|
height: 173px;
|
||||||
|
top: 25px;
|
||||||
|
left: 25px;
|
||||||
|
color: black;
|
||||||
|
|
||||||
|
background-position: 0px 0px;
|
||||||
|
background-image: url('../../../../../assets/images/room-widgets/trophy-widget/trophy-spritesheet.png');
|
||||||
|
|
||||||
|
&.trophy-2 {
|
||||||
|
background-position: 0px 173px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.trophy-3 {
|
||||||
|
background-position: 0px 346px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trophy-header {
|
||||||
|
.trophy-close {
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
top: 5px;
|
||||||
|
right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trophy-title {
|
||||||
|
padding-top: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.trophy-content {
|
||||||
|
width: 297px;
|
||||||
|
height: 110px;
|
||||||
|
margin-top: 3px;
|
||||||
|
margin-left: 23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trophy-footer {
|
||||||
|
width: 297px;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-left: 23px;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
import { NitroEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from 'nitro-renderer';
|
||||||
|
import { FC, useCallback, useState } from 'react';
|
||||||
|
import { GetRoomEngine } from '../../../../../api';
|
||||||
|
import { DraggableWindow } from '../../../../../hooks/draggable-window/DraggableWindow';
|
||||||
|
import { CreateEventDispatcherHook } from '../../../../../hooks/events/event-dispatcher.base';
|
||||||
|
import { useRoomEngineEvent } from '../../../../../hooks/events/nitro/room/room-engine-event';
|
||||||
|
import { RoomWidgetRoomObjectUpdateEvent } from '../../events';
|
||||||
|
import { FurnitureTrophyData } from './FurnitureTrophyData';
|
||||||
|
import { FurnitureTrophyViewProps } from './FurnitureTrophyView.types';
|
||||||
|
|
||||||
|
export const FurnitureTrophyView: FC<FurnitureTrophyViewProps> = props =>
|
||||||
|
{
|
||||||
|
const [ trophyData, setTrophyData ] = useState<FurnitureTrophyData>(null);
|
||||||
|
|
||||||
|
const onNitroEvent = useCallback((event: NitroEvent) =>
|
||||||
|
{
|
||||||
|
switch(event.type)
|
||||||
|
{
|
||||||
|
case RoomEngineTriggerWidgetEvent.REQUEST_TROPHY: {
|
||||||
|
const widgetEvent = (event as RoomEngineTriggerWidgetEvent);
|
||||||
|
|
||||||
|
const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category);
|
||||||
|
|
||||||
|
if(!roomObject) return;
|
||||||
|
|
||||||
|
let data = roomObject.model.getValue<string>(RoomObjectVariable.FURNITURE_DATA);
|
||||||
|
let extra = roomObject.model.getValue<string>(RoomObjectVariable.FURNITURE_EXTRAS);
|
||||||
|
|
||||||
|
if(!extra) extra = '0';
|
||||||
|
|
||||||
|
const color = roomObject.model.getValue<string>(RoomObjectVariable.FURNITURE_COLOR);
|
||||||
|
const ownerName = data.substring(0, data.indexOf('\t'));
|
||||||
|
|
||||||
|
data = data.substring((ownerName.length + 1), data.length);
|
||||||
|
|
||||||
|
const trophyDate = data.substring(0, data.indexOf('\t'));
|
||||||
|
const trophyText = data.substr((trophyDate.length + 1), data.length);
|
||||||
|
|
||||||
|
setTrophyData(new FurnitureTrophyData(widgetEvent.objectId, widgetEvent.category, color, ownerName, trophyDate, trophyText));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
case RoomWidgetRoomObjectUpdateEvent.FURNI_REMOVED: {
|
||||||
|
const widgetEvent = (event as RoomWidgetRoomObjectUpdateEvent);
|
||||||
|
|
||||||
|
setTrophyData(prevState =>
|
||||||
|
{
|
||||||
|
if(!prevState || (widgetEvent.id !== prevState.objectId) || (widgetEvent.category !== prevState.category)) return prevState;
|
||||||
|
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_TROPHY, onNitroEvent);
|
||||||
|
CreateEventDispatcherHook(RoomWidgetRoomObjectUpdateEvent.FURNI_REMOVED, props.events, onNitroEvent);
|
||||||
|
|
||||||
|
const processAction = useCallback((type: string, value: string = null) =>
|
||||||
|
{
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case 'close':
|
||||||
|
setTrophyData(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if(!trophyData) return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<DraggableWindow handle=".drag-handler">
|
||||||
|
<div className={ "nitro-trophy trophy-" + trophyData.color }>
|
||||||
|
<div className="trophy-header drag-handler">
|
||||||
|
<div className="float-end trophy-close" onClick={ event => processAction('close') }></div>
|
||||||
|
<div className="trophy-title fw-bold text-center">
|
||||||
|
Trophy
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="trophy-content">
|
||||||
|
{ trophyData.message }
|
||||||
|
</div>
|
||||||
|
<div className="trophy-footer d-flex justify-content-between fw-bold">
|
||||||
|
<div>{ trophyData.date }</div>
|
||||||
|
<div>{ trophyData.ownerName }</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</DraggableWindow>
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
import { FurnitureWidgetProps } from '../FurnitureWidget.types';
|
||||||
|
|
||||||
|
export interface FurnitureTrophyViewProps extends FurnitureWidgetProps
|
||||||
|
{}
|
Loading…
Reference in New Issue
Block a user