mirror of
https://github.com/billsonnn/nitro-react.git
synced 2024-11-26 15:40:51 +01:00
Update furniture inventory
This commit is contained in:
parent
f73ddf1add
commit
56daa2bbe6
@ -1,7 +1,7 @@
|
|||||||
import { FurnitureListItemParser } from 'nitro-renderer';
|
import { FurnitureListItemParser } from 'nitro-renderer';
|
||||||
import { Reducer } from 'react';
|
import { Reducer } from 'react';
|
||||||
import { FurnitureItem } from '../utils/FurnitureItem';
|
import { FurnitureItem } from '../utils/FurnitureItem';
|
||||||
import { addFurnitureItem, processFragment, removeItemById } from '../utils/FurnitureUtilities';
|
import { addFurnitureItem, processFurniFragment, removeFurniItemById } from '../utils/FurnitureUtilities';
|
||||||
import { GroupItem } from '../utils/GroupItem';
|
import { GroupItem } from '../utils/GroupItem';
|
||||||
|
|
||||||
export interface IInventoryFurnitureState
|
export interface IInventoryFurnitureState
|
||||||
@ -27,9 +27,9 @@ export class InventoryFurnitureActions
|
|||||||
{
|
{
|
||||||
public static SET_NEEDS_UPDATE: string = 'IFA_SET_NEEDS_UPDATE';
|
public static SET_NEEDS_UPDATE: string = 'IFA_SET_NEEDS_UPDATE';
|
||||||
public static SET_GROUP_ITEM: string = 'IFA_SET_GROUP_ITEM';
|
public static SET_GROUP_ITEM: string = 'IFA_SET_GROUP_ITEM';
|
||||||
|
public static PROCESS_FRAGMENT: string = 'IFA_PROCESS_FRAGMENT';
|
||||||
public static ADD_OR_UPDATE_FURNITURE: string = 'IFA_ADD_OR_UPDATE_FURNITURE';
|
public static ADD_OR_UPDATE_FURNITURE: string = 'IFA_ADD_OR_UPDATE_FURNITURE';
|
||||||
public static REMOVE_FURNITURE: string = 'IFA_REMOVE_FURNITURE';
|
public static REMOVE_FURNITURE: string = 'IFA_REMOVE_FURNITURE';
|
||||||
public static PROCESS_FRAGMENT: string = 'IFA_PROCESS_FRAGMENT';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const initialInventoryFurniture: IInventoryFurnitureState = {
|
export const initialInventoryFurniture: IInventoryFurnitureState = {
|
||||||
@ -60,6 +60,13 @@ export const inventoryFurnitureReducer: Reducer<IInventoryFurnitureState, IInven
|
|||||||
|
|
||||||
return { ...state, groupItem };
|
return { ...state, groupItem };
|
||||||
}
|
}
|
||||||
|
case InventoryFurnitureActions.PROCESS_FRAGMENT: {
|
||||||
|
const groupItems = [ ...state.groupItems ];
|
||||||
|
|
||||||
|
processFurniFragment(groupItems, (action.payload.fragment || null));
|
||||||
|
|
||||||
|
return { ...state, groupItems };
|
||||||
|
}
|
||||||
case InventoryFurnitureActions.ADD_OR_UPDATE_FURNITURE: {
|
case InventoryFurnitureActions.ADD_OR_UPDATE_FURNITURE: {
|
||||||
const groupItems = [ ...state.groupItems ];
|
const groupItems = [ ...state.groupItems ];
|
||||||
|
|
||||||
@ -120,14 +127,7 @@ export const inventoryFurnitureReducer: Reducer<IInventoryFurnitureState, IInven
|
|||||||
case InventoryFurnitureActions.REMOVE_FURNITURE: {
|
case InventoryFurnitureActions.REMOVE_FURNITURE: {
|
||||||
const groupItems = [ ...state.groupItems ];
|
const groupItems = [ ...state.groupItems ];
|
||||||
|
|
||||||
removeItemById(action.payload.itemId, groupItems);
|
removeFurniItemById(action.payload.itemId, groupItems);
|
||||||
|
|
||||||
return { ...state, groupItems };
|
|
||||||
}
|
|
||||||
case InventoryFurnitureActions.PROCESS_FRAGMENT: {
|
|
||||||
const groupItems = [ ...state.groupItems ];
|
|
||||||
|
|
||||||
processFragment(groupItems, (action.payload.fragment || null));
|
|
||||||
|
|
||||||
return { ...state, groupItems };
|
return { ...state, groupItems };
|
||||||
}
|
}
|
||||||
|
@ -6,29 +6,7 @@ import { SendMessageHook } from '../../../hooks/messages/message-event';
|
|||||||
import { FurniCategory } from './FurniCategory';
|
import { FurniCategory } from './FurniCategory';
|
||||||
import { FurnitureItem } from './FurnitureItem';
|
import { FurnitureItem } from './FurnitureItem';
|
||||||
import { GroupItem } from './GroupItem';
|
import { GroupItem } from './GroupItem';
|
||||||
|
import { getPlacingItemId, setObjectMoverRequested, setPlacingItemId } from './InventoryUtilities';
|
||||||
let objectMoverRequested = false;
|
|
||||||
let itemIdInFurniPlacing = -1;
|
|
||||||
|
|
||||||
export function isObjectMoverRequested(): boolean
|
|
||||||
{
|
|
||||||
return objectMoverRequested;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function setObjectMoverRequested(flag: boolean)
|
|
||||||
{
|
|
||||||
objectMoverRequested = flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getPlacingFurnitureId(): number
|
|
||||||
{
|
|
||||||
return itemIdInFurniPlacing;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function setPlacingFurnitureId(id: number)
|
|
||||||
{
|
|
||||||
itemIdInFurniPlacing = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function attemptItemPlacement(groupItem: GroupItem, flag: boolean = false): boolean
|
export function attemptItemPlacement(groupItem: GroupItem, flag: boolean = false): boolean
|
||||||
{
|
{
|
||||||
@ -67,7 +45,7 @@ export function attemptItemPlacement(groupItem: GroupItem, flag: boolean = false
|
|||||||
|
|
||||||
if(isMoving)
|
if(isMoving)
|
||||||
{
|
{
|
||||||
setPlacingFurnitureId(item.ref);
|
setPlacingItemId(item.ref);
|
||||||
setObjectMoverRequested(true);
|
setObjectMoverRequested(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -77,11 +55,11 @@ export function attemptItemPlacement(groupItem: GroupItem, flag: boolean = false
|
|||||||
|
|
||||||
function cancelRoomObjectPlacement(): void
|
function cancelRoomObjectPlacement(): void
|
||||||
{
|
{
|
||||||
if(getPlacingFurnitureId() === -1) return;
|
if(getPlacingItemId() === -1) return;
|
||||||
|
|
||||||
GetRoomEngine().cancelRoomObjectPlacement();
|
GetRoomEngine().cancelRoomObjectPlacement();
|
||||||
|
|
||||||
setPlacingFurnitureId(-1);
|
setPlacingItemId(-1);
|
||||||
setObjectMoverRequested(false);
|
setObjectMoverRequested(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +73,7 @@ export function getGroupItemForFurnitureId(set: GroupItem[], id: number): GroupI
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function mergeFragments(fragment: Map<number, FurnitureListItemParser>, totalFragments: number, fragmentNumber: number, fragments: Map<number, FurnitureListItemParser>[])
|
export function mergeFurniFragments(fragment: Map<number, FurnitureListItemParser>, totalFragments: number, fragmentNumber: number, fragments: Map<number, FurnitureListItemParser>[])
|
||||||
{
|
{
|
||||||
if(totalFragments === 1) return fragment;
|
if(totalFragments === 1) return fragment;
|
||||||
|
|
||||||
@ -120,7 +98,7 @@ export function mergeFragments(fragment: Map<number, FurnitureListItemParser>, t
|
|||||||
return merged;
|
return merged;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getAllItemIds(groupItems: GroupItem[]): number[]
|
function getAllItemIds(groupItems: GroupItem[]): number[]
|
||||||
{
|
{
|
||||||
const itemIds: number[] = [];
|
const itemIds: number[] = [];
|
||||||
|
|
||||||
@ -143,7 +121,7 @@ export function getAllItemIds(groupItems: GroupItem[]): number[]
|
|||||||
return itemIds;
|
return itemIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function processFragment(set: GroupItem[], fragment: Map<number, FurnitureListItemParser>): GroupItem[]
|
export function processFurniFragment(set: GroupItem[], fragment: Map<number, FurnitureListItemParser>): GroupItem[]
|
||||||
{
|
{
|
||||||
const existingIds = getAllItemIds(set);
|
const existingIds = getAllItemIds(set);
|
||||||
const addedIds: number[] = [];
|
const addedIds: number[] = [];
|
||||||
@ -155,7 +133,7 @@ export function processFragment(set: GroupItem[], fragment: Map<number, Furnitur
|
|||||||
|
|
||||||
const emptyExistingSet = (existingIds.length === 0);
|
const emptyExistingSet = (existingIds.length === 0);
|
||||||
|
|
||||||
for(const id of removedIds) removeItemById(id, set);
|
for(const id of removedIds) removeFurniItemById(id, set);
|
||||||
|
|
||||||
for(const id of addedIds)
|
for(const id of addedIds)
|
||||||
{
|
{
|
||||||
@ -171,7 +149,7 @@ export function processFragment(set: GroupItem[], fragment: Map<number, Furnitur
|
|||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function removeItemById(id: number, set: GroupItem[]): GroupItem
|
export function removeFurniItemById(id: number, set: GroupItem[]): GroupItem
|
||||||
{
|
{
|
||||||
let index = 0;
|
let index = 0;
|
||||||
|
|
||||||
@ -182,7 +160,7 @@ export function removeItemById(id: number, set: GroupItem[]): GroupItem
|
|||||||
|
|
||||||
if(item)
|
if(item)
|
||||||
{
|
{
|
||||||
if(getPlacingFurnitureId() === item.ref)
|
if(getPlacingItemId() === item.ref)
|
||||||
{
|
{
|
||||||
cancelRoomObjectPlacement();
|
cancelRoomObjectPlacement();
|
||||||
|
|
||||||
@ -224,7 +202,7 @@ export function addFurnitureItem(set: GroupItem[], item: FurnitureItem, flag: bo
|
|||||||
if(!flag) groupItem.hasUnseenItems = true;
|
if(!flag) groupItem.hasUnseenItems = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addSingleFurnitureItem(set: GroupItem[], item: FurnitureItem, flag: boolean): GroupItem
|
function addSingleFurnitureItem(set: GroupItem[], item: FurnitureItem, flag: boolean): GroupItem
|
||||||
{
|
{
|
||||||
const groupItems: GroupItem[] = [];
|
const groupItems: GroupItem[] = [];
|
||||||
|
|
||||||
@ -257,7 +235,7 @@ export function addSingleFurnitureItem(set: GroupItem[], item: FurnitureItem, fl
|
|||||||
return groupItem;
|
return groupItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addGroupableFurnitureItem(set: GroupItem[], item: FurnitureItem, unseen: boolean): GroupItem
|
function addGroupableFurnitureItem(set: GroupItem[], item: FurnitureItem, unseen: boolean): GroupItem
|
||||||
{
|
{
|
||||||
let existingGroup: GroupItem = null;
|
let existingGroup: GroupItem = null;
|
||||||
|
|
||||||
@ -332,7 +310,7 @@ export function addGroupableFurnitureItem(set: GroupItem[], item: FurnitureItem,
|
|||||||
return existingGroup;
|
return existingGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createGroupItem(type: number, category: number, stuffData: IObjectData, extra: number = NaN, flag: boolean = false): GroupItem
|
function createGroupItem(type: number, category: number, stuffData: IObjectData, extra: number = NaN, flag: boolean = false): GroupItem
|
||||||
{
|
{
|
||||||
// const iconImage: HTMLImageElement = null;
|
// const iconImage: HTMLImageElement = null;
|
||||||
|
|
||||||
|
@ -16,10 +16,8 @@ import { InventoryFurnitureSearchView } from './search/InventoryFurnitureSearchV
|
|||||||
export const InventoryFurnitureView: FC<InventoryFurnitureViewProps> = props =>
|
export const InventoryFurnitureView: FC<InventoryFurnitureViewProps> = props =>
|
||||||
{
|
{
|
||||||
const { roomSession = null, roomPreviewer = null } = props;
|
const { roomSession = null, roomPreviewer = null } = props;
|
||||||
|
|
||||||
const { furnitureState = null, dispatchFurnitureState = null } = useInventoryContext();
|
const { furnitureState = null, dispatchFurnitureState = null } = useInventoryContext();
|
||||||
const { needsFurniUpdate = false, groupItem = null, groupItems = [] } = furnitureState;
|
const { needsFurniUpdate = false, groupItem = null, groupItems = [] } = furnitureState;
|
||||||
|
|
||||||
const [ filteredGroupItems, setFilteredGroupItems ] = useState<GroupItem[]>(groupItems);
|
const [ filteredGroupItems, setFilteredGroupItems ] = useState<GroupItem[]>(groupItems);
|
||||||
|
|
||||||
useEffect(() =>
|
useEffect(() =>
|
||||||
@ -99,6 +97,23 @@ export const InventoryFurnitureView: FC<InventoryFurnitureViewProps> = props =>
|
|||||||
}
|
}
|
||||||
}, [ roomPreviewer, groupItem ]);
|
}, [ roomPreviewer, groupItem ]);
|
||||||
|
|
||||||
|
if(!groupItems || !groupItems.length)
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<div className="row h-100">
|
||||||
|
<div className="col-5 d-flex justify-content-center align-items-center">
|
||||||
|
<div className="empty-image"></div>
|
||||||
|
</div>
|
||||||
|
<div className="d-flex flex-column col justify-content-center">
|
||||||
|
<div className="h5 m-0 text-black fw-bold m-0 mb-2">
|
||||||
|
{ LocalizeText('inventory.empty.title') }
|
||||||
|
</div>
|
||||||
|
<div className="h6 text-black">{ LocalizeText('inventory.empty.desc') }</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="row h-100">
|
<div className="row h-100">
|
||||||
<div className="col col-7">
|
<div className="col col-7">
|
||||||
|
@ -19,9 +19,7 @@ export const InventoryFurnitureItemView: FC<InventoryFurnitureItemViewProps> = p
|
|||||||
case MouseEventType.MOUSE_DOWN:
|
case MouseEventType.MOUSE_DOWN:
|
||||||
dispatchFurnitureState({
|
dispatchFurnitureState({
|
||||||
type: InventoryFurnitureActions.SET_GROUP_ITEM,
|
type: InventoryFurnitureActions.SET_GROUP_ITEM,
|
||||||
payload: {
|
payload: { groupItem }
|
||||||
groupItem
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
setMouseDown(true);
|
setMouseDown(true);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.item-container {
|
.furni-item-container {
|
||||||
height: 192px;
|
height: 192px;
|
||||||
max-height: 192px;
|
max-height: 192px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
@ -7,7 +7,7 @@ export const InventoryFurnitureResultsView: FC<InventoryFurnitureResultsViewProp
|
|||||||
const { groupItems = [] } = props;
|
const { groupItems = [] } = props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="row row-cols-5 align-content-start g-0 item-container">
|
<div className="row row-cols-5 align-content-start g-0 fruni-item-container">
|
||||||
{ (groupItems && groupItems.length && groupItems.map((item, index) =>
|
{ (groupItems && groupItems.length && groupItems.map((item, index) =>
|
||||||
{
|
{
|
||||||
return <InventoryFurnitureItemView key={ index } groupItem={ item } />
|
return <InventoryFurnitureItemView key={ index } groupItem={ item } />
|
||||||
|
Loading…
Reference in New Issue
Block a user