ItemType.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #pragma once
  2. #include <JSON.h>
  3. #include <Text.h>
  4. #include <Trie.h>
  5. #include <Writer.h>
  6. #include "BlockType.h"
  7. #include "Effect.h"
  8. #include "ModelInfo.h"
  9. #include "StaticRegistry.h"
  10. class Item;
  11. class ItemStack;
  12. class ItemSkill;
  13. class ItemSkillLevelUpRule;
  14. class ItemTypeEnum : public BlockTypeEnum
  15. {
  16. public:
  17. static const int WOOD_STICK = BlockTypeEnum::MAX_VALUE + 1;
  18. static const int AXE = BlockTypeEnum::MAX_VALUE + 2;
  19. static const int RESIN = BlockTypeEnum::MAX_VALUE + 3;
  20. static const int PLAYER_HAND = BlockTypeEnum::MAX_VALUE + 4;
  21. static const int AXE_BROKEN = BlockTypeEnum::MAX_VALUE + 5;
  22. static const int HOE = BlockTypeEnum::MAX_VALUE + 6;
  23. static const int BROKEN_HOE = BlockTypeEnum::MAX_VALUE + 7;
  24. static const int FLINT = BlockTypeEnum::MAX_VALUE + 8;
  25. static const int SHOVEL = BlockTypeEnum::MAX_VALUE + 9;
  26. static const int SHOVEL_BROKEN = BlockTypeEnum::MAX_VALUE + 10;
  27. static const int WOODEN_BUCKET = BlockTypeEnum::MAX_VALUE + 11;
  28. };
  29. class ItemType : public virtual Framework::ReferenceCounter
  30. {
  31. protected:
  32. const int id;
  33. const Framework::Text name;
  34. Framework::Text tooltipUIML;
  35. ItemSkillLevelUpRule* levelUpRule;
  36. int brokenTypeId;
  37. const ModelInfo model;
  38. ItemType(int id,
  39. const char* name,
  40. ItemSkillLevelUpRule* levelUpRule,
  41. int brokenTypeId,
  42. ModelInfo model);
  43. virtual void loadSuperItem(
  44. Item* zItem, Framework::StreamReader* zReader) const;
  45. virtual void saveSuperItem(
  46. const Item* zItem, Framework::StreamWriter* zWriter) const;
  47. virtual void loadSuperItemSkill(
  48. ItemSkill* zSkill, Framework::StreamReader* zReader) const;
  49. virtual void saveSuperItemSkill(
  50. const ItemSkill* zSkill, Framework::StreamWriter* zWriter) const;
  51. public:
  52. ~ItemType();
  53. int getId() const;
  54. const Framework::Text& getName() const;
  55. const Framework::Text& getTooltipUIML() const;
  56. const ItemType* zBrokenItemType() const;
  57. virtual Item* createItem() const = 0;
  58. virtual ItemStack* createItemStack(int size) const;
  59. virtual ItemSkill* createDefaultItemSkill() const;
  60. virtual void levelUpItemSkill(ItemSkill* zSkill) const;
  61. virtual Item* loadItem(Framework::StreamReader* zReader) const;
  62. virtual void saveItem(
  63. const Item* zItem, Framework::StreamWriter* zWriter) const;
  64. virtual ItemSkill* loadItemSkill(Framework::StreamReader* zReader) const;
  65. virtual void saveItemSkill(
  66. const ItemSkill* zSkill, Framework::StreamWriter* zWriter) const;
  67. virtual Item* cloneItem(const Item* zItem) const;
  68. virtual Item* breakItem(const Item* zItem) const;
  69. const ModelInfo& getModel() const;
  70. virtual void setItemAttribute(Item* zItem,
  71. Framework::Text name,
  72. Framework::JSON::JSONValue* zValue) const;
  73. virtual void addItemAttributes(Item* zItem,
  74. Framework::JSON::JSONObject* zItemObjet) const;
  75. static Item* createBasicItem(int id,
  76. const char* name,
  77. float hp,
  78. float maxHp,
  79. float durability,
  80. float maxDurability,
  81. bool eatable,
  82. bool placeable,
  83. bool equippable,
  84. bool solid,
  85. bool usable,
  86. int maxStackSize);
  87. static int getTypeId(const char* name);
  88. static const ItemType* zByName(const char* name);
  89. };