Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/StarWorldParameters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/game/StarWorldParameters.cpp')
-rw-r--r--source/game/StarWorldParameters.cpp107
1 files changed, 40 insertions, 67 deletions
diff --git a/source/game/StarWorldParameters.cpp b/source/game/StarWorldParameters.cpp
index 97f0611..01d497a 100644
--- a/source/game/StarWorldParameters.cpp
+++ b/source/game/StarWorldParameters.cpp
@@ -25,19 +25,6 @@ EnumMap<WorldEdgeForceRegionType> const WorldEdgeForceRegionTypeNames{
{WorldEdgeForceRegionType::Bottom, "Bottom"},
{WorldEdgeForceRegionType::TopAndBottom, "TopAndBottom"}};
-VisitableWorldParameters::VisitableWorldParameters() {
- threatLevel = 0;
- gravity = 0;
- airless = false;
- disableDeathDrops = false;
- terraformed = false;
- worldEdgeForceRegions = WorldEdgeForceRegionType::None;
-}
-
-VisitableWorldParameters::VisitableWorldParameters(VisitableWorldParameters const& visitableWorldParameters) {
- *this = visitableWorldParameters;
-}
-
VisitableWorldParameters::VisitableWorldParameters(Json const& store) {
typeName = store.getString("typeName", "");
threatLevel = store.getFloat("threatLevel");
@@ -54,8 +41,6 @@ VisitableWorldParameters::VisitableWorldParameters(Json const& store) {
worldEdgeForceRegions = WorldEdgeForceRegionTypeNames.getLeft(store.getString("worldEdgeForceRegions", "None"));
}
-VisitableWorldParameters::~VisitableWorldParameters() {}
-
Json VisitableWorldParameters::store() const {
return JsonObject{{"typeName", typeName},
{"threatLevel", threatLevel},
@@ -104,15 +89,6 @@ void VisitableWorldParameters::write(DataStream& ds) const {
ds << worldEdgeForceRegions;
}
-TerrestrialWorldParameters::TerrestrialWorldParameters() {
- blendSize = 0;
- dayLength = 0;
-}
-
-TerrestrialWorldParameters::TerrestrialWorldParameters(TerrestrialWorldParameters const& terrestrialWorldParameters) {
- *this = terrestrialWorldParameters;
-}
-
TerrestrialWorldParameters::TerrestrialWorldParameters(Json const& store) : VisitableWorldParameters(store) {
auto loadTerrestrialRegion = [](Json const& config) {
return TerrestrialRegion{config.getString("biome"),
@@ -122,19 +98,19 @@ TerrestrialWorldParameters::TerrestrialWorldParameters(Json const& store) : Visi
config.getString("fgOreSelector"),
config.getString("bgOreSelector"),
config.getString("subBlockSelector"),
- (LiquidId)config.getUInt("caveLiquid"),
+ static_cast<LiquidId>(config.getUInt("caveLiquid")),
config.getFloat("caveLiquidSeedDensity"),
- (LiquidId)config.getUInt("oceanLiquid"),
- (int)config.getInt("oceanLiquidLevel"),
- (bool)config.getBool("encloseLiquids"),
- (bool)config.getBool("fillMicrodungeons")};
+ static_cast<LiquidId>(config.getUInt("oceanLiquid")),
+ static_cast<int>(config.getInt("oceanLiquidLevel")),
+ config.getBool("encloseLiquids"),
+ config.getBool("fillMicrodungeons")};
};
auto loadTerrestrialLayer = [loadTerrestrialRegion](Json const& config) {
- return TerrestrialLayer{(int)config.getInt("layerMinHeight"),
- (int)config.getInt("layerBaseHeight"),
+ return TerrestrialLayer{static_cast<int>(config.getInt("layerMinHeight")),
+ static_cast<int>(config.getInt("layerBaseHeight")),
jsonToStringList(config.get("dungeons")),
- (int)config.getInt("dungeonXVariance"),
+ static_cast<int>(config.getInt("dungeonXVariance")),
loadTerrestrialRegion(config.get("primaryRegion")),
loadTerrestrialRegion(config.get("primarySubRegion")),
config.getArray("secondaryRegions").transformed(loadTerrestrialRegion),
@@ -333,14 +309,11 @@ void TerrestrialWorldParameters::write(DataStream& ds) const {
AsteroidsWorldParameters::AsteroidsWorldParameters() {
airless = true;
- asteroidTopLevel = 0;
- asteroidBottomLevel = 0;
- blendSize = 0;
}
AsteroidsWorldParameters::AsteroidsWorldParameters(Json const& store) : VisitableWorldParameters(store) {
- asteroidTopLevel = store.getInt("asteroidTopLevel");
- asteroidBottomLevel = store.getInt("asteroidBottomLevel");
+ asteroidTopLevel = static_cast<int>(store.getInt("asteroidTopLevel"));
+ asteroidBottomLevel = static_cast<int>(store.getInt("asteroidBottomLevel"));
blendSize = store.getFloat("blendSize");
asteroidBiome = store.getString("asteroidBiome");
ambientLightLevel = jsonToColor(store.get("ambientLightLevel"));
@@ -376,12 +349,10 @@ void AsteroidsWorldParameters::write(DataStream& ds) const {
ds << ambientLightLevel;
}
-FloatingDungeonWorldParameters::FloatingDungeonWorldParameters() {}
-
FloatingDungeonWorldParameters::FloatingDungeonWorldParameters(Json const& store) : VisitableWorldParameters(store) {
- dungeonBaseHeight = store.getInt("dungeonBaseHeight");
- dungeonSurfaceHeight = store.getInt("dungeonSurfaceHeight");
- dungeonUndergroundLevel = store.getInt("dungeonUndergroundLevel");
+ dungeonBaseHeight = static_cast<int>(store.getInt("dungeonBaseHeight"));
+ dungeonSurfaceHeight = static_cast<int>(store.getInt("dungeonSurfaceHeight"));
+ dungeonUndergroundLevel = static_cast<int>(store.getInt("dungeonUndergroundLevel"));
primaryDungeon = store.getString("primaryDungeon");
biome = store.optString("biome");
ambientLightLevel = jsonToColor(store.get("ambientLightLevel"));
@@ -438,7 +409,7 @@ void FloatingDungeonWorldParameters::write(DataStream& ds) const {
Json diskStoreVisitableWorldParameters(VisitableWorldParametersConstPtr const& parameters) {
if (!parameters)
- return Json();
+ return {};
return parameters->store().setAll({{"type", WorldParametersTypeNames.getRight(parameters->type())}});
}
@@ -459,7 +430,7 @@ VisitableWorldParametersPtr diskLoadVisitableWorldParameters(Json const& store)
ByteArray netStoreVisitableWorldParameters(VisitableWorldParametersConstPtr const& parameters) {
if (!parameters)
- return ByteArray();
+ return {};
DataStreamBuffer ds;
ds.write(parameters->type());
@@ -509,7 +480,7 @@ TerrestrialWorldParametersPtr generateTerrestrialWorldParameters(String const& t
auto dayLengthRange = jsonToVec2F(config.get("dayLengthRange"));
auto threatLevelRange = jsonToVec2F(config.query("threatRange"));
- float threatLevel = staticRandomDouble(seed, "ThreatLevel") * (threatLevelRange[1] - threatLevelRange[0]) + threatLevelRange[0];
+ auto threatLevel = static_cast<float>(staticRandomDouble(seed, "ThreatLevel") * (threatLevelRange[1] - threatLevelRange[0]) + threatLevelRange[0]);
auto surfaceBiomeSeed = staticRandomU64(seed, "SurfaceBiomeSeed");
auto readRegion = [liquidsDatabase, threatLevel, seed](Json const& regionConfig, String const& layerName, int layerBaseHeight) {
@@ -539,7 +510,7 @@ TerrestrialWorldParametersPtr generateTerrestrialWorldParameters(String const& t
if (auto oceanLiquid = staticRandomValueFrom(regionConfig.getArray("oceanLiquid", {}), seed, "oceanLiquid", layerName.utf8Ptr()).optString()) {
region.oceanLiquid = liquidsDatabase->liquidId(*oceanLiquid);
- region.oceanLiquidLevel = regionConfig.getInt("oceanLevelOffset", 0) + layerBaseHeight;
+ region.oceanLiquidLevel = static_cast<int>(regionConfig.getInt("oceanLevelOffset", 0) + layerBaseHeight);
} else {
region.oceanLiquid = EmptyLiquidId;
region.oceanLiquidLevel = 0;
@@ -561,30 +532,32 @@ TerrestrialWorldParametersPtr generateTerrestrialWorldParameters(String const& t
TerrestrialWorldParameters::TerrestrialLayer layer;
- layer.layerMinHeight = layerConfig.getFloat("layerLevel");
- layer.layerBaseHeight = layerConfig.getFloat("baseHeight");
+ layer.layerMinHeight = static_cast<int>(layerConfig.getFloat("layerLevel"));
+ layer.layerBaseHeight = static_cast<int>(layerConfig.getFloat("baseHeight"));
auto primaryRegionList = layerConfig.getArray("primaryRegion");
auto primaryRegionConfigName = staticRandomFrom(primaryRegionList, seed, layerName.utf8Ptr(), "PrimaryRegionSelection").toString();
Json primaryRegionConfig = jsonMerge(regionDefaults, regionTypes.get(primaryRegionConfigName));
layer.primaryRegion = readRegion(primaryRegionConfig, layerName, layer.layerBaseHeight);
- auto subRegionList = primaryRegionConfig.getArray("subRegion");
- Json subRegionConfig;
- if (subRegionList.size() > 0) {
- String subRegionName = staticRandomFrom(subRegionList, seed, layerName, primaryRegionConfigName).toString();
- subRegionConfig = jsonMerge(regionDefaults, regionTypes.get(subRegionName));
- } else {
- subRegionConfig = primaryRegionConfig;
+ {
+ auto subRegionList = primaryRegionConfig.getArray("subRegion");
+ Json subRegionConfig;
+ if (!subRegionList.empty()) {
+ String subRegionName = staticRandomFrom(subRegionList, seed, layerName, primaryRegionConfigName).toString();
+ subRegionConfig = jsonMerge(regionDefaults, regionTypes.get(subRegionName));
+ } else {
+ subRegionConfig = primaryRegionConfig;
+ }
+ layer.primarySubRegion = readRegion(subRegionConfig, layerName, layer.layerBaseHeight);
}
- layer.primarySubRegion = readRegion(subRegionConfig, layerName, layer.layerBaseHeight);
Vec2U secondaryRegionCountRange = jsonToVec2U(layerConfig.get("secondaryRegionCount"));
- int secondaryRegionCount = staticRandomI32Range(secondaryRegionCountRange[0], secondaryRegionCountRange[1], seed, layerName, "SecondaryRegionCount");
+ int secondaryRegionCount = staticRandomI32Range(static_cast<int>(secondaryRegionCountRange[0]), static_cast<int>(secondaryRegionCountRange[1]), seed, layerName, "SecondaryRegionCount");
auto secondaryRegionList = layerConfig.getArray("secondaryRegions");
- if (secondaryRegionList.size() > 0) {
+ if (!secondaryRegionList.empty()) {
staticRandomShuffle(secondaryRegionList, seed, layerName, "SecondaryRegionShuffle");
- for (auto regionName : secondaryRegionList) {
+ for (const auto& regionName : secondaryRegionList) {
if (secondaryRegionCount <= 0)
break;
Json secondaryRegionConfig = jsonMerge(regionDefaults, regionTypes.get(regionName.toString()));
@@ -592,7 +565,7 @@ TerrestrialWorldParametersPtr generateTerrestrialWorldParameters(String const& t
auto subRegionList = secondaryRegionConfig.getArray("subRegion");
Json subRegionConfig;
- if (subRegionList.size() > 0) {
+ if (!subRegionList.empty()) {
String subRegionName = staticRandomFrom(subRegionList, seed, layerName, regionName.toString()).toString();
subRegionConfig = jsonMerge(regionDefaults, regionTypes.get(subRegionName));
} else {
@@ -611,7 +584,7 @@ TerrestrialWorldParametersPtr generateTerrestrialWorldParameters(String const& t
Vec2U dungeonCountRange = layerConfig.opt("dungeonCountRange").apply(jsonToVec2U).value();
unsigned dungeonCount = staticRandomU32Range(dungeonCountRange[0], dungeonCountRange[1], seed, layerName, "DungeonCount");
layer.dungeons.appendAll(dungeonPool.selectUniques(dungeonCount, staticRandomHash64(seed, layerName, "DungeonChoice")));
- layer.dungeonXVariance = layerConfig.getInt("dungeonXVariance", 0);
+ layer.dungeonXVariance = static_cast<int>(layerConfig.getInt("dungeonXVariance", 0));
return layer;
};
@@ -674,7 +647,7 @@ AsteroidsWorldParametersPtr generateAsteroidsWorldParameters(uint64_t seed) {
auto gravityRange = jsonToVec2F(asteroidsConfig.get("gravityRange"));
auto threatLevelRange = jsonToVec2F(asteroidsConfig.get("threatRange"));
- parameters->threatLevel = staticRandomDouble(seed, "ThreatLevel") * (threatLevelRange[1] - threatLevelRange[0]) + threatLevelRange[0];
+ parameters->threatLevel = static_cast<float>(staticRandomDouble(seed, "ThreatLevel") * (threatLevelRange[1] - threatLevelRange[0]) + threatLevelRange[0]);
parameters->typeName = "asteroids";
parameters->worldSize = jsonToVec2U(asteroidsConfig.get("worldSize"));
parameters->gravity = staticRandomFloatRange(gravityRange[0], gravityRange[1], seed, "WorldGravity");
@@ -685,8 +658,8 @@ AsteroidsWorldParametersPtr generateAsteroidsWorldParameters(uint64_t seed) {
parameters->disableDeathDrops = asteroidsConfig.getBool("disableDeathDrops", false);
parameters->worldEdgeForceRegions = WorldEdgeForceRegionTypeNames.getLeft(asteroidsConfig.getString("worldEdgeForceRegions", "TopAndBottom"));
- parameters->asteroidTopLevel = asteroidsConfig.getInt("asteroidsTop");
- parameters->asteroidBottomLevel = asteroidsConfig.getInt("asteroidsBottom");
+ parameters->asteroidTopLevel = static_cast<int>(asteroidsConfig.getInt("asteroidsTop"));
+ parameters->asteroidBottomLevel = static_cast<int>(asteroidsConfig.getInt("asteroidsBottom"));
parameters->blendSize = asteroidsConfig.getFloat("blendSize");
parameters->asteroidBiome = biome;
parameters->ambientLightLevel = jsonToColor(asteroidsConfig.get("ambientLightLevel"));
@@ -716,9 +689,9 @@ FloatingDungeonWorldParametersPtr generateFloatingDungeonWorldParameters(String
parameters->disableDeathDrops = worldConfig.getBool("disableDeathDrops", false);
parameters->worldEdgeForceRegions = WorldEdgeForceRegionTypeNames.getLeft(worldConfig.getString("worldEdgeForceRegions", "Top"));
- parameters->dungeonBaseHeight = worldConfig.getInt("dungeonBaseHeight");
- parameters->dungeonSurfaceHeight = worldConfig.getInt("dungeonSurfaceHeight", parameters->dungeonBaseHeight);
- parameters->dungeonUndergroundLevel = worldConfig.getInt("dungeonUndergroundLevel", 0);
+ parameters->dungeonBaseHeight = static_cast<int>(worldConfig.getInt("dungeonBaseHeight"));
+ parameters->dungeonSurfaceHeight = static_cast<int>(worldConfig.getInt("dungeonSurfaceHeight", parameters->dungeonBaseHeight));
+ parameters->dungeonUndergroundLevel = static_cast<int>(worldConfig.getInt("dungeonUndergroundLevel", 0));
parameters->primaryDungeon = worldConfig.getString("primaryDungeon");
parameters->biome = worldConfig.optString("biome");
parameters->ambientLightLevel = jsonToColor(worldConfig.get("ambientLightLevel"));