#pragma once #include "TypeRegistry.h" class Noise; class FloatDistribution : public Framework::ReferenceCounter { public: FloatDistribution(); virtual ~FloatDistribution() = default; virtual float getValue( int x, int y, int z, int dimenstionId, Noise* zNoise) const = 0; }; class ConstantFloatDistribution : public FloatDistribution { private: float value; public: ConstantFloatDistribution(float value); float getValue( int x, int y, int z, int dimenstionId, Noise* zNoise) const override; float getValue() const; }; class ConstantFloatDistributionFactory : public SubTypeFactory { public: ConstantFloatDistributionFactory(); JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; ConstantFloatDistribution* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( ConstantFloatDistribution* zObject) const override; const char* getTypeToken() const override; }; class EqualyDistributedFloatDistribution : public FloatDistribution { private: float minValue; float maxValue; public: EqualyDistributedFloatDistribution(float minValue, float maxValue); float getValue( int x, int y, int z, int dimenstionId, Noise* zNoise) const override; float getMinValue() const; float getMaxValue() const; }; class EqualyDistributedFloatDistributionFactory : public SubTypeFactory { public: EqualyDistributedFloatDistributionFactory(); JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; EqualyDistributedFloatDistribution* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( EqualyDistributedFloatDistribution* zObject) const override; const char* getTypeToken() const override; };