BasicTool.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. #pragma once
  2. #include "BasicItems.h"
  3. #include "BlockFilter.h"
  4. #include "Item.h"
  5. #include "ItemSkill.h"
  6. class BasicToolItemType;
  7. class XPBasedLevelUpRule : public ItemSkillLevelUpRule
  8. {
  9. private:
  10. float xpIncrease;
  11. float xpMultiplier;
  12. float levelIncrease;
  13. float levelMultiplier;
  14. float maxLevel;
  15. public:
  16. XPBasedLevelUpRule(float xpIncrease,
  17. float xpMultiplier,
  18. float levelIncrease,
  19. float levelMultiplier,
  20. float maxLevel);
  21. virtual void applyOn(ItemSkill* zSkill) override;
  22. float getXpIncrease() const;
  23. float getXpMultiplier() const;
  24. float getLevelIncrease() const;
  25. float getLevelMultiplier() const;
  26. float getMaxLevel() const;
  27. };
  28. class XPBasedLevelUpRuleFactory
  29. : public SubTypeFactory<ItemSkillLevelUpRule, XPBasedLevelUpRule>
  30. {
  31. public:
  32. XPBasedLevelUpRuleFactory();
  33. XPBasedLevelUpRule* fromJson(
  34. Framework::JSON::JSONObject* zJson) const override;
  35. Framework::JSON::JSONObject* toJson(
  36. XPBasedLevelUpRule* zObject) const override;
  37. Framework::JSON::Validator::JSONValidator* getValidator(
  38. Framework::JSON::Validator::ObjectValidationBuilder<
  39. Framework::JSON::Validator::JSONValidator>* builder) const override;
  40. Framework::Text getTypeToken() const override;
  41. };
  42. class BasicToolItem : public Item
  43. {
  44. private:
  45. float headMaterialHardness;
  46. float rodMaterialHardness;
  47. float handleMaterialHardness;
  48. public:
  49. BasicToolItem(int itemTypeId,
  50. Framework::Text name,
  51. float maxHp,
  52. float maxDurability);
  53. void setHeadMaterialHardness(float hardness);
  54. void setRodMaterialHardness(float hardness);
  55. void setHandleMaterialHardness(float hardness);
  56. float getHeadMaterialHardness() const;
  57. float getRodMaterialHardness() const;
  58. float getHandleMaterialHardness() const;
  59. };
  60. class BasicToolItemType : public ItemType
  61. {
  62. private:
  63. float headMaterialHardness;
  64. float rodMaterialHardness;
  65. float handleMaterialHardness;
  66. float baseDurability;
  67. float baseDurabilityMultiplier;
  68. float headMaterialDurability;
  69. float headMaterialDurabilityMultiplier;
  70. float rodMaterialDurability;
  71. float rodMaterialDurabilityMultiplier;
  72. float handleMaterialDurability;
  73. float handleMaterialDurabilityMultiplier;
  74. ItemSkillLevelUpRule* levelUpRule;
  75. int brokenItemTypeId;
  76. Framework::Text brokenItemTypeName;
  77. Framework::JSON::JSONObject* itemSkillConfigJson;
  78. public:
  79. BasicToolItemType(Framework::Text name,
  80. ModelInfo* model,
  81. float headMaterialHardness,
  82. float rodMaterialHardness,
  83. float handleMaterialHardness,
  84. float baseDurability,
  85. float baseDurabilityMultiplier,
  86. float headMaterialDurability,
  87. float headMaterialDurabilityMultiplier,
  88. float rodMaterialDurability,
  89. float rodMaterialDurabilityMultiplier,
  90. float handleMaterialDurability,
  91. float handleMaterialDurabilityMultiplier,
  92. ItemSkillLevelUpRule* levelUpRule,
  93. Framework::Text brokenItemTypeName,
  94. Framework::JSON::JSONObject* itemSkillConfigJson,
  95. int maxStackSize,
  96. Framework::RCArray<Framework::Text> groups);
  97. ~BasicToolItemType();
  98. protected:
  99. virtual void loadSuperItem(
  100. Item* zItem, Framework::StreamReader* zReader) const override;
  101. virtual void saveSuperItem(
  102. const Item* zItem, Framework::StreamWriter* zWriter) const override;
  103. public:
  104. virtual bool initialize(Game* zGame) override;
  105. virtual const ItemType* zBrokenItemType() const override;
  106. virtual Item* createItem() const override;
  107. virtual void levelUpItemSkill(ItemSkill* zSkill) const override;
  108. virtual void setItemAttribute(Item* zItem,
  109. Framework::Text name,
  110. Framework::JSON::JSONValue* zValue) const override;
  111. virtual void addItemAttributes(
  112. Item* zItem, Framework::JSON::JSONObject* zItemObjet) const override;
  113. float getHeadMaterialHardness() const;
  114. float getRodMaterialHardness() const;
  115. float getHandleMaterialHardness() const;
  116. float getBaseDurablility() const;
  117. float getBaseDurabilityMultiplier() const;
  118. float getHeadMaterialDurability() const;
  119. float getHeadMaterialDurabilityMultiplier() const;
  120. float getRodMaterialDurability() const;
  121. float getRodMaterialDurabilityMultiplier() const;
  122. float getHandleMaterialDurability() const;
  123. float getHandleMaterialDurabilityMultiplier() const;
  124. ItemSkillLevelUpRule* zLevelUpRule() const;
  125. Framework::JSON::JSONObject* getItemSkillConfigJson() const;
  126. virtual ItemSkill* createDefaultItemSkill() const override;
  127. };
  128. class BasicToolItemTypeFactory
  129. : public SubTypeFactory<ItemType, BasicToolItemType>
  130. {
  131. public:
  132. BasicToolItemTypeFactory();
  133. BasicToolItemType* fromJson(
  134. Framework::JSON::JSONObject* zJson) const override;
  135. Framework::JSON::JSONObject* toJson(
  136. BasicToolItemType* zObject) const override;
  137. Framework::JSON::Validator::JSONValidator* getValidator(
  138. Framework::JSON::Validator::ObjectValidationBuilder<
  139. Framework::JSON::Validator::JSONValidator>* builder) const override;
  140. Framework::Text getTypeToken() const override;
  141. };
  142. class BlockReplaceItemSkillConfig : public Framework::ReferenceCounter
  143. {
  144. private:
  145. BlockFilter* targetBlockFilter;
  146. int replacementBlockTypeId;
  147. int cooldownTicks;
  148. float staminaCost;
  149. float staminaCostDevider;
  150. float additionalStaminaCostDeviderPerLevel;
  151. float durabilityCost;
  152. float durabilityCostDevider;
  153. float additionalDurabilityCostDeviderPerLevel;
  154. float xpGain;
  155. public:
  156. BlockReplaceItemSkillConfig(BlockFilter* targetBlockFilter,
  157. int replacementBlockTypeId,
  158. int cooldownTicks,
  159. float staminaCost,
  160. float staminaCostDevider,
  161. float additionalStaminaCostDeviderPerLevel,
  162. float durabilityCost,
  163. float durabilityCostDevider,
  164. float additionalDurabilityCostDeviderPerLevel,
  165. float xpGain);
  166. ~BlockReplaceItemSkillConfig();
  167. BlockFilter* zTargetBlockFilter() const;
  168. int getReplacementBlockTypeId() const;
  169. int getCooldownTicks() const;
  170. float getStaminaCost() const;
  171. float getStaminaCostDevider() const;
  172. float getAdditionalStaminaCostDeviderPerLevel() const;
  173. float getDurabilityCost() const;
  174. float getDurabilityCostDevider() const;
  175. float getAdditionalDurabilityCostDeviderPerLevel() const;
  176. float getXpGain() const;
  177. };
  178. class BlockReplaceItemSkillConfigFactory
  179. : public TypeFactory<BlockReplaceItemSkillConfig>
  180. {
  181. public:
  182. BlockReplaceItemSkillConfigFactory();
  183. BlockReplaceItemSkillConfig* fromJson(
  184. Framework::JSON::JSONValue* zJson) const override;
  185. Framework::JSON::JSONValue* toJson(
  186. BlockReplaceItemSkillConfig* zObject) const override;
  187. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  188. };
  189. class BlockReplaceItemSkill : public ItemSkill
  190. {
  191. private:
  192. BlockReplaceItemSkillConfig* invalidUseConfig;
  193. Framework::RCArray<BlockReplaceItemSkillConfig> configs;
  194. int cooldownTicks;
  195. public:
  196. BlockReplaceItemSkill(float xp,
  197. float maxXp,
  198. float level,
  199. BlockReplaceItemSkillConfig* invalidUseConfig,
  200. Framework::RCArray<BlockReplaceItemSkillConfig> configs,
  201. int cooldownTicks);
  202. virtual void load(Framework::StreamReader* zReader) override;
  203. virtual void save(Framework::StreamWriter* zWriter) override;
  204. virtual bool use(Entity* zActor, Item* zUsedItem, Block* zTarget) override;
  205. virtual bool use(Entity* zActor, Item* zUsedItem, Entity* zTarget) override;
  206. BlockReplaceItemSkillConfig* zInvalidUseConfig() const;
  207. const Framework::RCArray<BlockReplaceItemSkillConfig>& getConfigs() const;
  208. int getCooldownTicks() const;
  209. };
  210. class BlockReplaceItemSkillFactory
  211. : public SubTypeFactory<ItemSkill, BlockReplaceItemSkill>
  212. {
  213. public:
  214. BlockReplaceItemSkillFactory();
  215. BlockReplaceItemSkill* fromJson(
  216. Framework::JSON::JSONObject* zJson) const override;
  217. Framework::JSON::JSONObject* toJson(
  218. BlockReplaceItemSkill* zObject) const override;
  219. Framework::JSON::Validator::JSONValidator* getValidator(
  220. Framework::JSON::Validator::ObjectValidationBuilder<
  221. Framework::JSON::Validator::JSONValidator>* builder) const override;
  222. Framework::Text getTypeToken() const override;
  223. };
  224. class DamagingItemSkillConfig : public Framework::ReferenceCounter
  225. {
  226. private:
  227. BlockFilter* targetBlockFilter;
  228. float damage;
  229. float damagePerHeadHardness;
  230. float baseDamageMultiplier;
  231. float damageMupliplierPerHeadHardness;
  232. float damagePerLevel;
  233. float damageMultiplierPerLevel;
  234. float damageDevider;
  235. float damageDeviderPerHardness;
  236. float staminaCost;
  237. float staminaCostPerDamage;
  238. float staminaCostPerHardness;
  239. float staminaCostDevider;
  240. float staminaCostDeviderPerLevel;
  241. float durabilityCost;
  242. float durabilityCostPerDamage;
  243. float durabilityCostPerHardness;
  244. float durabilityCostDevider;
  245. float additionalDurabilityCostDeviderPerLevel;
  246. float xpGainPerDamage;
  247. public:
  248. DamagingItemSkillConfig(BlockFilter* targetBlockFilter,
  249. float damage,
  250. float damagePerHeadHardness,
  251. float baseDamageMultiplier,
  252. float damageMupliplierPerHeadHardness,
  253. float damagePerLevel,
  254. float damageMultiplierPerLevel,
  255. float damageDevider,
  256. float damageDeviderPerHardness,
  257. float staminaCost,
  258. float staminaCostPerDamage,
  259. float staminaCostPerHardness,
  260. float staminaCostDevider,
  261. float staminaCostDeviderPerLevel,
  262. float durabilityCost,
  263. float durabilityCostPerDamage,
  264. float durabilityCostPerHardness,
  265. float durabilityCostDevider,
  266. float additionalDurabilityCostDeviderPerLevel,
  267. float xpGainPerDamage);
  268. ~DamagingItemSkillConfig();
  269. BlockFilter* zTargetBlockFilter() const;
  270. float getDamage() const;
  271. float getDamagePerHeadHardness() const;
  272. float getBaseDamageMultiplier() const;
  273. float getDamageMupliplierPerHeadHardness() const;
  274. float getDamagePerLevel() const;
  275. float getDamageMultiplierPerLevel() const;
  276. float getDamageDevider() const;
  277. float getDamageDeviderPerHardness() const;
  278. float getStaminaCost() const;
  279. float getStaminaCostPerDamage() const;
  280. float getStaminaCostPerHardness() const;
  281. float getStaminaCostDevider() const;
  282. float getStaminaCostDeviderPerLevel() const;
  283. float getDurabilityCost() const;
  284. float getDurabilityCostPerDamage() const;
  285. float getDurabilityCostPerHardness() const;
  286. float getDurabilityCostDevider() const;
  287. float getAdditionalDurabilityCostDeviderPerLevel() const;
  288. float getXpGainPerDamage() const;
  289. };
  290. class DamagingItemSkillConfigFactory
  291. : public TypeFactory<DamagingItemSkillConfig>
  292. {
  293. public:
  294. DamagingItemSkillConfigFactory();
  295. DamagingItemSkillConfig* fromJson(
  296. Framework::JSON::JSONValue* zJson) const override;
  297. Framework::JSON::JSONValue* toJson(
  298. DamagingItemSkillConfig* zObject) const override;
  299. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  300. };
  301. class DamagingItemSkill : public ItemSkill
  302. {
  303. private:
  304. DamagingItemSkillConfig* invalidUseConfig;
  305. Framework::RCArray<DamagingItemSkillConfig> configs;
  306. public:
  307. DamagingItemSkill(float xp,
  308. float maxXp,
  309. float level,
  310. DamagingItemSkillConfig* invalidUseConfig,
  311. Framework::RCArray<DamagingItemSkillConfig> configs);
  312. virtual bool use(Entity* zActor, Item* zUsedItem, Block* zTarget) override;
  313. virtual bool use(Entity* zActor, Item* zUsedItem, Entity* zTarget) override;
  314. DamagingItemSkillConfig* zInvalidUseConfig() const;
  315. const Framework::RCArray<DamagingItemSkillConfig>& getConfigs() const;
  316. };
  317. class DamagingItemSkillFactory
  318. : public SubTypeFactory<ItemSkill, DamagingItemSkill>
  319. {
  320. public:
  321. DamagingItemSkillFactory();
  322. DamagingItemSkill* fromJson(
  323. Framework::JSON::JSONObject* zJson) const override;
  324. Framework::JSON::JSONObject* toJson(
  325. DamagingItemSkill* zObject) const override;
  326. Framework::JSON::Validator::JSONValidator* getValidator(
  327. Framework::JSON::Validator::ObjectValidationBuilder<
  328. Framework::JSON::Validator::JSONValidator>* builder) const override;
  329. Framework::Text getTypeToken() const override;
  330. };