| 10 | LiquidSettings::LiquidSettings() : id(EmptyLiquidId) {} |
| 11 | |
| 12 | LiquidsDatabase::LiquidsDatabase() { |
| 13 | auto assets = Root::singleton().assets(); |
| 14 | auto materialDatabase = Root::singleton().materialDatabase(); |
| 15 | |
| 16 | auto config = assets->json("/liquids.config"); |
| 17 | |
| 18 | auto liquidEngineParameters = config.get("liquidEngineParameters"); |
| 19 | m_liquidEngineParameters.lateralMoveFactor = liquidEngineParameters.getFloat("lateralMoveFactor"); |
| 20 | m_liquidEngineParameters.spreadOverfillUpFactor = liquidEngineParameters.getFloat("spreadOverfillUpFactor"); |
| 21 | m_liquidEngineParameters.spreadOverfillLateralFactor = liquidEngineParameters.getFloat("spreadOverfillLateralFactor"); |
| 22 | m_liquidEngineParameters.spreadOverfillDownFactor = liquidEngineParameters.getFloat("spreadOverfillDownFactor"); |
| 23 | m_liquidEngineParameters.pressureEqualizeFactor = liquidEngineParameters.getFloat("pressureEqualizeFactor"); |
| 24 | m_liquidEngineParameters.pressureMoveFactor = liquidEngineParameters.getFloat("pressureMoveFactor"); |
| 25 | m_liquidEngineParameters.maximumPressureLevelImbalance = liquidEngineParameters.getFloat("maximumPressureLevelImbalance"); |
| 26 | m_liquidEngineParameters.minimumLivenPressureChange = liquidEngineParameters.getFloat("minimumLivenPressureChange"); |
| 27 | m_liquidEngineParameters.minimumLivenLevelChange = liquidEngineParameters.getFloat("minimumLivenLevelChange"); |
| 28 | m_liquidEngineParameters.minimumLiquidLevel = liquidEngineParameters.getFloat("minimumLiquidLevel"); |
| 29 | m_liquidEngineParameters.interactTransformationLevel = liquidEngineParameters.getFloat("interactTransformationLevel"); |
| 30 | |
| 31 | m_backgroundDrain = config.getFloat("backgroundDrain"); |
| 32 | |
| 33 | m_liquidNames["empty"] = EmptyLiquidId; |
| 34 | |
| 35 | auto& liquids = assets->scanExtension("liquid"); |
| 36 | assets->queueJsons(liquids); |
| 37 | |
| 38 | for (auto& file : liquids) { |
| 39 | try { |
| 40 | auto liquidConfig = assets->json(file); |
| 41 | |
| 42 | unsigned id = liquidConfig.getUInt("liquidId"); |
| 43 | if (id != (LiquidId)id) |
| 44 | throw LiquidException(strf("Liquid id {} does not fall in the valid range, wrapped to {}\n", id, (LiquidId)id)); |
| 45 | |
| 46 | auto entry = make_shared<LiquidSettings>(); |
| 47 | entry->id = (LiquidId)id; |
| 48 | entry->name = liquidConfig.getString("name"); |
| 49 | entry->path = file; |
| 50 | entry->config = liquidConfig; |
| 51 | |
| 52 | JsonObject descriptions; |
| 53 | for (auto pair : liquidConfig.iterateObject()) |
| 54 | if (pair.first.endsWith("Description")) |
| 55 | descriptions[pair.first] = pair.second; |
| 56 | descriptions["description"] = liquidConfig.getString("description", ""); |
| 57 | entry->descriptions = descriptions; |
| 58 | |
| 59 | entry->tickDelta = liquidConfig.getUInt("tickDelta"); |
| 60 | entry->liquidColor = jsonToVec4B(liquidConfig.get("color")); |
| 61 | |
| 62 | if (liquidConfig.contains("radiantLight")) { |
| 63 | auto lightLevel = jsonToVec3B(liquidConfig.get("radiantLight")); |
| 64 | entry->radiantLightLevel = Color::rgb(lightLevel).toRgbF(); |
| 65 | } |
| 66 | |
| 67 | entry->itemDrop = ItemDescriptor(liquidConfig.get("itemDrop", {})); |
| 68 | |
| 69 | entry->statusEffects = liquidConfig.getArray("statusEffects", {}); |
nothing calls this directly
no test coverage detected