ItemType.cpp 1.6 KB

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