BasicBlocks.h 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. #pragma once
  2. #include "Block.h"
  3. #include "BlockType.h"
  4. #include "Item.h"
  5. class BlockType;
  6. class ItemType;
  7. class BasicBlockType;
  8. class BasicBlock : public Block
  9. {
  10. public:
  11. BasicBlock(const BlockType* zType, ItemType* zTool, Framework::Vec3<int> pos);
  12. virtual bool onTick(TickQueue* zQueue, int numTicks, bool& blocked) override;
  13. virtual void onPostTick() override;
  14. friend BasicBlockType;
  15. };
  16. struct SpawnConfig
  17. {
  18. int min;
  19. int max;
  20. double chance;
  21. int itemType;
  22. };
  23. class AdditionalItemSpawningBlock : public BasicBlock
  24. {
  25. private:
  26. Framework::Array< SpawnConfig> spawns;
  27. public:
  28. AdditionalItemSpawningBlock(const BlockType* zType, ItemType* zTool, Framework::Vec3<int> pos);
  29. void addSpawn(SpawnConfig config);
  30. virtual void onDestroy() override;
  31. };
  32. class BasicBlockType : public BlockType
  33. {
  34. private:
  35. int itemType;
  36. protected:
  37. bool transparent;
  38. bool passable;
  39. float hardness;
  40. ItemType* zTool;
  41. float speedModifier;
  42. bool interactable;
  43. BasicBlockType(int typeId, int itemTypeId, ModelInfo model);
  44. virtual void createSuperBlock(Block* zBlock, Item* zItem) const override;
  45. public:
  46. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  47. virtual Item* createItem() const override;
  48. };
  49. // Dirt
  50. class DirtBlockItemType : public BasicBlockItemType
  51. {
  52. REGISTRABLE(DirtBlockItemType)
  53. protected:
  54. DirtBlockItemType();
  55. public:
  56. virtual Item* createItem() const override;
  57. };
  58. REGISTER(DirtBlockItemType, ItemType)
  59. class DirtBlockType : public BasicBlockType
  60. {
  61. REGISTRABLE(DirtBlockType)
  62. protected:
  63. DirtBlockType();
  64. };
  65. REGISTER(DirtBlockType, BlockType)
  66. // Stone
  67. class StoneBlockItemType : public BasicBlockItemType
  68. {
  69. REGISTRABLE(StoneBlockItemType)
  70. protected:
  71. StoneBlockItemType();
  72. public:
  73. virtual Item* createItem() const override;
  74. };
  75. REGISTER(StoneBlockItemType, ItemType)
  76. class StoneBlockType : public BasicBlockType
  77. {
  78. REGISTRABLE(StoneBlockType)
  79. protected:
  80. StoneBlockType();
  81. };
  82. REGISTER(StoneBlockType, BlockType)
  83. // Sand
  84. class SandBlockItemType : public BasicBlockItemType
  85. {
  86. REGISTRABLE(SandBlockItemType)
  87. protected:
  88. SandBlockItemType();
  89. public:
  90. virtual Item* createItem() const override;
  91. };
  92. REGISTER(SandBlockItemType, ItemType)
  93. class SandBlockType : public BasicBlockType
  94. {
  95. REGISTRABLE(SandBlockType)
  96. protected:
  97. SandBlockType();
  98. };
  99. REGISTER(SandBlockType, BlockType)
  100. // Oak Wood
  101. class OakBlockItemType : public BasicBlockItemType
  102. {
  103. REGISTRABLE(OakBlockItemType)
  104. protected:
  105. OakBlockItemType();
  106. public:
  107. virtual Item* createItem() const override;
  108. };
  109. REGISTER(OakBlockItemType, ItemType)
  110. class OakBlockType : public BasicBlockType
  111. {
  112. REGISTRABLE(OakBlockType)
  113. protected:
  114. OakBlockType();
  115. };
  116. REGISTER(OakBlockType, BlockType)
  117. // Oak Leaves
  118. class OakLeavesBlockItemType : public BasicBlockItemType
  119. {
  120. REGISTRABLE(OakLeavesBlockItemType)
  121. protected:
  122. OakLeavesBlockItemType();
  123. public:
  124. virtual Item* createItem() const override;
  125. };
  126. REGISTER(OakLeavesBlockItemType, ItemType)
  127. class OakLeavesBlockType : public BasicBlockType
  128. {
  129. REGISTRABLE(OakLeavesBlockType)
  130. protected:
  131. OakLeavesBlockType();
  132. public:
  133. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  134. };
  135. REGISTER(OakLeavesBlockType, BlockType)
  136. // Oak Sebling
  137. class OakSeblingBlockItemType : public BasicBlockItemType
  138. {
  139. REGISTRABLE(OakSeblingBlockItemType)
  140. protected:
  141. OakSeblingBlockItemType();
  142. public:
  143. virtual Item* createItem() const override;
  144. };
  145. REGISTER(OakSeblingBlockItemType, ItemType)
  146. class OakSeblingBlockType : public BasicBlockType
  147. {
  148. REGISTRABLE(OakSeblingBlockType)
  149. protected:
  150. OakSeblingBlockType();
  151. public:
  152. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  153. };
  154. REGISTER(OakSeblingBlockType, BlockType)
  155. // Gravel
  156. class GravelBlockItemType : public BasicBlockItemType
  157. {
  158. REGISTRABLE(GravelBlockItemType)
  159. protected:
  160. GravelBlockItemType();
  161. public:
  162. virtual Item* createItem() const override;
  163. };
  164. REGISTER(GravelBlockItemType, ItemType)
  165. class GravelBlockType : public BasicBlockType
  166. {
  167. REGISTRABLE(GravelBlockType)
  168. protected:
  169. GravelBlockType();
  170. };
  171. REGISTER(GravelBlockType, BlockType)
  172. // Granite
  173. class GraniteBlockItemType : public BasicBlockItemType
  174. {
  175. REGISTRABLE(GraniteBlockItemType)
  176. protected:
  177. GraniteBlockItemType();
  178. public:
  179. virtual Item* createItem() const override;
  180. };
  181. REGISTER(GraniteBlockItemType, ItemType)
  182. class GraniteBlockType : public BasicBlockType
  183. {
  184. REGISTRABLE(GraniteBlockType)
  185. protected:
  186. GraniteBlockType();
  187. };
  188. REGISTER(GraniteBlockType, BlockType)
  189. // Cobble
  190. class CobbleBlockItemType : public BasicBlockItemType
  191. {
  192. REGISTRABLE(CobbleBlockItemType)
  193. protected:
  194. CobbleBlockItemType();
  195. public:
  196. virtual Item* createItem() const override;
  197. };
  198. REGISTER(CobbleBlockItemType, ItemType)
  199. class CobbleBlockType : public BasicBlockType
  200. {
  201. REGISTRABLE(CobbleBlockType)
  202. protected:
  203. CobbleBlockType();
  204. };
  205. REGISTER(CobbleBlockType, BlockType)
  206. // Birch Wood
  207. class BirchBlockItemType : public BasicBlockItemType
  208. {
  209. REGISTRABLE(BirchBlockItemType)
  210. protected:
  211. BirchBlockItemType();
  212. public:
  213. virtual Item* createItem() const override;
  214. };
  215. REGISTER(BirchBlockItemType, ItemType)
  216. class BirchBlockType : public BasicBlockType
  217. {
  218. REGISTRABLE(BirchBlockType)
  219. protected:
  220. BirchBlockType();
  221. };
  222. REGISTER(BirchBlockType, BlockType)
  223. // Birch Leaves
  224. class BirchLeavesBlockItemType : public BasicBlockItemType
  225. {
  226. REGISTRABLE(BirchLeavesBlockItemType)
  227. protected:
  228. BirchLeavesBlockItemType();
  229. public:
  230. virtual Item* createItem() const override;
  231. };
  232. REGISTER(BirchLeavesBlockItemType, ItemType)
  233. class BirchLeavesBlockType : public BasicBlockType
  234. {
  235. REGISTRABLE(BirchLeavesBlockType)
  236. protected:
  237. BirchLeavesBlockType();
  238. public:
  239. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  240. };
  241. REGISTER(BirchLeavesBlockType, BlockType)
  242. // Birch Sebling
  243. class BirchSeblingBlockItemType : public BasicBlockItemType
  244. {
  245. REGISTRABLE(BirchSeblingBlockItemType)
  246. protected:
  247. BirchSeblingBlockItemType();
  248. public:
  249. virtual Item* createItem() const override;
  250. };
  251. REGISTER(BirchSeblingBlockItemType, ItemType)
  252. class BirchSeblingBlockType : public BasicBlockType
  253. {
  254. REGISTRABLE(BirchSeblingBlockType)
  255. protected:
  256. BirchSeblingBlockType();
  257. public:
  258. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  259. };
  260. REGISTER(BirchSeblingBlockType, BlockType)
  261. // Beech Wood
  262. class BeechBlockItemType : public BasicBlockItemType
  263. {
  264. REGISTRABLE(BeechBlockItemType)
  265. protected:
  266. BeechBlockItemType();
  267. public:
  268. virtual Item* createItem() const override;
  269. };
  270. REGISTER(BeechBlockItemType, ItemType)
  271. class BeechBlockType : public BasicBlockType
  272. {
  273. REGISTRABLE(BeechBlockType)
  274. protected:
  275. BeechBlockType();
  276. };
  277. REGISTER(BeechBlockType, BlockType)
  278. // Beech Leaves
  279. class BeechLeavesBlockItemType : public BasicBlockItemType
  280. {
  281. REGISTRABLE(BeechLeavesBlockItemType)
  282. protected:
  283. BeechLeavesBlockItemType();
  284. public:
  285. virtual Item* createItem() const override;
  286. };
  287. REGISTER(BeechLeavesBlockItemType, ItemType)
  288. class BeechLeavesBlockType : public BasicBlockType
  289. {
  290. REGISTRABLE(BeechLeavesBlockType)
  291. protected:
  292. BeechLeavesBlockType();
  293. public:
  294. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  295. };
  296. REGISTER(BeechLeavesBlockType, BlockType)
  297. // Beech Sebling
  298. class BeechSeblingBlockItemType : public BasicBlockItemType
  299. {
  300. REGISTRABLE(BeechSeblingBlockItemType)
  301. protected:
  302. BeechSeblingBlockItemType();
  303. public:
  304. virtual Item* createItem() const override;
  305. };
  306. REGISTER(BeechSeblingBlockItemType, ItemType)
  307. class BeechSeblingBlockType : public BasicBlockType
  308. {
  309. REGISTRABLE(BeechSeblingBlockType)
  310. protected:
  311. BeechSeblingBlockType();
  312. public:
  313. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  314. };
  315. REGISTER(BeechSeblingBlockType, BlockType)
  316. // Basalt
  317. class BasaltBlockItemType : public BasicBlockItemType
  318. {
  319. REGISTRABLE(BasaltBlockItemType)
  320. protected:
  321. BasaltBlockItemType();
  322. public:
  323. virtual Item* createItem() const override;
  324. };
  325. REGISTER(BasaltBlockItemType, ItemType)
  326. class BasaltBlockType : public BasicBlockType
  327. {
  328. REGISTRABLE(BasaltBlockType)
  329. protected:
  330. BasaltBlockType();
  331. };
  332. REGISTER(BasaltBlockType, BlockType)
  333. // Pine
  334. class PineBlockItemType : public BasicBlockItemType
  335. {
  336. REGISTRABLE(PineBlockItemType)
  337. protected:
  338. PineBlockItemType();
  339. public:
  340. virtual Item* createItem() const override;
  341. };
  342. REGISTER(PineBlockItemType, ItemType)
  343. class PineBlockType : public BasicBlockType
  344. {
  345. REGISTRABLE(PineBlockType)
  346. protected:
  347. PineBlockType();
  348. };
  349. REGISTER(PineBlockType, BlockType)
  350. // Pine Leaves
  351. class PineLeavesBlockItemType : public BasicBlockItemType
  352. {
  353. REGISTRABLE(PineLeavesBlockItemType)
  354. protected:
  355. PineLeavesBlockItemType();
  356. public:
  357. virtual Item* createItem() const override;
  358. };
  359. REGISTER(PineLeavesBlockItemType, ItemType)
  360. class PineLeavesBlockType : public BasicBlockType
  361. {
  362. REGISTRABLE(PineLeavesBlockType)
  363. protected:
  364. PineLeavesBlockType();
  365. public:
  366. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  367. };
  368. REGISTER(PineLeavesBlockType, BlockType)
  369. // Pine Sebling
  370. class PineSeblingBlockItemType : public BasicBlockItemType
  371. {
  372. REGISTRABLE(PineSeblingBlockItemType)
  373. protected:
  374. PineSeblingBlockItemType();
  375. public:
  376. virtual Item* createItem() const override;
  377. };
  378. REGISTER(PineSeblingBlockItemType, ItemType)
  379. class PineSeblingBlockType : public BasicBlockType
  380. {
  381. REGISTRABLE(PineSeblingBlockType)
  382. protected:
  383. PineSeblingBlockType();
  384. public:
  385. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  386. };
  387. REGISTER(PineSeblingBlockType, BlockType)