diff options
author | Pete Hurst <pete@streamuniverse.tv> | 2013-03-21 04:25:20 +0000 |
---|---|---|
committer | Pete Hurst <pete@streamuniverse.tv> | 2013-04-09 12:24:51 +0100 |
commit | 95c5a40c70f2cf92857960f27bb60cc9dac88066 (patch) | |
tree | a5198dfdaa2af3024df258f4dd95cb7926901460 /crawl-ref/source/dgn-proclayouts.h | |
parent | 0eab4f3c86cbd4f9473fcced0905b5b1374b4219 (diff) | |
download | crawl-ref-95c5a40c70f2cf92857960f27bb60cc9dac88066.tar.gz crawl-ref-95c5a40c70f2cf92857960f27bb60cc9dac88066.zip |
Implement noise wrapper functions
Also use the noise wrappers in ForestLayout
Diffstat (limited to 'crawl-ref/source/dgn-proclayouts.h')
-rw-r--r-- | crawl-ref/source/dgn-proclayouts.h | 93 |
1 files changed, 91 insertions, 2 deletions
diff --git a/crawl-ref/source/dgn-proclayouts.h b/crawl-ref/source/dgn-proclayouts.h index 2f4a131758..7a88df0ec0 100644 --- a/crawl-ref/source/dgn-proclayouts.h +++ b/crawl-ref/source/dgn-proclayouts.h @@ -233,11 +233,100 @@ class ForestLayout : public NoiseLayout ProceduralSample operator()(const coord_def &p, const uint32_t offset = 0) const; }; -class PlainsLayout : public NoiseLayout +class LavaLayout : public NoiseLayout { public: - PlainsLayout() { }; + LavaLayout() { }; ProceduralSample operator()(const coord_def &p, const uint32_t offset = 0) const; }; +class OverworldLayout : public NoiseLayout +{ + public: + OverworldLayout() { }; + ProceduralSample operator()(const coord_def &p, const uint32_t offset = 0) const; +}; + +// ProceduralFunctions abstract a noise calculation for x,y,z coordinates (which could +// include distortion by domain transformation) + +class ProceduralFunction +{ + public: + double operator()(const coord_def &p, const uint32_t offset) const; + virtual double operator()(double x, double y, double z) const; +}; + +class SimplexFunction : public ProceduralFunction +{ + public: + SimplexFunction(double _scale_x, double _scale_y, double _scale_z, + double _seed_x, double _seed_y, double _seed_z = 0, + int _octaves = 1) + : scale_x(_scale_x), scale_y(_scale_y), scale_z(_scale_z), + seed_x(_seed_x), seed_y(_seed_y), seed_z(_seed_z), + octaves(_octaves) { }; + + double operator()(double x, double y, double z) const; + + private: + const double scale_x; + const double scale_y; + const double scale_z; + const double seed_x; + const double seed_y; + const double seed_z; + const int octaves; +}; + +class WorleyFunction : public ProceduralFunction +{ + public: + WorleyFunction(double _scale_x, double _scale_y, double _scale_z, + double _seed_x, double _seed_y, double _seed_z = 0) + : scale_x(_scale_x), scale_y(_scale_y), scale_z(_scale_z), + seed_x(_seed_x), seed_y(_seed_y), seed_z(_seed_z) { }; + double operator()(double x, double y, double z) const; + worley::noise_datum datum(double x, double y, double z) const; + + private: + const double scale_x; + const double scale_y; + const double scale_z; + const double seed_x; + const double seed_y; + const double seed_z; +}; + +class DistortFunction : public ProceduralFunction +{ + public: + DistortFunction(const ProceduralFunction &_base, + const ProceduralFunction &_offx, double _scalex, + const ProceduralFunction &_offy, double _scaley) + : base(_base), off_x(_offx), scale_x(_scalex), + off_y(_offy), scale_y(_scaley) { }; + double operator()(double x, double y, double z) const; + + protected: + const ProceduralFunction &base; + const ProceduralFunction &off_x; + const double scale_x; + const ProceduralFunction &off_y; + const double scale_y; +}; + +class WorleyDistortFunction : public DistortFunction +{ + public: + WorleyDistortFunction(const WorleyFunction &_base, + const ProceduralFunction &_offx, double _scalex, + const ProceduralFunction &_offy, double _scaley) + : DistortFunction(_base,_offx,_scalex,_offy,_scaley), wbase(_base) { }; + worley::noise_datum datum(double x, double y, double z) const; + + private: + const WorleyFunction &wbase; +}; + #endif /* PROC_LAYOUTS_H */ |