12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #pragma once
- #include <Vec3.h>
- #include <ReferenceCounter.h>
- #include <HashMap.h>
- #include <Critical.h>
- #include "ItemSlot.h"
- #include "Area.h"
- class ItemFilter;
- class Inventory;
- class InventoryInteraction
- {
- private:
- Inventory* current;
- Inventory* other;
- Direction dir;
- void lock();
- void unlock();
- void transaction( Inventory* zSource, Inventory* zTarget, ItemFilter* zFilter, Direction sourceView, Direction targetView, int count );
- public:
- InventoryInteraction( Inventory* zCurrent, Inventory* zOther, Direction dir );
- InventoryInteraction( const InventoryInteraction& interaction );
- ~InventoryInteraction();
- InventoryInteraction& operator=( const InventoryInteraction& data );
- void endInteraction();
- void pullItems( int count, ItemFilter* zFilter );
- void pushItems( int count, ItemFilter* zFilter );
- };
- class Inventory : public virtual Framework::ReferenceCounter
- {
- private:
- Framework::RCArray<ItemSlot>* pullSlotsOrder;
- Framework::RCArray<ItemSlot>* pushSlotsOrder;
- Framework::HashMap<int, Framework::Array<ItemSlot*>*>* itemCache;
- Framework::Critical cs;
- void updateCache( ItemSlot* zSlot, int beforeKey );
- protected:
- Framework::Vec3<float> location;
- void addSlot( ItemSlot* slot );
- void localTransaction( Framework::Array< ItemSlot* >* zSourceSlots, Framework::Array< ItemSlot* >* zTargetSlots, ItemFilter* zFilter, int count );
- virtual bool allowPullStack( ItemSlot* zSlot, Direction dir ) const;
- virtual bool allowPushStack( ItemSlot* zSlot, Direction dir, const Item* zItem, int& count ) const;
- virtual void afterPullStack( ItemSlot* zSlot, Direction dir, const Item* zItem, int count );
- virtual void afterPushStack( ItemSlot* zSlot, Direction dir, const Item* zItem, int count );
- virtual void loadInventory( Framework::StreamReader* zReader );
- virtual void saveInventory( Framework::StreamWriter* zWriter );
- virtual void addItems( ItemStack* items, Direction dir );
- ItemStack* takeItemsOut( ItemSlot* zSlot, int count, Direction dir );
- public:
- Inventory( const Framework::Vec3<float> location, bool hasInventory );
- virtual ~Inventory();
- InventoryInteraction interactWith( Inventory* zInventory, Direction dir );
- void unsaveAddItem( ItemStack* zStack, Direction dir );
- int numberOfAddableItems( const ItemStack* zStack, Direction dir ) const;
- friend InventoryInteraction;
- };
|