| 173 | } |
| 174 | |
| 175 | TreeVariant PlantDatabase::buildTreeVariant( |
| 176 | String const& stemName, float stemHueShift, String const& foliageName, float foliageHueShift) const { |
| 177 | if (!m_treeStemConfigs.contains(stemName) || !m_treeFoliageConfigs.contains(foliageName)) |
| 178 | throw PlantDatabaseException::format("stemName '{}' or foliageName '{}' not found in plant database", stemName, foliageName); |
| 179 | |
| 180 | TreeVariant treeVariant; |
| 181 | |
| 182 | treeVariant.stemName = stemName; |
| 183 | treeVariant.foliageName = foliageName; |
| 184 | |
| 185 | auto stemConfig = m_treeStemConfigs.get(stemName); |
| 186 | treeVariant.stemDirectory = stemConfig.directory; |
| 187 | treeVariant.stemSettings = stemConfig.settings; |
| 188 | treeVariant.stemHueShift = stemHueShift; |
| 189 | |
| 190 | auto foliageConfig = m_treeFoliageConfigs.get(foliageName); |
| 191 | treeVariant.foliageDirectory = foliageConfig.directory; |
| 192 | treeVariant.foliageSettings = foliageConfig.settings; |
| 193 | treeVariant.foliageHueShift = foliageHueShift; |
| 194 | |
| 195 | treeVariant.ceiling = stemConfig.settings.getBool("ceiling", false); |
| 196 | |
| 197 | treeVariant.stemDropConfig = stemConfig.settings.get("dropConfig", JsonObject()); |
| 198 | treeVariant.foliageDropConfig = foliageConfig.settings.get("dropConfig", JsonObject()); |
| 199 | |
| 200 | JsonObject descriptions; |
| 201 | for (auto const& entry : stemConfig.settings.iterateObject()) { |
| 202 | if (entry.first.endsWith("Description")) |
| 203 | descriptions[entry.first] = entry.second; |
| 204 | } |
| 205 | descriptions["description"] = stemConfig.settings.getString("description", stemName + " with " + foliageName); |
| 206 | treeVariant.descriptions = descriptions; |
| 207 | |
| 208 | treeVariant.ephemeral = stemConfig.settings.getBool("allowsBlockPlacement", false); |
| 209 | |
| 210 | treeVariant.tileDamageParameters = TileDamageParameters( |
| 211 | stemConfig.settings.get("damageTable", "/plants/treeDamage.config"), |
| 212 | stemConfig.settings.getFloat("health", 1.0f)); |
| 213 | |
| 214 | return treeVariant; |
| 215 | } |
| 216 | |
| 217 | TreeVariant PlantDatabase::buildTreeVariant(String const& stemName, float stemHueShift) const { |
| 218 | if (!m_treeStemConfigs.contains(stemName)) |
no test coverage detected