Procházet zdrojové kódy

fix an inventory bug

Kolja Strohm před 3 roky
rodič
revize
0d6000c596
3 změnil soubory, kde provedl 15 přidání a 1 odebrání
  1. 12 0
      FactoryCraft/Inventory.cpp
  2. 1 0
      FactoryCraft/Inventory.h
  3. 2 1
      FactoryCraft/Player.cpp

+ 12 - 0
FactoryCraft/Inventory.cpp

@@ -491,6 +491,18 @@ void Inventory::addItems( ItemStack* items, Direction dir )
     }
 }
 
+ItemStack* Inventory::takeItemsOut( ItemSlot* zSlot, int count, Direction dir )
+{
+    if( allowPullStack( zSlot, dir ) )
+    {
+        ItemStack* stack = zSlot->takeItemsOut( count, dir );
+        if( stack )
+            updateCache( zSlot, stack->zItem()->zItemType()->getId() );
+        return stack;
+    }
+    return 0;
+}
+
 InventoryInteraction Inventory::interactWith( Inventory* zInventory, Direction dir )
 {
     return InventoryInteraction( this, zInventory, dir );

+ 1 - 0
FactoryCraft/Inventory.h

@@ -51,6 +51,7 @@ protected:
     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 );

+ 2 - 1
FactoryCraft/Player.cpp

@@ -55,7 +55,7 @@ void Player::useItemSlot( ItemSlot* zSlot )
 {
     if( zSlot->zStack() )
     {
-        ItemStack* stack = zSlot->takeItemsOut( 1, NO_DIRECTION );
+        ItemStack* stack = takeItemsOut( zSlot, 1, NO_DIRECTION );
         if( stack )
         {
             Item* item = stack->extractFromStack();
@@ -63,6 +63,7 @@ void Player::useItemSlot( ItemSlot* zSlot )
             if( item->getDurability() > 0 && item->getDamage() < item->getMaxDamage() )
             { // put used item back
                 stack->addToStack( item );
+                // TODO: use inventory wrapper to update the cache of the inventory
                 if( !zSlot->numberOfAddableItems( stack, NO_DIRECTION ) )
                 { // move other items to other space
                     ItemStack* oldItems = zSlot->takeItemsOut( zSlot->zStack()->getSize(), NO_DIRECTION );