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

summaryrefslogtreecommitdiff
path: root/source/rendering/StarEnvironmentPainter.hpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/rendering/StarEnvironmentPainter.hpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/rendering/StarEnvironmentPainter.hpp')
-rw-r--r--source/rendering/StarEnvironmentPainter.hpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/source/rendering/StarEnvironmentPainter.hpp b/source/rendering/StarEnvironmentPainter.hpp
new file mode 100644
index 0000000..3a90b69
--- /dev/null
+++ b/source/rendering/StarEnvironmentPainter.hpp
@@ -0,0 +1,81 @@
+#ifndef STAR_ENVIRONMENT_PAINTER_HPP
+#define STAR_ENVIRONMENT_PAINTER_HPP
+
+#include "StarParallax.hpp"
+#include "StarWorldRenderData.hpp"
+#include "StarAssetTextureGroup.hpp"
+#include "StarRenderer.hpp"
+#include "StarWorldCamera.hpp"
+#include "StarPerlin.hpp"
+#include "StarRandomPoint.hpp"
+
+namespace Star {
+
+STAR_CLASS(EnvironmentPainter);
+
+class EnvironmentPainter {
+public:
+ EnvironmentPainter(RendererPtr renderer);
+
+ void update();
+
+ void renderStars(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky);
+ void renderDebrisFields(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky);
+ void renderBackOrbiters(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky);
+ void renderPlanetHorizon(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky);
+ void renderFrontOrbiters(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky);
+ void renderSky(Vec2F const& screenSize, SkyRenderData const& sky);
+
+ void renderParallaxLayers(Vec2F parallaxWorldPosition, WorldCamera const& camera, ParallaxLayers const& layers, SkyRenderData const& sky);
+
+ void cleanup(int64_t textureTimeout);
+
+private:
+ static float const SunriseTime;
+ static float const SunsetTime;
+ static float const SunFadeRate;
+ static float const MaxFade;
+ static float const RayPerlinFrequency;
+ static float const RayPerlinAmplitude;
+ static int const RayCount;
+ static float const RayMinWidth;
+ static float const RayWidthVariance;
+ static float const RayAngleVariance;
+ static float const SunRadius;
+ static float const RayColorDependenceLevel;
+ static float const RayColorDependenceScale;
+ static float const RayUnscaledAlphaVariance;
+ static float const RayMinUnscaledAlpha;
+ static Vec3B const RayColor;
+
+ void drawRays(float pixelRatio, SkyRenderData const& sky, Vec2F start, float length, double time, float alpha);
+ void drawRay(float pixelRatio,
+ SkyRenderData const& sky,
+ Vec2F start,
+ float width,
+ float length,
+ float angle,
+ double time,
+ Vec3B color,
+ float alpha);
+ void drawOrbiter(float pixelRatio, Vec2F const& screenSize, SkyRenderData const& sky, SkyOrbiter const& orbiter);
+
+ uint64_t starsHash(SkyRenderData const& sky, Vec2F const& viewSize) const;
+ void setupStars(SkyRenderData const& sky);
+
+ RendererPtr m_renderer;
+ AssetTextureGroupPtr m_textureGroup;
+
+ double m_timer;
+ int64_t m_lastTime;
+ PerlinF m_rayPerlin;
+
+ uint64_t m_starsHash;
+ List<TexturePtr> m_starTextures;
+ shared_ptr<Random2dPointGenerator<pair<size_t, float>>> m_starGenerator;
+ List<shared_ptr<Random2dPointGenerator<pair<String, float>>>> m_debrisGenerators;
+};
+
+}
+
+#endif