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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/opensb/sky.config.patch23
-rw-r--r--assets/opensb/sky/orbitals/bluestar.pngbin0 -> 10007 bytes
-rw-r--r--assets/opensb/sky/orbitals/orangestar.pngbin0 -> 10592 bytes
-rw-r--r--assets/opensb/sky/orbitals/redstar.pngbin0 -> 10620 bytes
-rw-r--r--assets/opensb/sky/orbitals/whitestar.pngbin0 -> 10804 bytes
-rw-r--r--assets/opensb/sky/orbitals/yellowstar.pngbin0 -> 10778 bytes
-rw-r--r--source/game/StarSkyParameters.cpp8
-rw-r--r--source/game/StarSkyParameters.hpp1
-rw-r--r--source/game/StarSkyRenderData.cpp9
-rw-r--r--source/rendering/StarEnvironmentPainter.cpp18
-rw-r--r--source/rendering/StarWorldPainter.cpp5
11 files changed, 55 insertions, 9 deletions
diff --git a/assets/opensb/sky.config.patch b/assets/opensb/sky.config.patch
new file mode 100644
index 0000000..e9a7866
--- /dev/null
+++ b/assets/opensb/sky.config.patch
@@ -0,0 +1,23 @@
+{
+ "sun" : {
+ "rayColor" : [255, 255, 200],
+ "scale" : 0.7, // base scale, dynamic scaling aplies after it (sun image appears to have a higher scale in osb client?)
+ "dynamicImage" : {
+ "enabled" : true,
+ "images" : {
+ "whitestar" : "/sky/orbitals/whitestar.png",
+ "orangestar" : "/sky/orbitals/orangestar.png",
+ "yellowstar" : "/sky/orbitals/yellowstar.png",
+ "bluestar" : "/sky/orbitals/bluestar.png",
+ "redstar" : "/sky/orbitals/redstar.png"
+ },
+ "rayColors" : {
+ "whitestar" : [199, 245, 255],
+ "orangestar" : [255, 227, 199],
+ "yellowstar" : [245, 255, 199],
+ "bluestar" : [199, 199, 255],
+ "redstar" : [255, 213, 199]
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/assets/opensb/sky/orbitals/bluestar.png b/assets/opensb/sky/orbitals/bluestar.png
new file mode 100644
index 0000000..d174138
--- /dev/null
+++ b/assets/opensb/sky/orbitals/bluestar.png
Binary files differ
diff --git a/assets/opensb/sky/orbitals/orangestar.png b/assets/opensb/sky/orbitals/orangestar.png
new file mode 100644
index 0000000..788a070
--- /dev/null
+++ b/assets/opensb/sky/orbitals/orangestar.png
Binary files differ
diff --git a/assets/opensb/sky/orbitals/redstar.png b/assets/opensb/sky/orbitals/redstar.png
new file mode 100644
index 0000000..7f6837b
--- /dev/null
+++ b/assets/opensb/sky/orbitals/redstar.png
Binary files differ
diff --git a/assets/opensb/sky/orbitals/whitestar.png b/assets/opensb/sky/orbitals/whitestar.png
new file mode 100644
index 0000000..f4eb5a2
--- /dev/null
+++ b/assets/opensb/sky/orbitals/whitestar.png
Binary files differ
diff --git a/assets/opensb/sky/orbitals/yellowstar.png b/assets/opensb/sky/orbitals/yellowstar.png
new file mode 100644
index 0000000..596d8ef
--- /dev/null
+++ b/assets/opensb/sky/orbitals/yellowstar.png
Binary files differ
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)
diff --git a/source/rendering/StarEnvironmentPainter.cpp b/source/rendering/StarEnvironmentPainter.cpp
index 7501f77..b5c514e 100644
--- a/source/rendering/StarEnvironmentPainter.cpp
+++ b/source/rendering/StarEnvironmentPainter.cpp
@@ -380,21 +380,27 @@ void EnvironmentPainter::drawRay(float pixelRatio,
// Sum is used to vary the ray intensity based on sky color
// Rays show up more on darker backgrounds, so this scales to remove that
float sum = std::pow((color[0] + color[1]) * RayColorDependenceScale, RayColorDependenceLevel);
+ Vec3B rayColor;
+ if (sky.settings.queryBool("sun.dynamicImage.enabled", false) && !sky.skyParameters.sunType.empty())
+ rayColor = jsonToVec3B(sky.settings.query("sun.dynamicImage.rayColors." + sky.skyParameters.sunType, sky.settings.query("sun.rayColor", JsonArray{RayColor[0], RayColor[1], RayColor[2]})));
+ else
+ rayColor = jsonToVec3B(sky.settings.query("sun.rayColor", JsonArray{RayColor[0], RayColor[1], RayColor[2]}));
+ float sunScale = sky.settings.queryFloat("sun.scale", 1.0f);
m_renderer->immediatePrimitives().emplace_back(std::in_place_type_t<RenderQuad>(), TexturePtr(),
- RenderVertex{start + Vec2F(std::cos(angle + width), std::sin(angle + width)) * length, {}, Vec4B(RayColor, 0), 0.0f},
- RenderVertex{start + Vec2F(std::cos(angle + width), std::sin(angle + width)) * SunRadius * pixelRatio,
+ RenderVertex{start + Vec2F(std::cos(angle + width), std::sin(angle + width)) * length, {}, Vec4B(rayColor, 0), 0.0f},
+ RenderVertex{start + Vec2F(std::cos(angle + width), std::sin(angle + width)) * SunRadius * sunScale * pixelRatio,
{},
- Vec4B(RayColor,
+ Vec4B(rayColor,
(int)(RayMinUnscaledAlpha + std::abs(m_rayPerlin.get(angle * 896 + time * 30) * RayUnscaledAlphaVariance))
* sum
* alpha), 0.0f},
- RenderVertex{start + Vec2F(std::cos(angle), std::sin(angle)) * SunRadius * pixelRatio,
+ RenderVertex{start + Vec2F(std::cos(angle), std::sin(angle)) * SunRadius * sunScale * pixelRatio,
{},
- Vec4B(RayColor,
+ Vec4B(rayColor,
(int)(RayMinUnscaledAlpha + std::abs(m_rayPerlin.get(angle * 626 + time * 30) * RayUnscaledAlphaVariance))
* sum
* alpha), 0.0f},
- RenderVertex{start + Vec2F(std::cos(angle), std::sin(angle)) * length, {}, Vec4B(RayColor, 0), 0.0f});
+ RenderVertex{start + Vec2F(std::cos(angle), std::sin(angle)) * length, {}, Vec4B(rayColor, 0), 0.0f});
}
void EnvironmentPainter::drawOrbiter(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky, SkyOrbiter const& orbiter) {
diff --git a/source/rendering/StarWorldPainter.cpp b/source/rendering/StarWorldPainter.cpp
index e106307..15fb9b9 100644
--- a/source/rendering/StarWorldPainter.cpp
+++ b/source/rendering/StarWorldPainter.cpp
@@ -66,10 +66,13 @@ void WorldPainter::render(WorldRenderData& renderData, function<void()> lightWai
m_environmentPainter->renderStars(starAndDebrisRatio, Vec2F(m_camera.screenSize()), renderData.skyRenderData);
m_environmentPainter->renderDebrisFields(starAndDebrisRatio, Vec2F(m_camera.screenSize()), renderData.skyRenderData);
- m_environmentPainter->renderBackOrbiters(orbiterAndPlanetRatio, Vec2F(m_camera.screenSize()), renderData.skyRenderData);
+ if (renderData.skyRenderData.type != SkyType::Atmosphereless)
+ m_environmentPainter->renderBackOrbiters(orbiterAndPlanetRatio, Vec2F(m_camera.screenSize()), renderData.skyRenderData);
m_environmentPainter->renderPlanetHorizon(orbiterAndPlanetRatio, Vec2F(m_camera.screenSize()), renderData.skyRenderData);
m_environmentPainter->renderSky(Vec2F(m_camera.screenSize()), renderData.skyRenderData);
m_environmentPainter->renderFrontOrbiters(orbiterAndPlanetRatio, Vec2F(m_camera.screenSize()), renderData.skyRenderData);
+ if (renderData.skyRenderData.type == SkyType::Atmosphereless)
+ m_environmentPainter->renderBackOrbiters(orbiterAndPlanetRatio, Vec2F(m_camera.screenSize()), renderData.skyRenderData);
m_renderer->flush();