diff options
Diffstat (limited to 'source/game')
-rw-r--r-- | source/game/StarSkyParameters.cpp | 8 | ||||
-rw-r--r-- | source/game/StarSkyParameters.hpp | 1 | ||||
-rw-r--r-- | source/game/StarSkyRenderData.cpp | 9 |
3 files changed, 16 insertions, 2 deletions
diff --git a/source/game/StarSkyParameters.cpp b/source/game/StarSkyParameters.cpp index 886d882..3eddce5 100644 --- a/source/game/StarSkyParameters.cpp +++ b/source/game/StarSkyParameters.cpp @@ -16,6 +16,7 @@ SkyParameters::SkyParameters(CelestialCoordinate const& coordinate, CelestialDat auto params = celestialDatabase->parameters(coordinate); if (!params) return; + auto systemParams = celestialDatabase->parameters(coordinate.system()); seed = staticRandomU64(params->seed(), "SkySeed"); // Gather up all the CelestialParameters and scales for all the celestial @@ -50,6 +51,8 @@ SkyParameters::SkyParameters(CelestialCoordinate const& coordinate, CelestialDat horizonImages = CelestialGraphics::worldHorizonImages(*params); readVisitableParameters(params->visitableParameters()); + + sunType = systemParams->getParameter("typeName").toString(); } SkyParameters::SkyParameters(SkyParameters const& oldSkyParameters, VisitableWorldParametersConstPtr newVisitableParameters) : SkyParameters() { @@ -108,6 +111,8 @@ SkyParameters::SkyParameters(Json const& config) : SkyParameters() { spaceLevel = config.optFloat("spaceLevel"); surfaceLevel = config.optFloat("surfaceLevel"); + + sunType = config.getString("sunType", ""); } Json SkyParameters::toJson() const { @@ -149,6 +154,7 @@ Json SkyParameters::toJson() const { {"ambientLightLevel", jsonFromMaybe<Color>(skyColoring.maybeRight(), [](Color c) { return jsonFromColor(c); })}, {"spaceLevel", jsonFromMaybe<float>(spaceLevel)}, {"surfaceLevel", jsonFromMaybe<float>(surfaceLevel)}, + {"sunType", sunType}, }; } @@ -163,6 +169,7 @@ void SkyParameters::read(DataStream& ds) { ds >> skyColoring; ds >> spaceLevel; ds >> surfaceLevel; + ds >> sunType; } void SkyParameters::write(DataStream& ds) const { @@ -176,6 +183,7 @@ void SkyParameters::write(DataStream& ds) const { ds << skyColoring; ds << spaceLevel; ds << surfaceLevel; + ds << sunType; } void SkyParameters::readVisitableParameters(VisitableWorldParametersConstPtr visitableParameters) { diff --git a/source/game/StarSkyParameters.hpp b/source/game/StarSkyParameters.hpp index 9618e8d..50b476f 100644 --- a/source/game/StarSkyParameters.hpp +++ b/source/game/StarSkyParameters.hpp @@ -44,6 +44,7 @@ struct SkyParameters { Either<SkyColoring, Color> skyColoring; Maybe<float> spaceLevel; Maybe<float> surfaceLevel; + String sunType; }; DataStream& operator>>(DataStream& ds, SkyParameters& sky); diff --git a/source/game/StarSkyRenderData.cpp b/source/game/StarSkyRenderData.cpp index 367ca45..53a2c4f 100644 --- a/source/game/StarSkyRenderData.cpp +++ b/source/game/StarSkyRenderData.cpp @@ -95,10 +95,15 @@ List<SkyOrbiter> SkyRenderData::frontOrbiters(Vec2F const& viewSize) const { List<SkyOrbiter> orbiters; if (type == SkyType::Atmospheric || type == SkyType::Atmosphereless) { + String image; + if (settings.queryBool("sun.dynamicImage.enabled", false) && !skyParameters.sunType.empty()) + image = settings.queryString("sun.dynamicImage.images." + skyParameters.sunType, settings.queryString("sun.image")); + else + image = settings.queryString("sun.image"); orbiters.append({SkyOrbiterType::Sun, - 1.0f, + settings.queryFloat("sun.scale", 1.0f), 0.0f, - settings.queryString("sun.image"), + image, Vec2F::withAngle(orbitAngle, settings.queryFloat("sun.radius")) + viewSize / 2}); } else if (type == SkyType::Orbital) { auto planetCenter = Vec2F(viewSize[0] / 2, 0) |