//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007-2008)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: point_light.inl
//      Краткое описание: point light
//


namespace gs
{
	inline PointLight::PointLight()
	{
		attenuation = 0;
		range = 0;
		volume.setRadius(range);
		diffuse_color = math::Vect3(1, 1, 1);
		ambient_color = math::Vect3(0, 0, 0);
		specular_color = math::Vect3(1, 1, 1);
		position = math::Vect3(0, 0, 0);
		volume.setPosition(position);
		light_state = DRSL_OFF;
	};

	inline PointLight::PointLight(const DRSLIGHTSTATE& light_state, const math::Vect3& position, 
		const float range, const math::Vect3& diffuse_color, 
		const math::Vect3& specular_color, const math::Vect3& ambient_color, 
		const float attenuation)
	{
		this->diffuse_color = diffuse_color;
		this->specular_color = specular_color;
		this->ambient_color = ambient_color;
		this->attenuation = 0;
		this->range = range;
		this->light_state = light_state;
		volume.setRadius(range);
		this->position = position;
		volume.setPosition(position);
	};

	inline PointLight::~PointLight()
	{

	};

	inline void PointLight::setLightState(const DRSLIGHTSTATE& new_light_state)
	{
		light_state = new_light_state;
	};

	inline const DRSLIGHTSTATE& PointLight::getLightState() const
	{
		return light_state;
	};

	inline void PointLight::toggleLightState()
	{
		light_state = static_cast<DRSLIGHTSTATE>(1 - static_cast<int>(light_state));
	};

	inline void PointLight::setAmbientColor(const math::Vect3& new_color)
	{
		ambient_color = new_color;
	};

	inline const math::Vect3& PointLight::getAmbientColor() const
	{
		return ambient_color;
	};

	inline void PointLight::setDiffuseColor(const math::Vect3& new_color)
	{
		diffuse_color = new_color;
	};

	inline const math::Vect3& PointLight::getDiffuseColor() const
	{
		return diffuse_color;
	};

	inline void PointLight::setSpecularColor(const math::Vect3& new_color)
	{
		specular_color = new_color;
	};

	inline const math::Vect3& PointLight::getSpecularColor() const
	{
		return specular_color;
	};

	inline void PointLight::setRange(const float new_range)
	{
		range = new_range;
		volume.setRadius(new_range);
	};

	inline const float PointLight::getRange() const
	{
		return range;
	};

	inline void PointLight::setAttenuation(const float new_attenuation)
	{
		attenuation = new_attenuation;
	};

	inline const float PointLight::getAttenuation() const
	{
		return attenuation;
	};

	inline const math::Sphere& PointLight::getVolume() const
	{
		return volume;
	};

	inline void PointLight::setPosition(const math::Vect3& new_position)
	{
		position = new_position;
		volume.setPosition(position);
	};

	inline const math::Vect3& PointLight::getPosition() const
	{
		return position;
	};
};