This commit is contained in:
Bill 2021-04-29 04:05:49 -04:00
parent dd354e9e74
commit aa2fb1b11c
4 changed files with 112 additions and 8 deletions

View File

@ -1,16 +1,21 @@
import { FurnitureListAddOrUpdateEvent, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListItemParser, FurnitureListRemovedEvent, FurniturePostItPlacedEvent } from 'nitro-renderer';
import { BadgesEvent, BotAddedToInventoryEvent, BotInventoryMessageEvent, BotRemovedFromInventoryEvent, FurnitureListAddOrUpdateEvent, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListItemParser, FurnitureListRemovedEvent, FurniturePostItPlacedEvent, PetAddedToInventoryEvent, PetData, PetInventoryEvent, PetRemovedFromInventory } from 'nitro-renderer';
import { FC, useCallback } from 'react';
import { CreateMessageHook } from '../../hooks/messages/message-event';
import { useInventoryContext } from './context/InventoryContext';
import { InventoryMessageHandlerProps } from './InventoryMessageHandler.types';
import { InventoryBadgeActions } from './reducers/InventoryBadgeReducer';
import { InventoryBotActions } from './reducers/InventoryBotReducer';
import { InventoryFurnitureActions } from './reducers/InventoryFurnitureReducer';
import { mergeFragments } from './utils/FurnitureUtilities';
import { InventoryPetActions } from './reducers/InventoryPetReducer';
import { mergeFurniFragments } from './utils/FurnitureUtilities';
import { mergePetFragments } from './utils/PetUtilities';
let furniMsgFragments: Map<number, FurnitureListItemParser>[] = null;
let petMsgFragments: Map<number, PetData>[] = null;
export const InventoryMessageHandler: FC<InventoryMessageHandlerProps> = props =>
{
const { dispatchFurnitureState = null } = useInventoryContext();
const { dispatchFurnitureState = null, dispatchBotState = null, dispatchPetState = null, dispatchBadgeState = null } = useInventoryContext();
const onFurnitureListAddOrUpdateEvent = useCallback((event: FurnitureListAddOrUpdateEvent) =>
{
@ -30,7 +35,7 @@ export const InventoryMessageHandler: FC<InventoryMessageHandlerProps> = props =
if(!furniMsgFragments) furniMsgFragments = new Array(parser.totalFragments);
const fragment = mergeFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, furniMsgFragments);
const fragment = mergeFurniFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, furniMsgFragments);
if(!fragment) return;
@ -44,7 +49,7 @@ export const InventoryMessageHandler: FC<InventoryMessageHandlerProps> = props =
{
dispatchFurnitureState({
type: InventoryFurnitureActions.SET_NEEDS_UPDATE,
payload: {
payload: {
flag: true
}
});
@ -56,7 +61,7 @@ export const InventoryMessageHandler: FC<InventoryMessageHandlerProps> = props =
dispatchFurnitureState({
type: InventoryFurnitureActions.REMOVE_FURNITURE,
payload: {
payload: {
itemId: parser.itemId
}
});
@ -67,11 +72,107 @@ export const InventoryMessageHandler: FC<InventoryMessageHandlerProps> = props =
}, []);
const onBotInventoryMessageEvent = useCallback((event: BotInventoryMessageEvent) =>
{
const parser = event.getParser();
const fragment = Array.from(parser.items.values());
dispatchBotState({
type: InventoryBotActions.PROCESS_FRAGMENT,
payload: { fragment }
});
}, [ dispatchBotState ]);
const onBotAddedToInventoryEvent = useCallback((event: BotAddedToInventoryEvent) =>
{
const parser = event.getParser();
dispatchBotState({
type: InventoryBotActions.ADD_BOT,
payload: {
botData: parser.item
}
});
}, [ dispatchBotState ]);
const onBotRemovedFromInventoryEvent = useCallback((event: BotRemovedFromInventoryEvent) =>
{
const parser = event.getParser();
dispatchBotState({
type: InventoryBotActions.REMOVE_BOT,
payload: {
botId: parser.itemId
}
});
}, [ dispatchBotState ]);
const onPetInventoryEvent = useCallback((event: PetInventoryEvent) =>
{
const parser = event.getParser();
if(!petMsgFragments) petMsgFragments = new Array(parser.totalFragments);
const fragment = mergePetFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, petMsgFragments);
if(!fragment) return;
dispatchPetState({
type: InventoryPetActions.PROCESS_FRAGMENT,
payload: { fragment }
});
}, [dispatchPetState ]);
const onPetAddedToInventoryEvent = useCallback((event: PetAddedToInventoryEvent) =>
{
const parser = event.getParser();
dispatchPetState({
type: InventoryPetActions.ADD_PET,
payload: {
petData: parser.pet
}
});
}, [ dispatchPetState ]);
const onPetRemovedFromInventory = useCallback((event: PetRemovedFromInventory) =>
{
const parser = event.getParser();
dispatchPetState({
type: InventoryPetActions.REMOVE_PET,
payload: {
petId: parser.petId
}
});
}, [ dispatchPetState ]);
const onBadgesEvent = useCallback((event: BadgesEvent) =>
{
const parser = event.getParser();
dispatchBadgeState({
type: InventoryBadgeActions.SET_BADGES,
payload: {
badgeCodes: parser.getAllBadgeCodes(),
activeBadgeCodes: parser.getActiveBadgeCodes()
}
});
}, [ dispatchBadgeState ]);
CreateMessageHook(FurnitureListAddOrUpdateEvent, onFurnitureListAddOrUpdateEvent);
CreateMessageHook(FurnitureListEvent, onFurnitureListEvent);
CreateMessageHook(FurnitureListInvalidateEvent, onFurnitureListInvalidateEvent);
CreateMessageHook(FurnitureListRemovedEvent, onFurnitureListRemovedEvent);
CreateMessageHook(FurniturePostItPlacedEvent, onFurniturePostItPlacedEvent);
CreateMessageHook(BotInventoryMessageEvent, onBotInventoryMessageEvent);
CreateMessageHook(BotRemovedFromInventoryEvent, onBotRemovedFromInventoryEvent);
CreateMessageHook(BotAddedToInventoryEvent, onBotAddedToInventoryEvent);
CreateMessageHook(PetInventoryEvent, onPetInventoryEvent);
CreateMessageHook(PetRemovedFromInventory, onPetRemovedFromInventory);
CreateMessageHook(PetAddedToInventoryEvent, onPetAddedToInventoryEvent);
CreateMessageHook(BadgesEvent, onBadgesEvent);
return null;
}

View File

@ -11,7 +11,7 @@ import { LocalizeText } from '../../utils/LocalizeText';
import { InventoryContextProvider } from './context/InventoryContext';
import { InventoryMessageHandler } from './InventoryMessageHandler';
import { InventoryTabs, InventoryViewProps } from './InventoryView.types';
import { initialInventoryBadge, inventoryBadgeReducer } from './reducers/InventortBadgeReducer';
import { initialInventoryBadge, inventoryBadgeReducer } from './reducers/InventoryBadgeReducer';
import { initialInventoryBot, inventoryBotReducer } from './reducers/InventoryBotReducer';
import { initialInventoryFurniture, inventoryFurnitureReducer } from './reducers/InventoryFurnitureReducer';
import { initialInventoryPet, inventoryPetReducer } from './reducers/InventoryPetReducer';

View File

@ -1,5 +1,5 @@
import { Dispatch, ProviderProps } from 'react';
import { IInventoryBadgeAction, IInventoryBadgeState } from '../reducers/InventortBadgeReducer';
import { IInventoryBadgeAction, IInventoryBadgeState } from '../reducers/InventoryBadgeReducer';
import { IInventoryBotAction, IInventoryBotState } from '../reducers/InventoryBotReducer';
import { IInventoryFurnitureAction, IInventoryFurnitureState } from '../reducers/InventoryFurnitureReducer';
import { IInventoryPetAction, IInventoryPetState } from '../reducers/InventoryPetReducer';

View File

@ -1 +1,4 @@
@import './badge/InventoryBadgeView';
@import './bot/InventoryBotView';
@import './furniture/InventoryFurnitureView';
@import './pet/InventoryPetView';