#pragma once #include "StarMaybe.hpp" #include "StarColor.hpp" #include "StarPlantDatabase.hpp" #include "StarDirectives.hpp" namespace Star { STAR_CLASS(Parallax); STAR_STRUCT(ParallaxLayer); struct ParallaxLayer { ParallaxLayer(); ParallaxLayer(Json const& store); Json store() const; void addImageDirectives(Directives const& newDirectives); void fadeToSkyColor(Color skyColor); List textures; Directives directives; float alpha; Vec2F parallaxValue; Vec2B repeat; Maybe tileLimitTop; Maybe tileLimitBottom; float verticalOrigin; float zLevel; Vec2F parallaxOffset; String timeOfDayCorrelation; Vec2F speed; bool unlit; bool lightMapped; float fadePercent; }; typedef List ParallaxLayers; DataStream& operator>>(DataStream& ds, ParallaxLayer& parallaxLayer); DataStream& operator<<(DataStream& ds, ParallaxLayer const& parallaxLayer); // Object managing and rendering the parallax for a World class Parallax { public: Parallax(String const& assetFile, uint64_t seed, float verticalOrigin, float hueShift, Maybe parallaxTreeVariant = {}); Parallax(Json const& store); Json store() const; void fadeToSkyColor(Color const& skyColor); ParallaxLayers const& layers() const; private: void buildLayer(Json const& layerSettings, String const& kind); uint64_t m_seed; float m_verticalOrigin; Maybe m_parallaxTreeVariant; float m_hueShift; String m_imageDirectory; ParallaxLayers m_layers; }; }