ItemStack.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "ItemStack.h"
  2. #include "Item.h"
  3. ItemStack::ItemStack( Item *item, int currentSize, int maxSize )
  4. : ReferenceCounter(),
  5. item( item ),
  6. size( currentSize ),
  7. maxSize( maxSize )
  8. {}
  9. ItemStack::ItemStack( Item *item, int currentSize )
  10. : ItemStack( item, currentSize, item->getMaxStackSize() )
  11. {}
  12. void ItemStack::setMaxSize( int size )
  13. {
  14. maxSize = size;
  15. }
  16. ItemStack *ItemStack::split( int size )
  17. {
  18. size = MIN( size, this->size );
  19. this->size -= size;
  20. return new ItemStack( dynamic_cast<Item *>( item->getThis() ), size, item->getMaxStackSize() );
  21. }
  22. Item *ItemStack::extractFromStack()
  23. {
  24. if( size == 0 )
  25. return 0;
  26. --size;
  27. return item->zItemType()->cloneItem( item );
  28. }
  29. bool ItemStack::addToStack( Item *item )
  30. {
  31. if( size < maxSize && this->item->canBeStackedWith( item ) )
  32. {
  33. ++size;
  34. item->release();
  35. return true;
  36. }
  37. item->release();
  38. return false;
  39. }
  40. void ItemStack::addItemStack( ItemStack *zItemStack )
  41. {
  42. if( zItemStack->zItem()->canBeStackedWith( item ) )
  43. {
  44. int numToAdd = MIN( zItemStack->getSize(), maxSize - size );
  45. size += numToAdd;
  46. zItemStack->size -= numToAdd;
  47. }
  48. }
  49. bool ItemStack::isStackable( Item *zItem ) const
  50. {
  51. return item->canBeStackedWith( zItem );
  52. }
  53. const Item *ItemStack::zItem() const
  54. {
  55. return item;
  56. }
  57. int ItemStack::getSize() const
  58. {
  59. return size;
  60. }
  61. int ItemStack::getMaxSize() const
  62. {
  63. return maxSize;
  64. }