Allow multiple highscores

This commit is contained in:
Bill 2022-03-27 20:08:48 -04:00
parent d96b5bd76e
commit 0ed2c09301

View File

@ -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>
);
}) }
</>
); );
} }