MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / MaterialDatabase

Method MaterialDatabase

source/game/StarMaterialDatabase.cpp:11–215  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9namespace Star {
10
11MaterialDatabase::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

Callers

nothing calls this directly

Calls 15

singletonClass · 0.85
isRealMaterialFunction · 0.85
isSolidCollidingFunction · 0.85
jsonToColorFunction · 0.85
jsonToStringListFunction · 0.85
strfFunction · 0.85
isRealModFunction · 0.85
assetsMethod · 0.80
particleDatabaseMethod · 0.80
jsonMethod · 0.80

Tested by

no test coverage detected