mirror of
https://github.com/billsonnn/nitro-react.git
synced 2025-02-22 11:12:36 +01:00
Allow multiple highscores
This commit is contained in:
parent
d96b5bd76e
commit
0ed2c09301
@ -13,16 +13,9 @@ const CLEAR_TYPES = ['alltime', 'daily', 'weekly', 'monthly'];
|
|||||||
|
|
||||||
export const FurnitureHighScoreView: FC<{}> = props =>
|
export const FurnitureHighScoreView: FC<{}> = props =>
|
||||||
{
|
{
|
||||||
const [objectId, setObjectId] = useState(-1);
|
const [ stuffDatas, setStuffDatas ] = useState<Map<number, HighScoreDataType>>(new Map());
|
||||||
const [stuffData, setStuffData] = useState<HighScoreDataType>(null);
|
|
||||||
const { roomSession = null } = useRoomContext();
|
const { roomSession = null } = useRoomContext();
|
||||||
|
|
||||||
const close = useCallback(() =>
|
|
||||||
{
|
|
||||||
setObjectId(-1);
|
|
||||||
setStuffData(null);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const onRoomEngineTriggerWidgetEvent = useCallback((event: RoomEngineTriggerWidgetEvent) =>
|
const onRoomEngineTriggerWidgetEvent = useCallback((event: RoomEngineTriggerWidgetEvent) =>
|
||||||
{
|
{
|
||||||
switch(event.type)
|
switch(event.type)
|
||||||
@ -32,32 +25,48 @@ export const FurnitureHighScoreView: FC<{}> = props =>
|
|||||||
|
|
||||||
if(!object) return;
|
if(!object) return;
|
||||||
|
|
||||||
setObjectId(object.id);
|
|
||||||
|
|
||||||
const formatKey = object.model.getValue<number>(RoomObjectVariable.FURNITURE_DATA_FORMAT);
|
const formatKey = object.model.getValue<number>(RoomObjectVariable.FURNITURE_DATA_FORMAT);
|
||||||
const stuffData = (ObjectDataFactory.getData(formatKey) as HighScoreDataType);
|
const stuffData = (ObjectDataFactory.getData(formatKey) as HighScoreDataType);
|
||||||
|
|
||||||
stuffData.initializeFromRoomObjectModel(object.model);
|
stuffData.initializeFromRoomObjectModel(object.model);
|
||||||
|
|
||||||
setStuffData(stuffData);
|
setStuffDatas(prevValue =>
|
||||||
|
{
|
||||||
|
const newValue = new Map(prevValue);
|
||||||
|
|
||||||
|
newValue.set(object.id, stuffData);
|
||||||
|
|
||||||
|
return newValue;
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case RoomEngineTriggerWidgetEvent.REQUEST_HIDE_HIGH_SCORE_DISPLAY:
|
case RoomEngineTriggerWidgetEvent.REQUEST_HIDE_HIGH_SCORE_DISPLAY:
|
||||||
if((event.roomId !== roomSession.roomId) || (event.objectId !== objectId)) return;
|
if(event.roomId !== roomSession.roomId) return;
|
||||||
|
|
||||||
close();
|
setStuffDatas(prevValue =>
|
||||||
|
{
|
||||||
|
const newValue = new Map(prevValue);
|
||||||
|
|
||||||
|
newValue.delete(event.objectId);
|
||||||
|
|
||||||
|
return newValue;
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}, [roomSession, objectId, close]);
|
}, [ roomSession ]);
|
||||||
|
|
||||||
UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIGH_SCORE_DISPLAY, onRoomEngineTriggerWidgetEvent);
|
UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIGH_SCORE_DISPLAY, onRoomEngineTriggerWidgetEvent);
|
||||||
UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIDE_HIGH_SCORE_DISPLAY, onRoomEngineTriggerWidgetEvent);
|
UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIDE_HIGH_SCORE_DISPLAY, onRoomEngineTriggerWidgetEvent);
|
||||||
|
|
||||||
if((objectId === -1) || !stuffData) return null;
|
if(!stuffDatas.size) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ObjectLocationView objectId={ objectId } category={ RoomObjectCategory.FLOOR }>
|
<>
|
||||||
<div className="nitro-widget-high-score nitro-context-menu d-flex flex-column">
|
{ Array.from(stuffDatas.entries()).map(([ objectId, stuffData ], index) =>
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<ObjectLocationView key={ index } objectId={ objectId } category={ RoomObjectCategory.FLOOR }>
|
||||||
|
<Column className="nitro-widget-high-score nitro-context-menu" gap={ 0 }>
|
||||||
<ContextMenuHeaderView>
|
<ContextMenuHeaderView>
|
||||||
{ LocalizeText('high.score.display.caption', [ 'scoretype', 'cleartype' ], [ LocalizeText(`high.score.display.scoretype.${ SCORE_TYPES[stuffData.scoreType] }`), LocalizeText(`high.score.display.cleartype.${ CLEAR_TYPES[stuffData.clearType] }`)]) }
|
{ LocalizeText('high.score.display.caption', [ 'scoretype', 'cleartype' ], [ LocalizeText(`high.score.display.scoretype.${ SCORE_TYPES[stuffData.scoreType] }`), LocalizeText(`high.score.display.cleartype.${ CLEAR_TYPES[stuffData.clearType] }`)]) }
|
||||||
</ContextMenuHeaderView>
|
</ContextMenuHeaderView>
|
||||||
@ -89,8 +98,10 @@ export const FurnitureHighScoreView: FC<{}> = props =>
|
|||||||
})}
|
})}
|
||||||
</Column>
|
</Column>
|
||||||
</ContextMenuListView>
|
</ContextMenuListView>
|
||||||
</div>
|
</Column>
|
||||||
</ObjectLocationView>
|
</ObjectLocationView>
|
||||||
|
);
|
||||||
|
}) }
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user