// GUILight.h: interface for the GUILight class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GUILIGHT_H__98695BE0_C61E_4358_9A6C_E01EB6FFCDE1__INCLUDED_)
#define AFX_GUILIGHT_H__98695BE0_C61E_4358_9A6C_E01EB6FFCDE1__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "EdGUIObject.h"

namespace gosFX
{
	class Light;
};

class GUILight : public EdGUIObject  
{
protected:
	gosFX::Light *MyLight;
	void Copy(GUILight &obj);
	void UpdateMat();
	void AddToMap();
	void RemoveFromMap();
	void Clear();
	void SetToDefault();
public:
	virtual void Build()=0;
	RGBColor GetColor();
	void SetColor(RGBColor &col);
	Scalar GetIntensity();
	void SetIntensity(Scalar);
	
	void AssociateTo(gosFX::Light *light); 
	void AddPanel(CObjPanelDlg *pnl,UndoCommand **cmd);
	void Dissociate() 
		{  MyLight=NULL; InMap=false;}
	GUILight(CString name="Light");
	void UpdateVisibility(DWORD visflag) { SetHide(visflag&SHOW_LIGHTS?false:true);}
	~GUILight();

};


class GUIAmbientLight : public GUILight  
{
protected:
	void Copy(GUIAmbientLight &obj);
public:
	void AddPanel(CObjPanelDlg *pnl,UndoCommand **cmd);
	EdGUIObject *Clone();
	GUIAmbientLight(CString name="Ambient_Light");
	void Build();
	~GUIAmbientLight();
	CString GetTypeName() {return ("Ambient_Light");} 
	int GetUnSelIcon() {return ICON_AMBIENTLIGHT; }
	int GetSelIcon()   {return ICON_AMBIENTLIGHT; }
	void Draw(DrawInfo &dinf)  {}
	void DrawTag(DrawInfo &dinf, unsigned long tag_flags) {}
};

class GUIInfiniteLight : public GUILight  
{
protected:
	void Copy(GUIInfiniteLight &obj);
public:
	void AddPanel(CObjPanelDlg *pnl,UndoCommand **cmd);
	EdGUIObject *Clone();
	GUIInfiniteLight(CString name="Infinite_Light");
	void Build();
	~GUIInfiniteLight();
	CString GetTypeName() {return ("Infinite_Light");} 
	int GetUnSelIcon() {return ICON_INFINITELIGHT; }
	int GetSelIcon()   {return ICON_INFINITELIGHT; }
	void Draw(DrawInfo &dinf) {}
	void DrawTag(DrawInfo &dinf, unsigned long tag_flags) {}
};

class GUILookUpLight : public GUIInfiniteLight  
{
protected:
	void Copy(GUILookUpLight &obj) {return;}
public:
	void AddPanel(CObjPanelDlg *pnl,UndoCommand **cmd);
	EdGUIObject *Clone() { return NULL;}
	GUILookUpLight(CString name="LookUp_Light");
	void Build() {return;}
	~GUILookUpLight();
	CString GetTypeName() {return ("LookUp_Light");} 
	int GetUnSelIcon() {return ICON_LOOKUPLIGHT; }
	int GetSelIcon()   {return ICON_LOOKUPLIGHT; }
	void Draw(DrawInfo &dinf);
};


class GUIPointLight : public GUILight  
{
protected:
	void Copy(GUIPointLight &obj);
public:
	Scalar GetInnerRad();
	void SetInnerRad(Scalar);
	Scalar GetOuterRad();
	void SetOuterRad(Scalar);

	void AddPanel(CObjPanelDlg *pnl,UndoCommand **cmd);
	void Build();
	EdGUIObject *Clone();
	GUIPointLight(CString name="Point_Light",Point3D pnt=Point3D(0,0,0));
	~GUIPointLight();
	CString GetTypeName() {return ("Point_Light");} 
	int GetUnSelIcon() {return ICON_POINTLIGHT; }
	int GetSelIcon()   {return ICON_POINTLIGHT; }
	void Draw(DrawInfo &dinf);
};

class GUISpotLight : public GUIPointLight  
{
protected:
	void Copy(GUISpotLight &obj);
public:
	Scalar GetSpreadAngle();
	void SetSpreadAngle(Scalar);
	
	void AddPanel(CObjPanelDlg *pnl,UndoCommand **cmd);
	void Build();
	EdGUIObject *Clone();
	GUISpotLight(CString name="Spot_Light",Point3D pnt=Point3D(0,0,0));
	~GUISpotLight();
	CString GetTypeName() {return ("Spot_Light");} 
	int GetUnSelIcon() {return ICON_SPOTLIGHT; }
	int GetSelIcon()   {return ICON_SPOTLIGHT; }
	void Draw(DrawInfo &dinf);
};





#endif // !defined(AFX_GUILIGHT_H__98695BE0_C61E_4358_9A6C_E01EB6FFCDE1__INCLUDED_)
