ItemType.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <InMemoryBuffer.h>
  2. #include "ItemType.h"
  3. #include "ItemStack.h"
  4. ItemType::ItemType( int id )
  5. : ReferenceCounter(),
  6. id( id )
  7. {
  8. StaticRegistry<ItemType>::INSTANCE.registerT( this, id );
  9. }
  10. ItemType::~ItemType()
  11. {}
  12. void ItemType::loadSuperItem( Item *zItem, Framework::StreamReader *zReader ) const
  13. {
  14. zReader->lese( (char *)&zItem->damage, 4 );
  15. zReader->lese( (char *)&zItem->maxDamage, 4 );
  16. zReader->lese( (char *)&zItem->durability, 4 );
  17. zReader->lese( (char *)&zItem->maxDurability, 4 );
  18. unsigned char flags = 0;
  19. zReader->lese( (char *)&flags, 1 );
  20. zItem->eatable = ( flags | 1 ) == flags;
  21. zItem->placeable = ( flags | 2 ) == flags;
  22. zItem->equippable = ( flags | 4 ) == flags;
  23. zItem->solid = ( flags | 8 ) == flags;
  24. zItem->usable = ( flags | 16 ) == flags;
  25. zReader->lese( (char *)&zItem->maxStackSize, 1 );
  26. unsigned char len = 0;
  27. zReader->lese( (char *)&len, 1 );
  28. zItem->name.fillText( ' ', len );
  29. zReader->lese( zItem->name, len );
  30. }
  31. int ItemType::getId() const
  32. {
  33. return id;
  34. }
  35. ItemStack *ItemType::createItemStack( int size ) const
  36. {
  37. Item *item = createItem();
  38. if( !item )
  39. return 0;
  40. return new ItemStack( item, MIN( size, item->getMaxStackSize() ) );
  41. }
  42. Item *ItemType::loadItem( Framework::StreamReader *zReader ) const
  43. {
  44. Item *item = createItem();
  45. loadSuperItem( item, zReader );
  46. return item;
  47. }