/*
	ZNoise.hpp
	Author : Chris Ertel

	Purpose :	Interface class to call noise generation functions.

	Changelog
	2/13/11 - Creation (crertel)
*/

#ifndef _ZNOISE_H
#define _ZNOISE_H

#include <ZUtil/ZUtilBuild.hpp>

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

	/*
	virtual public ZNoise::reseed
	 
	Function to set seed for the noise generator.
	 
	@param _seed - int to seed the noise with.
	@return (void)
	*/
	virtual void reseed (const int _seed) = 0;
	
	/*
	virtual public ZNoise::noise1
	 
	Function for getting 1D noise.
	 
	@param _x - float x coord 
	@return (float) - value of noise at x
	*/
	virtual float noise1(const float _x) = 0;
	
	/*
	virtual public ZNoise::noise2
	 
	Function for getting 2D noise.
	 
	@param _x - float x coord
	@param _y - float y coord
	@return (float) - value of noise at (x,y)
	*/
	virtual float noise2(const float _x, const float _y) = 0;
	
	/*
	virtual public ZNoise::noise3
	 
	Function for getting 3D noise.
	 
	@param _x - float x coord
	@param _y - float y coord
	@param _z - float z coord
	@return (float) - value of noise at (x,y,z)
	*/
	virtual float noise3(const float _x, const float _y, const float _z) = 0;

	/*
	virtual public ZNoise::noise4
	 
	Function for getting 4D noise.
	 
	@param _x - float x coord 
	@param _y - float y coord
	@param _z - float z coord
	@param _w - float w coord
	@return (float) - value of noise at (x,y,z,w)
	*/
	virtual float noise4(const float _x, const float _y, const float _z, const float _w) = 0;
};

#endif

