diff options
Diffstat (limited to 'source/game/StarParallax.hpp')
-rw-r--r-- | source/game/StarParallax.hpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/source/game/StarParallax.hpp b/source/game/StarParallax.hpp new file mode 100644 index 0000000..d3e36eb --- /dev/null +++ b/source/game/StarParallax.hpp @@ -0,0 +1,74 @@ +#ifndef STAR_PARALLAX_HPP +#define STAR_PARALLAX_HPP + +#include "StarMaybe.hpp" +#include "StarColor.hpp" +#include "StarPlantDatabase.hpp" + +namespace Star { + +STAR_CLASS(Parallax); +STAR_STRUCT(ParallaxLayer); + +struct ParallaxLayer { + ParallaxLayer(); + ParallaxLayer(Json const& store); + + Json store() const; + + void addImageDirectives(String const& newDirectives); + void fadeToSkyColor(Color skyColor); + + StringList textures; + String directives; + float alpha; + Vec2F parallaxValue; + Vec2B repeat; + Maybe<float> tileLimitTop; + Maybe<float> tileLimitBottom; + float verticalOrigin; + float zLevel; + Vec2F parallaxOffset; + String timeOfDayCorrelation; + float speed; + bool unlit; + bool lightMapped; + float fadePercent; +}; +typedef List<ParallaxLayer> 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<TreeVariant> 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<TreeVariant> m_parallaxTreeVariant; + float m_hueShift; + + String m_imageDirectory; + + ParallaxLayers m_layers; +}; + +} + +#endif |