/*
	ZNoiseMap.hpp
	Author : Chris Ertel

	Purpose :	Interface to create a map for noise values.

	Changelog
	2/13/11 - Creation (crertel)
	2/20/11 - Changed interface to be useful. (crertel)
*/

#ifndef _ZNOISEMAP_H
#define _ZNOISEMAP_H

#include <ZUtil/ZSimplexNoise.hpp>

class ZNoiseMap
{
public:
	virtual ~ZNoiseMap() {}

	/*
	virtual public ZNoiseMap::GetDimensionality
	 
	Gets dimension of noise map (1,2,etc.).
	 
	@return (int) - dimension of noise map
	*/
	virtual int GetDimensionality() = 0;

	/*
	virtual public ZNoiseMap::GetLacunarity
	 
	Get lacunarity (scaling of successive frequencies in noise series).
	 
	@return (float) - lacunarity of noise map
	*/
	virtual float GetLacunarity() = 0;		// scaling of successive frequencies in noise octaves
	
	/*
	virtual public ZNoiseMap::GetPersistence
	 
	Get persistence (scaling of successive amplitudes in noise series).
	 
	@return (float)
	*/
	virtual float GetPersistence() = 0;		// scaling of successive amplitudes in noise octaves
	

	/*
	virtual public ZNoiseMap::GetNumberOfOctaves
	 
	Get number of octaves in noise series.
	 
	@return (int) - number of terms in noise series.
	*/
	virtual int GetNumberOfOctaves() = 0;	

	/*
	virtual public ZNoiseMap::GetNumberSamplesInX
	 
	Get number of samples in X dimensions of noise map.
	 
	@return (int) - number of samples in X.
	*/
	virtual int GetNumberSamplesInX() = 0;
	
	/*
	virtual public ZNoiseMap::GetNumberSamplesInY
	 
	Get number of samples in Y dimensions of noise map.
	 
	@return (int) - number of samples in Y.
	*/
	virtual int GetNumberSamplesInY() = 0;

	/*
	virtual public ZNoiseMap::GetNumberSamplesInZ
	 
	Get number of samples in Z dimensions of noise map.
	 
	@return (int) - number of samples in Z.
	*/
	virtual int GetNumberSamplesInZ() = 0;

	/*
	virtual public ZNoiseMap::GetNumberSamplesInW
	 
	Get number of samples in Z dimensions of noise map.
	 
	@return (int) - number of samples in W.
	*/
	virtual int GetNumberSamplesInW() = 0;

	/*
	virtual public ZNoiseMap::SetLacunarity
	 
	Sets the lacunarity (scaling of successive frequencies in noise series).
	 
	@param _lac - lacunarity to use.
	@return (void)
	*/
	virtual void SetLacunarity(float _lac) = 0;			// scaling of successive frequencies in noise octaves
	
	/*
	virtual public ZNoiseMap::SetPersistence
	 
	Sets the persistence (scaling of successive amplitudes in noise series).
	 
	@param _per - persistence to set noise map to.
	@return (void)
	*/
	virtual void SetPersistence(float _per) = 0;			// scaling of successive amplitudes in noise octaves
	
	/*
	virtual public ZNoiseMap::SetNumberOfOctaves
	 
	Set number of octave in noise series.
	 
	@param _numOctaves - number of octaves to use.
	@return (void)
	*/
	virtual void SetNumberOfOctaves(int _numOctaves ) = 0;	

	/*
	virtual public ZNoiseMap::SetNumberSamplesInX
	 
	Sets number of samples in X direction.
	 
	@param _numSamples - number of samples in X direction.
	@return (void)
	*/
	virtual void SetNumberSamplesInX(int _numSamples) = 0;

	/*
	virtual public ZNoiseMap::SetNumberSamplesInY
	 
	Sets number of samples in Y direction.
	 
	@param _numSamples - number of samples in Y direction.
	@return (void)
	*/
	virtual void SetNumberSamplesInY(int _numSamples) = 0;
	
	/*
	virtual public ZNoiseMap::SetNumberSamplesInZ
	 
	Sets number of samples in Z direction.
	 
	@param _numSamples - number of samples in Z direction.
	@return (void)
	*/
	virtual void SetNumberSamplesInZ(int _numSamples) = 0;
	
	/*
	virtual public ZNoiseMap::SetNumberSamplesInW
	 
	Sets number of samples in W direction.
	 
	@param _numSamples - number of samples in W direction.
	@return (void)
	*/
	virtual void SetNumberSamplesInW(int _numSamples) = 0;

	/*
	virtual public ZNoiseMap::Generate
	 
	Generates noise map values.
	 
	@return (bool) - True if successful, false otherwise.
	*/
	virtual bool Generate(int _seed) = 0;

	/*
	virtual public ZNoiseMap::Cleanup
	 
	Cleans up resources for noise map.
	 
	@return (void)
	*/
	virtual void Cleanup() = 0;
};

#endif

