/* (c) 1999-2000 Tino Schwarze, see COPYING for details */
/**@pkg cADSEColor */
/**
 * class for a tupel of ambient, diffuse, specular and emissivecolor
 * (basically just contains four cColor objects)
 *
 * #include "cADSEColor.hh"
 *
 * @pkgdoc cADSEColor
 */

#ifndef cADSEColor_hh
#define cADSEColor_hh

// get cColor declaration
#include "cColor.hh"

/**
 * a simple class for representing ambient, diffuse, specular and
 * emissive color
 *
 * There should be no use in deriving from this class. It's basically
 * a beefed-up struct with four cColor objects in it.
 */
class cADSEColor {
//LIFETIME
public:
	/**
	 * default constructor w/ optional initialization
	 	* @param amb cColor object for ambient color
	 	* @param diff cColor object for diffuse color
	 	* @param spec cColor object for specular color
		* @param em cColor object for emissive color
	 	*/
	cADSEColor (
		const cColor &amb = cColor(),
		const cColor &diff = cColor(),
		const cColor &spec = cColor(),
		const cColor &em = cColor());

	/**
	 * destructor
	 	*/
	~cADSEColor ();

// ACCESS
	/**
	 * provide read-only access to ambient component
	 	* @return const reference to cColor
		*/
	const cColor &Ambient () const;

	/**
	 * provide write access to ambient color
	 	* @return reference to cColor
		*/
	cColor &wAmbient ();

	/**
	 * provide read-only access to diffuse component
	 	* @return const reference to cColor
		*/
	const cColor &Diffuse () const;

	/**
	 * provide write access to diffuse color
	 	* @return reference to cColor
		*/
	cColor &wDiffuse ();

	/**
	 * provide read-only access to emissive component
	 	* @return const reference to cColor
		*/
	const cColor &Specular () const;

	/**
	 * provide write access to specular color
	 	* @return reference to cColor
		*/
	cColor &wSpecular ();

	/**
	 * provide read-only access to emissive component
	 	* @return const reference to cColor
		*/
	const cColor &Emissive () const;

	/**
	 * provide write access to emissive color
	 	* @return reference to cColor
		*/
	cColor &wEmissive ();

protected:
	cColor mAmbient;
	cColor mDiffuse;
	cColor mSpecular;
	cColor mEmissive;
};

#endif	//ifndef cADSEColor_hh

