#pragma once

#include "Noise.h"
#include "Punkt.h"
#include "Cache.h"
#include "RCPointer.h"

class NoiseInterpolator : public Noise
{
	Framework::Punkt noiseSize;
	Framework::Cache<int, Framework::RCPointer<Noise>> cache;
	std::function<Noise* (int)> noiseSupplier;
	int seed;

	double getRealNoise(double x, double y, double z);

public:
	NoiseInterpolator(int seed, std::function<Noise* (int)> noiseSupplier, int width, int height);
	double getNoise(double x, double y, double z) override;
	int getSeed() const override;
};