summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dgn-proclayouts.h
diff options
context:
space:
mode:
authorPete Hurst <pete@streamuniverse.tv>2013-03-21 04:25:20 +0000
committerPete Hurst <pete@streamuniverse.tv>2013-04-09 12:24:51 +0100
commit95c5a40c70f2cf92857960f27bb60cc9dac88066 (patch)
treea5198dfdaa2af3024df258f4dd95cb7926901460 /crawl-ref/source/dgn-proclayouts.h
parent0eab4f3c86cbd4f9473fcced0905b5b1374b4219 (diff)
downloadcrawl-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.h93
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 */