StaticInitializerOrder.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. #include "BlockType.h"
  2. #include "ItemType.h"
  3. #include "StaticRegistry.h"
  4. // block types
  5. #include "BasicBlocks.h"
  6. #include "Grass.h"
  7. #include "GrowingPlant.h"
  8. #include "NoBlock.h"
  9. #include "TreeSeblingBlock.h"
  10. // dimensions
  11. #include "OverworldDimension.h"
  12. // entities
  13. #include "ItemEntity.h"
  14. #include "Player.h"
  15. // item skills
  16. #include "BasicItems.h"
  17. #include "PlayerHand.h"
  18. #include "StoneTool.h"
  19. // world updates
  20. #include "AddEntityUpdate.h"
  21. #include "EntityRemovedUpdate.h"
  22. // Multiblocks
  23. #include "Hoe.h"
  24. #include "LightSources.h"
  25. #include "MultiblockTree.h"
  26. using namespace Framework;
  27. void initializeBlockTypes()
  28. {
  29. new NoBlockBlockType(BlockTypeEnum::NO_BLOCK, &NoBlock::INSTANCE);
  30. new NoBlockBlockType(BlockTypeEnum::AIR, &AirBlock::INSTANCE);
  31. (new BasicBlockType(BlockTypeEnum::DIRT,
  32. ItemTypeEnum::DIRT,
  33. ModelInfo("cube",
  34. {"blocks.ltdb/dirt.png",
  35. "blocks.ltdb/dirt.png",
  36. "blocks.ltdb/dirt.png",
  37. "blocks.ltdb/dirt.png",
  38. "blocks.ltdb/lawn.png",
  39. "blocks.ltdb/dirt.png"}),
  40. "Dirt"))
  41. ->initializeDefault();
  42. (new BasicBlockType(BlockTypeEnum::STONE,
  43. ItemTypeEnum::STONE,
  44. ModelInfo("cube", "blocks.ltdb/stone.png", 6),
  45. "Stone"))
  46. ->setHardness(2.f)
  47. ->initializeDefault();
  48. (new BasicBlockType(BlockTypeEnum::SAND,
  49. ItemTypeEnum::SAND,
  50. ModelInfo("cube", "blocks.ltdb/sand.png", 6),
  51. "Sand"))
  52. ->setHardness(0.5f)
  53. ->initializeDefault();
  54. (new BasicBlockType(BlockTypeEnum::WOOD_OAK,
  55. ItemTypeEnum::WOOD_OAK,
  56. ModelInfo("cube", "blocks.ltdb/oak.png", 6),
  57. "Oak Wood"))
  58. ->setHardness(1.5f)
  59. ->initializeDefault();
  60. (new BasicBlockType(
  61. BlockTypeEnum::LEAVES_WOOD_OAK,
  62. ItemTypeEnum::LEAVES_WOOD_OAK,
  63. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  64. [](Vec3<int> pos) {
  65. AdditionalItemSpawningBlock* block
  66. = new AdditionalItemSpawningBlock(
  67. BlockTypeEnum::LEAVES_WOOD_OAK, 0, pos);
  68. block->addSpawn({1, 1, 0.015, ItemTypeEnum::SEBLING_WOOD_OAK});
  69. return (Block*)block;
  70. },
  71. "Oak Wood Leaves"))
  72. ->setHardness(0.1f)
  73. ->initializeDefault();
  74. (new BasicBlockType(BlockTypeEnum::GRAVEL,
  75. ItemTypeEnum::GRAVEL,
  76. ModelInfo("cube", "blocks.ltdb/gravel.png", 6),
  77. "Gravel"))
  78. ->setHardness(0.75f)
  79. ->initializeDefault();
  80. (new BasicBlockType(BlockTypeEnum::STONE_GRANITE,
  81. ItemTypeEnum::STONE_GRANITE,
  82. ModelInfo("cube", "blocks.ltdb/granite.png", 6),
  83. "Granite Stone"))
  84. ->setHardness(3.f)
  85. ->initializeDefault();
  86. (new BasicBlockType(BlockTypeEnum::STONE_COBBLE,
  87. ItemTypeEnum::STONE_COBBLE,
  88. ModelInfo("cube", "blocks.ltdb/cobble.png", 6),
  89. "Cobble Stone"))
  90. ->setHardness(1.f)
  91. ->initializeDefault();
  92. (new BasicBlockType(BlockTypeEnum::WOOD_BIRCH,
  93. ItemTypeEnum::WOOD_BIRCH,
  94. ModelInfo("cube", "blocks.ltdb/birch.png", 6),
  95. "Birch Wood"))
  96. ->setHardness(1.5f)
  97. ->initializeDefault();
  98. (new BasicBlockType(
  99. BlockTypeEnum::LEAVES_WOOD_BIRCH,
  100. ItemTypeEnum::LEAVES_WOOD_BIRCH,
  101. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  102. [](Vec3<int> pos) {
  103. AdditionalItemSpawningBlock* block
  104. = new AdditionalItemSpawningBlock(
  105. BlockTypeEnum::LEAVES_WOOD_BIRCH, 0, pos);
  106. block->addSpawn({1, 1, 0.03, ItemTypeEnum::SEBLING_WOOD_BIRCH});
  107. return (Block*)block;
  108. },
  109. "Birch Wood Leaves"))
  110. ->setHardness(0.1f)
  111. ->initializeDefault();
  112. (new BasicBlockType(BlockTypeEnum::WOOD_BEECH,
  113. ItemTypeEnum::WOOD_BEECH,
  114. ModelInfo("cube", "blocks.ltdb/beech.png", 6),
  115. "Beech Wood"))
  116. ->setHardness(1.5f)
  117. ->initializeDefault();
  118. (new BasicBlockType(
  119. BlockTypeEnum::LEAVES_WOOD_BEECH,
  120. ItemTypeEnum::LEAVES_WOOD_BEECH,
  121. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  122. [](Vec3<int> pos) {
  123. AdditionalItemSpawningBlock* block
  124. = new AdditionalItemSpawningBlock(
  125. BlockTypeEnum::LEAVES_WOOD_BEECH, 0, pos);
  126. block->addSpawn({1, 1, 0.02, ItemTypeEnum::SEBLING_WOOD_BEECH});
  127. return (Block*)block;
  128. },
  129. "Beech Wood Leaves"))
  130. ->setHardness(0.1f)
  131. ->initializeDefault();
  132. (new BasicBlockType(BlockTypeEnum::STONE_BASALT,
  133. ItemTypeEnum::STONE_BASALT,
  134. ModelInfo("cube", "blocks.ltdb/basalt.png", 6),
  135. "Basalt Stone"))
  136. ->setHardness(2.f)
  137. ->initializeDefault();
  138. (new BasicBlockType(BlockTypeEnum::WOOD_PINE,
  139. ItemTypeEnum::WOOD_PINE,
  140. ModelInfo("cube", "blocks.ltdb/pine.png", 6),
  141. "Pine Wood"))
  142. ->setHardness(1.4f)
  143. ->initializeDefault();
  144. (new BasicBlockType(
  145. BlockTypeEnum::LEAVES_WOOD_PINE,
  146. ItemTypeEnum::LEAVES_WOOD_PINE,
  147. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  148. [](Vec3<int> pos) {
  149. AdditionalItemSpawningBlock* block
  150. = new AdditionalItemSpawningBlock(
  151. BlockTypeEnum::LEAVES_WOOD_PINE, 0, pos);
  152. block->addSpawn({1, 1, 0.025, ItemTypeEnum::SEBLING_WOOD_PINE});
  153. return (Block*)block;
  154. },
  155. "Pine Wood Leaves"))
  156. ->setHardness(0.1f)
  157. ->initializeDefault();
  158. (new BasicLightSourceBlockType(BlockTypeEnum::TORCH,
  159. ItemTypeEnum::TORCH,
  160. ModelInfo("blocks.m3/torch", "blocks.ltdb/torch.png", 6),
  161. "Torch"))
  162. ->setHardness(0.f)
  163. ->setColor(0x00F69A54)
  164. ->initializeDefault();
  165. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_OAK,
  166. ItemTypeEnum::SEBLING_WOOD_OAK,
  167. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  168. BlockTypeEnum::WOOD_OAK,
  169. BlockTypeEnum::LEAVES_WOOD_OAK,
  170. "Oak Wood Sebling"))
  171. ->setHardness(0.1f)
  172. ->initializeDefault();
  173. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_BIRCH,
  174. ItemTypeEnum::SEBLING_WOOD_BIRCH,
  175. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  176. BlockTypeEnum::WOOD_BIRCH,
  177. BlockTypeEnum::LEAVES_WOOD_BIRCH,
  178. "Birch Wood Sebling"))
  179. ->setHardness(0.1f)
  180. ->initializeDefault();
  181. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_BEECH,
  182. ItemTypeEnum::SEBLING_WOOD_BEECH,
  183. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  184. BlockTypeEnum::WOOD_BEECH,
  185. BlockTypeEnum::LEAVES_WOOD_BEECH,
  186. "Beech Wood Sebling"))
  187. ->setHardness(0.1f)
  188. ->initializeDefault();
  189. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_PINE,
  190. ItemTypeEnum::SEBLING_WOOD_PINE,
  191. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  192. BlockTypeEnum::WOOD_PINE,
  193. BlockTypeEnum::LEAVES_WOOD_PINE,
  194. "Pine Wood Sebling"))
  195. ->setHardness(0.1f)
  196. ->initializeDefault();
  197. (new GrassBlockType(BlockTypeEnum::GRASS,
  198. ItemTypeEnum::GRASS,
  199. ModelInfo("grass", "blocks.ltdb/grass.png", 16).setTransparent(),
  200. "Grass"))
  201. ->initializeDefault();
  202. (new BasicBlockType(BlockTypeEnum::FARMLAND,
  203. ItemTypeEnum::DIRT,
  204. ModelInfo("cube",
  205. {"blocks.ltdb/dirt.png",
  206. "blocks.ltdb/dirt.png",
  207. "blocks.ltdb/dirt.png",
  208. "blocks.ltdb/dirt.png",
  209. "blocks.ltdb/farmland.png",
  210. "blocks.ltdb/dirt.png"}),
  211. "Farmland"))
  212. ->initializeDefault();
  213. (new GrowingPlantlockType(BlockTypeEnum::WHEAT_SEED,
  214. ModelInfo("grass", "plants.ltdb/wheatseeds.png", 16).setTransparent(),
  215. "WheatSeeds",
  216. BlockTypeEnum::WHEAT,
  217. "Growing wheat",
  218. 18000))
  219. ->addGrowthState(0.2f,
  220. ModelInfo("grass", "plants.ltdb/wheatseedsa.png", 16)
  221. .setTransparent())
  222. ->addGrowthState(0.4f,
  223. ModelInfo("grass", "plants.ltdb/wheatseedsb.png", 16)
  224. .setTransparent())
  225. ->addGrowthState(0.6f,
  226. ModelInfo("grass", "plants.ltdb/wheatseedsc.png", 16)
  227. .setTransparent())
  228. ->addGrowthState(0.8f,
  229. ModelInfo("grass", "plants.ltdb/wheatseedsd.png", 16)
  230. .setTransparent())
  231. ->initializeDefault();
  232. (new BasicBlockType(
  233. BlockTypeEnum::WHEAT,
  234. ItemTypeEnum::WHEAT,
  235. ModelInfo("grass", "plants.ltdb/wheat.png", 16).setTransparent(),
  236. [](Vec3<int> pos) {
  237. AdditionalItemSpawningBlock* block
  238. = new AdditionalItemSpawningBlock(
  239. BlockTypeEnum::WHEAT, 0, pos);
  240. block->addSpawn({0, 4, 1.0, ItemTypeEnum::WHEAT});
  241. return (Block*)block;
  242. },
  243. "Wheat"))
  244. ->initializeDefault();
  245. }
  246. void initializeItemTypes()
  247. {
  248. (new BasicBlockItemType(ItemTypeEnum::DIRT,
  249. "Dirt",
  250. 0,
  251. 0,
  252. ModelInfo("itemCube", "blocks.ltdb/dirt.png", 6),
  253. BlockTypeEnum::DIRT));
  254. (new BasicBlockItemType(ItemTypeEnum::STONE,
  255. "Stone",
  256. 0,
  257. 0,
  258. ModelInfo("itemCube", "blocks.ltdb/stone.png", 6),
  259. BlockTypeEnum::STONE))
  260. ->setHardness(2.f);
  261. (new BasicBlockItemType(ItemTypeEnum::SAND,
  262. "Sand",
  263. 0,
  264. 0,
  265. ModelInfo("itemCube", "blocks.ltdb/sand.png", 6),
  266. BlockTypeEnum::SAND))
  267. ->setHardness(0.5f);
  268. (new BasicBlockItemType(ItemTypeEnum::WOOD_OAK,
  269. "Oak",
  270. 0,
  271. 0,
  272. ModelInfo("itemCube", "blocks.ltdb/oak.png", 6),
  273. BlockTypeEnum::WOOD_OAK))
  274. ->setHardness(1.5f);
  275. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_OAK,
  276. "Oak Leaves",
  277. 0,
  278. 0,
  279. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  280. BlockTypeEnum::LEAVES_WOOD_OAK))
  281. ->setHardness(0.1f);
  282. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_OAK,
  283. "Oak Sebling",
  284. 0,
  285. 0,
  286. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  287. BlockTypeEnum::SEBLING_WOOD_OAK))
  288. ->setHardness(0.1f);
  289. (new BasicBlockItemType(ItemTypeEnum::GRAVEL,
  290. "Gravel",
  291. 0,
  292. 0,
  293. ModelInfo("itemCube", "blocks.ltdb/gravel.png", 6),
  294. BlockTypeEnum::GRAVEL))
  295. ->setHardness(0.75f);
  296. (new BasicBlockItemType(ItemTypeEnum::STONE_GRANITE,
  297. "Granite",
  298. 0,
  299. 0,
  300. ModelInfo("itemCube", "blocks.ltdb/granite.png", 6),
  301. BlockTypeEnum::STONE_GRANITE))
  302. ->setHardness(3.f);
  303. (new BasicBlockItemType(ItemTypeEnum::STONE_COBBLE,
  304. "Cobble",
  305. 0,
  306. 0,
  307. ModelInfo("itemCube", "blocks.ltdb/cobble.png", 6),
  308. BlockTypeEnum::STONE_COBBLE))
  309. ->setHardness(1.f);
  310. (new BasicBlockItemType(ItemTypeEnum::WOOD_BIRCH,
  311. "Birch",
  312. 0,
  313. 0,
  314. ModelInfo("itemCube", "blocks.ltdb/birch.png", 6),
  315. BlockTypeEnum::WOOD_BIRCH))
  316. ->setHardness(1.5f);
  317. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_BIRCH,
  318. "Birch Leaves",
  319. 0,
  320. 0,
  321. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  322. BlockTypeEnum::LEAVES_WOOD_BIRCH))
  323. ->setHardness(0.1f);
  324. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_BIRCH,
  325. "Birch Sebling",
  326. 0,
  327. 0,
  328. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  329. BlockTypeEnum::SEBLING_WOOD_BIRCH))
  330. ->setHardness(0.1f);
  331. (new BasicBlockItemType(ItemTypeEnum::WOOD_BEECH,
  332. "Beech",
  333. 0,
  334. 0,
  335. ModelInfo("itemCube", "blocks.ltdb/beech.png", 6),
  336. BlockTypeEnum::WOOD_BEECH))
  337. ->setHardness(1.5f);
  338. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_BEECH,
  339. "Beech Leaves",
  340. 0,
  341. 0,
  342. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  343. BlockTypeEnum::LEAVES_WOOD_BEECH))
  344. ->setHardness(0.1f);
  345. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_BEECH,
  346. "Beech Sebling",
  347. 0,
  348. 0,
  349. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  350. BlockTypeEnum::SEBLING_WOOD_BEECH))
  351. ->setHardness(0.1f);
  352. (new BasicBlockItemType(ItemTypeEnum::STONE_BASALT,
  353. "Basalt",
  354. 0,
  355. 0,
  356. ModelInfo("itemCube", "blocks.ltdb/basalt.png", 6),
  357. BlockTypeEnum::STONE_BASALT))
  358. ->setHardness(2.f);
  359. (new BasicBlockItemType(ItemTypeEnum::WOOD_PINE,
  360. "Pine",
  361. 0,
  362. 0,
  363. ModelInfo("itemCube", "blocks.ltdb/pine.png", 6),
  364. BlockTypeEnum::WOOD_PINE))
  365. ->setHardness(1.4f);
  366. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_PINE,
  367. "Pine Leaves",
  368. 0,
  369. 0,
  370. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  371. BlockTypeEnum::LEAVES_WOOD_PINE))
  372. ->setHardness(0.1f);
  373. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_PINE,
  374. "Pine Sebling",
  375. 0,
  376. 0,
  377. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  378. BlockTypeEnum::SEBLING_WOOD_PINE))
  379. ->setHardness(0.1f);
  380. (new LightSourceItemType(ItemTypeEnum::TORCH,
  381. "Torch",
  382. ModelInfo("items.m3/stick", "blocks.ltdb/torch.png", 6),
  383. BlockTypeEnum::TORCH))
  384. ->setColor(0x00F69A54);
  385. new PlayerHandItemType();
  386. new StoneToolItemType();
  387. (new NoBlockItemType(ItemTypeEnum::WOOD_STICK,
  388. "WoodenStick",
  389. 0,
  390. 0,
  391. ModelInfo("items.m3/stick", "items.ltdb/stick.png", 1),
  392. []() {
  393. return ItemType::createBasicItem(ItemTypeEnum::WOOD_STICK,
  394. "Wooden Stick",
  395. 1.f,
  396. 1.f,
  397. 10.f,
  398. 10.f,
  399. 0,
  400. 0,
  401. 0,
  402. 1,
  403. 0,
  404. 50);
  405. }));
  406. (new NoBlockItemType(ItemTypeEnum::RESIN,
  407. "Resin",
  408. 0,
  409. 0,
  410. ModelInfo("itemCube", "items.ltdb/resin.png", 6),
  411. []() {
  412. return ItemType::createBasicItem(ItemTypeEnum::RESIN,
  413. "Resin",
  414. 1.f,
  415. 1.f,
  416. 10.f,
  417. 10.f,
  418. 0,
  419. 0,
  420. 0,
  421. 1,
  422. 0,
  423. 50);
  424. }));
  425. (new NoBlockItemType(ItemTypeEnum::STONE_TOOL_BROKEN,
  426. "BrokenStoneTool",
  427. 0,
  428. 0,
  429. ModelInfo("itemCube", "blocks.ltdb/stone.png", 6),
  430. []() {
  431. return ItemType::createBasicItem(ItemTypeEnum::STONE_TOOL_BROKEN,
  432. "Broken Stone Tool",
  433. 100.f,
  434. 100.f,
  435. 100.f,
  436. 100.f,
  437. 0,
  438. 0,
  439. 0,
  440. 1,
  441. 0,
  442. 10);
  443. }));
  444. new HoeToolItemType();
  445. new NoBlockItemType(ItemTypeEnum::BROKEN_HOE,
  446. "BrokenHoe",
  447. 0,
  448. 0,
  449. ModelInfo("tools.m3/hoe", "tools.ltdb/stonehoe", 1),
  450. []() {
  451. return ItemType::createBasicItem(ItemTypeEnum::STONE_TOOL_BROKEN,
  452. "Broken Hoe",
  453. 100.f,
  454. 100.f,
  455. 100.f,
  456. 100.f,
  457. 0,
  458. 0,
  459. 0,
  460. 1,
  461. 0,
  462. 10);
  463. });
  464. (new NoBlockItemType(ItemTypeEnum::FLINT,
  465. "Flint",
  466. 0,
  467. 0,
  468. ModelInfo("items.m3/flint", "items.ltdb/flint.png", 1),
  469. []() {
  470. return ItemType::createBasicItem(ItemTypeEnum::FLINT,
  471. "Flint",
  472. 1.f,
  473. 1.f,
  474. 10.f,
  475. 10.f,
  476. 0,
  477. 0,
  478. 0,
  479. 1,
  480. 0,
  481. 50);
  482. }));
  483. (new BasicBlockItemType(ItemTypeEnum::WHEAT_SEED,
  484. "Wheat Seeds",
  485. 0,
  486. 0,
  487. ModelInfo("grass", "plants.ltdb/wheatseeds.png", 16),
  488. BlockTypeEnum::WHEAT_SEED))
  489. ->setHardness(0.1f);
  490. (new NoBlockItemType(ItemTypeEnum::WHEAT,
  491. "Wheat",
  492. 0,
  493. 0,
  494. ModelInfo("grass", "plants.ltdb/wheat.png", 16),
  495. []() {
  496. return ItemType::createBasicItem(ItemTypeEnum::WHEAT,
  497. "Wheat",
  498. 1.f,
  499. 1.f,
  500. 10.f,
  501. 10.f,
  502. 1,
  503. 0,
  504. 0,
  505. 1,
  506. 0,
  507. 50); // TODO: add food increment on eating
  508. }));
  509. }
  510. void initializeEntityTypes()
  511. {
  512. new PlayerEntityType();
  513. new ItemEntityType();
  514. }
  515. void initializeDimensions()
  516. {
  517. new OverworldDimension();
  518. }
  519. void initializeMultiblockTypes()
  520. {
  521. new MultiblockTreeStructureType();
  522. }