StaticInitializerOrder.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. #include "BlockType.h"
  2. #include "ItemType.h"
  3. #include "StaticRegistry.h"
  4. // block types
  5. #include "BasicBlocks.h"
  6. #include "NoBlock.h"
  7. #include "TreeSeblingBlock.h"
  8. #include "Grass.h"
  9. // dimensions
  10. #include "OverworldDimension.h"
  11. // entities
  12. #include "ItemEntity.h"
  13. #include "Player.h"
  14. // item skills
  15. #include "BasicItems.h"
  16. #include "PlayerHand.h"
  17. #include "StoneTool.h"
  18. // world updates
  19. #include "AddEntityUpdate.h"
  20. #include "EntityRemovedUpdate.h"
  21. // Multiblocks
  22. #include "LightSources.h"
  23. #include "MultiblockTree.h"
  24. using namespace Framework;
  25. void initializeBlockTypes()
  26. {
  27. new NoBlockBlockType(BlockTypeEnum::NO_BLOCK, &NoBlock::INSTANCE);
  28. new NoBlockBlockType(BlockTypeEnum::AIR, &AirBlock::INSTANCE);
  29. (new BasicBlockType(BlockTypeEnum::DIRT,
  30. ItemTypeEnum::DIRT,
  31. ModelInfo("cube",
  32. {"blocks.ltdb/dirt.png",
  33. "blocks.ltdb/dirt.png",
  34. "blocks.ltdb/dirt.png",
  35. "blocks.ltdb/dirt.png",
  36. "blocks.ltdb/lawn.png",
  37. "blocks.ltdb/dirt.png"}),
  38. "Dirt"))
  39. ->initializeDefault();
  40. (new BasicBlockType(BlockTypeEnum::STONE,
  41. ItemTypeEnum::STONE,
  42. ModelInfo("cube", "blocks.ltdb/stone.png", 6),
  43. "Stone"))
  44. ->setHardness(2.f)
  45. ->initializeDefault();
  46. (new BasicBlockType(BlockTypeEnum::SAND,
  47. ItemTypeEnum::SAND,
  48. ModelInfo("cube", "blocks.ltdb/sand.png", 6),
  49. "Sand"))
  50. ->setHardness(0.5f)
  51. ->initializeDefault();
  52. (new BasicBlockType(BlockTypeEnum::WOOD_OAK,
  53. ItemTypeEnum::WOOD_OAK,
  54. ModelInfo("cube", "blocks.ltdb/oak.png", 6),
  55. "Oak Wood"))
  56. ->setHardness(1.5f)
  57. ->initializeDefault();
  58. (new BasicBlockType(BlockTypeEnum::LEAVES_WOOD_OAK,
  59. ItemTypeEnum::LEAVES_WOOD_OAK,
  60. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  61. [](Vec3<int> pos) {
  62. AdditionalItemSpawningBlock* block
  63. = new AdditionalItemSpawningBlock(
  64. BlockTypeEnum::LEAVES_WOOD_OAK, 0, pos);
  65. block->addSpawn({1, 1, 0.015, ItemTypeEnum::SEBLING_WOOD_OAK});
  66. return (Block*)block;
  67. },
  68. "Oak Wood Leaves"))
  69. ->setHardness(0.1f)
  70. ->initializeDefault();
  71. (new BasicBlockType(BlockTypeEnum::GRAVEL,
  72. ItemTypeEnum::GRAVEL,
  73. ModelInfo("cube", "blocks.ltdb/gravel.png", 6),
  74. "Gravel"))
  75. ->setHardness(0.75f)
  76. ->initializeDefault();
  77. (new BasicBlockType(BlockTypeEnum::STONE_GRANITE,
  78. ItemTypeEnum::STONE_GRANITE,
  79. ModelInfo("cube", "blocks.ltdb/granite.png", 6),
  80. "Granite Stone"))
  81. ->setHardness(3.f)
  82. ->initializeDefault();
  83. (new BasicBlockType(BlockTypeEnum::STONE_COBBLE,
  84. ItemTypeEnum::STONE_COBBLE,
  85. ModelInfo("cube", "blocks.ltdb/cobble.png", 6),
  86. "Cobble Stone"))
  87. ->setHardness(1.f)
  88. ->initializeDefault();
  89. (new BasicBlockType(BlockTypeEnum::WOOD_BIRCH,
  90. ItemTypeEnum::WOOD_BIRCH,
  91. ModelInfo("cube", "blocks.ltdb/birch.png", 6),
  92. "Birch Wood"))
  93. ->setHardness(1.5f)
  94. ->initializeDefault();
  95. (new BasicBlockType(BlockTypeEnum::LEAVES_WOOD_BIRCH,
  96. ItemTypeEnum::LEAVES_WOOD_BIRCH,
  97. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  98. [](Vec3<int> pos) {
  99. AdditionalItemSpawningBlock* block
  100. = new AdditionalItemSpawningBlock(
  101. BlockTypeEnum::LEAVES_WOOD_BIRCH, 0, pos);
  102. block->addSpawn({1, 1, 0.03, ItemTypeEnum::SEBLING_WOOD_BIRCH});
  103. return (Block*)block;
  104. },
  105. "Birch Wood Leaves"))
  106. ->setHardness(0.1f)
  107. ->initializeDefault();
  108. (new BasicBlockType(BlockTypeEnum::WOOD_BEECH,
  109. ItemTypeEnum::WOOD_BEECH,
  110. ModelInfo("cube", "blocks.ltdb/beech.png", 6),
  111. "Beech Wood"))
  112. ->setHardness(1.5f)
  113. ->initializeDefault();
  114. (new BasicBlockType(BlockTypeEnum::LEAVES_WOOD_BEECH,
  115. ItemTypeEnum::LEAVES_WOOD_BEECH,
  116. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  117. [](Vec3<int> pos) {
  118. AdditionalItemSpawningBlock* block
  119. = new AdditionalItemSpawningBlock(
  120. BlockTypeEnum::LEAVES_WOOD_BEECH, 0, pos);
  121. block->addSpawn({1, 1, 0.02, ItemTypeEnum::SEBLING_WOOD_BEECH});
  122. return (Block*)block;
  123. },
  124. "Beech Wood Leaves"))
  125. ->setHardness(0.1f)
  126. ->initializeDefault();
  127. (new BasicBlockType(BlockTypeEnum::STONE_BASALT,
  128. ItemTypeEnum::STONE_BASALT,
  129. ModelInfo("cube", "blocks.ltdb/basalt.png", 6),
  130. "Basalt Stone"))
  131. ->setHardness(2.f)
  132. ->initializeDefault();
  133. (new BasicBlockType(BlockTypeEnum::WOOD_PINE,
  134. ItemTypeEnum::WOOD_PINE,
  135. ModelInfo("cube", "blocks.ltdb/pine.png", 6),
  136. "Pine Wood"))
  137. ->setHardness(1.4f)
  138. ->initializeDefault();
  139. (new BasicBlockType(BlockTypeEnum::LEAVES_WOOD_PINE,
  140. ItemTypeEnum::LEAVES_WOOD_PINE,
  141. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  142. [](Vec3<int> pos) {
  143. AdditionalItemSpawningBlock* block
  144. = new AdditionalItemSpawningBlock(
  145. BlockTypeEnum::LEAVES_WOOD_PINE, 0, pos);
  146. block->addSpawn({1, 1, 0.025, ItemTypeEnum::SEBLING_WOOD_PINE});
  147. return (Block*)block;
  148. },
  149. "Pine Wood Leaves"))
  150. ->setHardness(0.1f)
  151. ->initializeDefault();
  152. (new BasicLightSourceBlockType(BlockTypeEnum::TORCH,
  153. ItemTypeEnum::TORCH,
  154. ModelInfo("blocks.m3/torch", "blocks.ltdb/torch.png", 6),
  155. "Torch"))
  156. ->setHardness(0.f)
  157. ->setColor(0x00F69A54)
  158. ->initializeDefault();
  159. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_OAK,
  160. ItemTypeEnum::SEBLING_WOOD_OAK,
  161. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  162. BlockTypeEnum::WOOD_OAK,
  163. BlockTypeEnum::LEAVES_WOOD_OAK,
  164. "Oak Wood Sebling"))
  165. ->setHardness(0.1f)
  166. ->initializeDefault();
  167. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_BIRCH,
  168. ItemTypeEnum::SEBLING_WOOD_BIRCH,
  169. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  170. BlockTypeEnum::WOOD_BIRCH,
  171. BlockTypeEnum::LEAVES_WOOD_BIRCH,
  172. "Birch Wood Sebling"))
  173. ->setHardness(0.1f)
  174. ->initializeDefault();
  175. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_BEECH,
  176. ItemTypeEnum::SEBLING_WOOD_BEECH,
  177. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  178. BlockTypeEnum::WOOD_BEECH,
  179. BlockTypeEnum::LEAVES_WOOD_BEECH,
  180. "Beech Wood Sebling"))
  181. ->setHardness(0.1f)
  182. ->initializeDefault();
  183. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_PINE,
  184. ItemTypeEnum::SEBLING_WOOD_PINE,
  185. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  186. BlockTypeEnum::WOOD_PINE,
  187. BlockTypeEnum::LEAVES_WOOD_PINE, "Pine Wood Sebling"))
  188. ->setHardness(0.1f)
  189. ->initializeDefault();
  190. (new GrassBlockType(BlockTypeEnum::GRASS,
  191. ItemTypeEnum::GRASS,
  192. ModelInfo("grass", "blocks.ltdb/grass.png", 16).setTransparent(),
  193. "Grass"))
  194. ->initializeDefault();
  195. }
  196. void initializeItemTypes()
  197. {
  198. (new BasicBlockItemType(ItemTypeEnum::DIRT,
  199. "Dirt",
  200. 0,
  201. 0,
  202. ModelInfo("itemCube", "blocks.ltdb/dirt.png", 6),
  203. BlockTypeEnum::DIRT));
  204. (new BasicBlockItemType(ItemTypeEnum::STONE,
  205. "Stone",
  206. 0,
  207. 0,
  208. ModelInfo("itemCube", "blocks.ltdb/stone.png", 6),
  209. BlockTypeEnum::STONE))
  210. ->setHardness(2.f);
  211. (new BasicBlockItemType(ItemTypeEnum::SAND,
  212. "Sand",
  213. 0,
  214. 0,
  215. ModelInfo("itemCube", "blocks.ltdb/sand.png", 6),
  216. BlockTypeEnum::SAND))
  217. ->setHardness(0.5f);
  218. (new BasicBlockItemType(ItemTypeEnum::WOOD_OAK,
  219. "Oak",
  220. 0,
  221. 0,
  222. ModelInfo("itemCube", "blocks.ltdb/oak.png", 6),
  223. BlockTypeEnum::WOOD_OAK))
  224. ->setHardness(1.5f);
  225. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_OAK,
  226. "Oak Leaves",
  227. 0,
  228. 0,
  229. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  230. BlockTypeEnum::LEAVES_WOOD_OAK))
  231. ->setHardness(0.1f);
  232. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_OAK,
  233. "Oak Sebling",
  234. 0,
  235. 0,
  236. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  237. BlockTypeEnum::SEBLING_WOOD_OAK))
  238. ->setHardness(0.1f);
  239. (new BasicBlockItemType(ItemTypeEnum::GRAVEL,
  240. "Gravel",
  241. 0,
  242. 0,
  243. ModelInfo("itemCube", "blocks.ltdb/gravel.png", 6),
  244. BlockTypeEnum::GRAVEL))
  245. ->setHardness(0.75f);
  246. (new BasicBlockItemType(ItemTypeEnum::STONE_GRANITE,
  247. "Granite",
  248. 0,
  249. 0,
  250. ModelInfo("itemCube", "blocks.ltdb/granite.png", 6),
  251. BlockTypeEnum::STONE_GRANITE))
  252. ->setHardness(3.f);
  253. (new BasicBlockItemType(ItemTypeEnum::STONE_COBBLE,
  254. "Cobble",
  255. 0,
  256. 0,
  257. ModelInfo("itemCube", "blocks.ltdb/cobble.png", 6),
  258. BlockTypeEnum::STONE_COBBLE))
  259. ->setHardness(1.f);
  260. (new BasicBlockItemType(ItemTypeEnum::WOOD_BIRCH,
  261. "Birch",
  262. 0,
  263. 0,
  264. ModelInfo("itemCube", "blocks.ltdb/birch.png", 6),
  265. BlockTypeEnum::WOOD_BIRCH))
  266. ->setHardness(1.5f);
  267. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_BIRCH,
  268. "Birch Leaves",
  269. 0,
  270. 0,
  271. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  272. BlockTypeEnum::LEAVES_WOOD_BIRCH))
  273. ->setHardness(0.1f);
  274. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_BIRCH,
  275. "Birch Sebling",
  276. 0,
  277. 0,
  278. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  279. BlockTypeEnum::SEBLING_WOOD_BIRCH))
  280. ->setHardness(0.1f);
  281. (new BasicBlockItemType(ItemTypeEnum::WOOD_BEECH,
  282. "Beech",
  283. 0,
  284. 0,
  285. ModelInfo("itemCube", "blocks.ltdb/beech.png", 6),
  286. BlockTypeEnum::WOOD_BEECH))
  287. ->setHardness(1.5f);
  288. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_BEECH,
  289. "Beech Leaves",
  290. 0,
  291. 0,
  292. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  293. BlockTypeEnum::LEAVES_WOOD_BEECH))
  294. ->setHardness(0.1f);
  295. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_BEECH,
  296. "Beech Sebling",
  297. 0,
  298. 0,
  299. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  300. BlockTypeEnum::SEBLING_WOOD_BEECH))
  301. ->setHardness(0.1f);
  302. (new BasicBlockItemType(ItemTypeEnum::STONE_BASALT,
  303. "Basalt",
  304. 0,
  305. 0,
  306. ModelInfo("itemCube", "blocks.ltdb/basalt.png", 6),
  307. BlockTypeEnum::STONE_BASALT))
  308. ->setHardness(2.f);
  309. (new BasicBlockItemType(ItemTypeEnum::WOOD_PINE,
  310. "Pine",
  311. 0,
  312. 0,
  313. ModelInfo("itemCube", "blocks.ltdb/pine.png", 6),
  314. BlockTypeEnum::WOOD_PINE))
  315. ->setHardness(1.4f);
  316. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_PINE,
  317. "Pine Leaves",
  318. 0,
  319. 0,
  320. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  321. BlockTypeEnum::LEAVES_WOOD_PINE))
  322. ->setHardness(0.1f);
  323. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_PINE,
  324. "Pine Sebling",
  325. 0,
  326. 0,
  327. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  328. BlockTypeEnum::SEBLING_WOOD_PINE))
  329. ->setHardness(0.1f);
  330. (new LightSourceItemType(ItemTypeEnum::TORCH,
  331. "Torch",
  332. ModelInfo("items.m3/stick", "blocks.ltdb/torch.png", 6),
  333. BlockTypeEnum::TORCH))
  334. ->setColor(0x00F69A54);
  335. new PlayerHandItemType();
  336. new StoneToolItemType();
  337. (new NoBlockItemType(ItemTypeEnum::WOOD_STICK,
  338. "WoodenStick",
  339. 0,
  340. 0,
  341. ModelInfo("items.m3/stick", "items.ltdb/stick.png", 1),
  342. []() {
  343. return ItemType::createBasicItem(ItemTypeEnum::WOOD_STICK,
  344. "Wooden Stick",
  345. 1.f,
  346. 1.f,
  347. 10.f,
  348. 10.f,
  349. 0,
  350. 0,
  351. 0,
  352. 1,
  353. 0,
  354. 50);
  355. }));
  356. (new NoBlockItemType(ItemTypeEnum::RESIN,
  357. "Resin",
  358. 0,
  359. 0,
  360. ModelInfo("itemCube", "items.ltdb/resin.png", 6),
  361. []() {
  362. return ItemType::createBasicItem(ItemTypeEnum::RESIN,
  363. "Resin",
  364. 1.f,
  365. 1.f,
  366. 10.f,
  367. 10.f,
  368. 0,
  369. 0,
  370. 0,
  371. 1,
  372. 0,
  373. 50);
  374. }));
  375. (new NoBlockItemType(ItemTypeEnum::STONE_TOOL_BROKEN,
  376. "BrokenStoneTool",
  377. 0,
  378. 0,
  379. ModelInfo("itemCube", "blocks.ltdb/stone.png", 6),
  380. []() {
  381. return ItemType::createBasicItem(ItemTypeEnum::STONE_TOOL_BROKEN,
  382. "Stone Tool",
  383. 100.f,
  384. 100.f,
  385. 100.f,
  386. 100.f,
  387. 0,
  388. 0,
  389. 0,
  390. 1,
  391. 0,
  392. 10);
  393. }));
  394. }
  395. void initializeEntityTypes()
  396. {
  397. new PlayerEntityType();
  398. new ItemEntityType();
  399. }
  400. void initializeDimensions()
  401. {
  402. new OverworldDimension();
  403. }
  404. void initializeMultiblockTypes()
  405. {
  406. new MultiblockTreeStructureType();
  407. }