| 55 | } |
| 56 | |
| 57 | CelestialMasterDatabase::CelestialMasterDatabase(Maybe<String> databaseFile) { |
| 58 | auto assets = Root::singleton().assets(); |
| 59 | |
| 60 | auto config = assets->json("/celestial.config"); |
| 61 | |
| 62 | m_baseInformation.planetOrbitalLevels = config.getInt("planetOrbitalLevels"); |
| 63 | m_baseInformation.satelliteOrbitalLevels = config.getInt("satelliteOrbitalLevels"); |
| 64 | m_baseInformation.chunkSize = config.getInt("chunkSize"); |
| 65 | m_baseInformation.xyCoordRange = jsonToVec2I(config.get("xyCoordRange")); |
| 66 | m_baseInformation.zCoordRange = jsonToVec2I(config.get("zCoordRange")); |
| 67 | |
| 68 | m_generationInformation.systemProbability = config.getFloat("systemProbability"); |
| 69 | m_generationInformation.constellationProbability = config.getFloat("constellationProbability"); |
| 70 | m_generationInformation.constellationLineCountRange = jsonToVec2U(config.get("constellationLineCountRange")); |
| 71 | m_generationInformation.constellationMaxTries = config.getUInt("constellationMaxTries"); |
| 72 | m_generationInformation.maximumConstellationLineLength = config.getFloat("maximumConstellationLineLength"); |
| 73 | m_generationInformation.minimumConstellationLineLength = config.getFloat("minimumConstellationLineLength"); |
| 74 | m_generationInformation.minimumConstellationMagnitude = config.getFloat("minimumConstellationMagnitude"); |
| 75 | m_generationInformation.minimumConstellationLineCloseness = config.getFloat("minimumConstellationLineCloseness"); |
| 76 | |
| 77 | // Copy construct into a Map<String, Json> in the parsing of the weighted |
| 78 | // pools to make sure that each WeightedPool is predictably populated based |
| 79 | // on key order. |
| 80 | |
| 81 | for (auto const& systemPair : Map<String, Json>::from(config.getObject("systemTypes"))) { |
| 82 | SystemType systemType; |
| 83 | systemType.typeName = systemPair.first; |
| 84 | systemType.baseParameters = systemPair.second.get("baseParameters"); |
| 85 | systemType.variationParameters = systemPair.second.getArray("variationParameters", JsonArray()); |
| 86 | for (auto const& orbitRegion : systemPair.second.getArray("orbitRegions", JsonArray())) { |
| 87 | String regionName = orbitRegion.getString("regionName"); |
| 88 | Vec2I orbitRange = jsonToVec2I(orbitRegion.get("orbitRange")); |
| 89 | float bodyProbability = orbitRegion.getFloat("bodyProbability"); |
| 90 | WeightedPool<String> regionPlanetaryTypes = jsonToWeightedPool<String>(orbitRegion.get("planetaryTypes")); |
| 91 | WeightedPool<String> regionSatelliteTypes = jsonToWeightedPool<String>(orbitRegion.get("satelliteTypes")); |
| 92 | systemType.orbitRegions.append({regionName, orbitRange, bodyProbability, regionPlanetaryTypes, regionSatelliteTypes}); |
| 93 | } |
| 94 | m_generationInformation.systemTypes.add(systemPair.first, systemType); |
| 95 | } |
| 96 | |
| 97 | m_generationInformation.systemTypePerlin = PerlinD(config.getObject("systemTypePerlin"), staticRandomU64("SystemTypePerlin")); |
| 98 | m_generationInformation.systemTypeBins = config.get("systemTypeBins"); |
| 99 | |
| 100 | for (auto const& planetaryPair : Map<String, Json>::from(config.getObject("planetaryTypes"))) { |
| 101 | PlanetaryType planetaryType; |
| 102 | planetaryType.typeName = planetaryPair.first; |
| 103 | planetaryType.satelliteProbability = planetaryPair.second.getFloat("satelliteProbability"); |
| 104 | planetaryType.maxSatelliteCount = |
| 105 | planetaryPair.second.getUInt("maxSatelliteCount", m_baseInformation.satelliteOrbitalLevels); |
| 106 | planetaryType.baseParameters = planetaryPair.second.get("baseParameters"); |
| 107 | planetaryType.variationParameters = planetaryPair.second.getArray("variationParameters", JsonArray()); |
| 108 | planetaryType.orbitParameters = planetaryPair.second.getObject("orbitParameters", JsonObject()); |
| 109 | m_generationInformation.planetaryTypes[planetaryType.typeName] = planetaryType; |
| 110 | } |
| 111 | |
| 112 | for (auto const& satellitePair : Map<String, Json>::from(config.getObject("satelliteTypes"))) { |
| 113 | SatelliteType satelliteType; |
| 114 | satelliteType.typeName = satellitePair.first; |
nothing calls this directly
no test coverage detected