| 9 | namespace Star { |
| 10 | |
| 11 | MaterialDatabase::MaterialDatabase() { |
| 12 | m_metaModIndex = { |
| 13 | {"metamod:none", NoModId}, |
| 14 | {"metamod:biome", BiomeModId}, |
| 15 | {"metamod:undergroundbiome", UndergroundBiomeModId}}; |
| 16 | |
| 17 | auto assets = Root::singleton().assets(); |
| 18 | auto pdb = Root::singleton().particleDatabase(); |
| 19 | |
| 20 | setMetaMaterial(EmptyMaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:empty", EmptyMaterialId, CollisionKind::None, false}); |
| 21 | setMetaMaterial(NullMaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:null", NullMaterialId, CollisionKind::Block, true}); |
| 22 | setMetaMaterial(StructureMaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:structure", StructureMaterialId, CollisionKind::Block, true}); |
| 23 | setMetaMaterial(BiomeMaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:biome", BiomeMaterialId, CollisionKind::Block, true}); |
| 24 | setMetaMaterial(Biome1MaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:biome1", Biome1MaterialId, CollisionKind::Block, true}); |
| 25 | setMetaMaterial(Biome2MaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:biome2", Biome2MaterialId, CollisionKind::Block, true}); |
| 26 | setMetaMaterial(Biome3MaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:biome3", Biome3MaterialId, CollisionKind::Block, true}); |
| 27 | setMetaMaterial(Biome4MaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:biome4", Biome4MaterialId, CollisionKind::Block, true}); |
| 28 | setMetaMaterial(Biome5MaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:biome5", Biome5MaterialId, CollisionKind::Block, true}); |
| 29 | setMetaMaterial(BoundaryMaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:boundary", BoundaryMaterialId, CollisionKind::Slippery, true}); |
| 30 | setMetaMaterial(ObjectSolidMaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:objectsolid", ObjectSolidMaterialId, CollisionKind::Block, true}); |
| 31 | setMetaMaterial(ObjectPlatformMaterialId, MaterialDatabase::MetaMaterialInfo{"metamaterial:objectplatform", ObjectPlatformMaterialId, CollisionKind::Platform, false}); |
| 32 | |
| 33 | auto metaMaterialConfig = assets->json("/metamaterials.config"); |
| 34 | for (auto metaMaterial : metaMaterialConfig.iterateArray()) { |
| 35 | auto matName = "metamaterial:" + metaMaterial.getString("name"); |
| 36 | if (isMaterialName(matName)) { |
| 37 | Logger::info("Metamaterial '{}' has duplicate material name!", matName); |
| 38 | continue; |
| 39 | } |
| 40 | |
| 41 | MaterialId matId = metaMaterial.getUInt("materialId"); |
| 42 | if (isRealMaterial(matId) || matId >= FirstEngineMetaMaterialId) { |
| 43 | Logger::info("Material id {} for metamaterial '{}' does not fall within the valid range!", matId, matName); |
| 44 | continue; |
| 45 | } else if (containsMetaMaterial(matId)) { |
| 46 | Logger::info("Material id {} for metamaterial '{}' conflicts with another metamaterial id!", matId, matName); |
| 47 | continue; |
| 48 | } |
| 49 | |
| 50 | auto matCollisionKind = CollisionKindNames.getLeft(metaMaterial.getString("collisionKind")); |
| 51 | |
| 52 | bool blocksLiquidFlow = metaMaterial.getBool("blocksLiquidFlow", isSolidColliding(matCollisionKind)); |
| 53 | |
| 54 | setMetaMaterial(matId, MaterialDatabase::MetaMaterialInfo{matName, matId, matCollisionKind, blocksLiquidFlow}); |
| 55 | } |
| 56 | |
| 57 | auto& materials = assets->scanExtension("material"); |
| 58 | auto& mods = assets->scanExtension("matmod"); |
| 59 | |
| 60 | assets->queueJsons(materials); |
| 61 | assets->queueJsons(mods); |
| 62 | |
| 63 | for (auto& file : materials) { |
| 64 | try { |
| 65 | auto matConfig = assets->json(file); |
| 66 | |
| 67 | MaterialInfo material; |
| 68 |
nothing calls this directly
no test coverage detected