// SpotLightProps.cpp : implementation file
//

#include "stdafx.h"
#include "mfc gos.h"
#include "SpotLightProps.h"


/////////////////////////////////////////////////////////////////////////////
// CSpotLightProps dialog


CSpotLightProps::CSpotLightProps(CWnd* pParent /*=NULL*/)
	: CDialog(CSpotLightProps::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSpotLightProps)
	m_Alpha = 0.0f;
	m_Blue = 0.0f;
	m_Green = 0.0f;
	m_Intensity = 0.0f;
	m_PosX = 0.0f;
	m_PosY = 0.0f;
	m_PosZ = 0.0f;
	m_DirX = 0.0f;
	m_DirY = 0.0f;
	m_DirZ = 0.0f;
	m_Spread = 0.0f;
	m_Red = 0.0f;
	m_InnerRange = 0.0f;
	m_OuterRange = 0.0f;
	//}}AFX_DATA_INIT
}


void CSpotLightProps::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSpotLightProps)
	DDX_Text(pDX, IDC_ALPHA, m_Alpha);
	DDX_Text(pDX, IDC_BLUE, m_Blue);
	DDX_Text(pDX, IDC_GREEN, m_Green);
	DDX_Text(pDX, IDC_INTENSITY, m_Intensity);
	DDX_Text(pDX, IDC_POSX, m_PosX);
	DDX_Text(pDX, IDC_POSY, m_PosY);
	DDX_Text(pDX, IDC_POSZ, m_PosZ);
	DDX_Text(pDX, IDC_DIRX, m_DirX);
	DDX_Text(pDX, IDC_DIRY, m_DirY);
	DDX_Text(pDX, IDC_DIRZ, m_DirZ);
	DDX_Text(pDX, IDC_SPREADANGLE, m_Spread);
	DDX_Text(pDX, IDC_RED, m_Red);
	DDX_Text(pDX, IDC_INNERRANGE2, m_InnerRange);
	DDX_Text(pDX, IDC_OUTERRANGE2, m_OuterRange);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSpotLightProps, CDialog)
	//{{AFX_MSG_MAP(CSpotLightProps)
		// NOTE: the ClassWizard will add message map macros here
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSpotLightProps message handlers
void CSpotLightProps::SetData(MLRSpotLight *light)
{
	m_Intensity = light->GetIntensity();
	light->GetColor(m_Red,m_Green,m_Blue);
	Point3D pos;
	UnitVector3D dir;
	light->GetInWorldDirection(dir);
	light->GetInWorldPosition(pos);
	m_PosX=pos.x;
	m_PosY=pos.y;
	m_PosZ=pos.z;
	m_DirX=dir.x;
	m_DirY=dir.y;
	m_DirZ=dir.z;

	m_InnerRange=light->GetFalloffNear();
	m_OuterRange=light->GetFalloffFar();

	Stuff::Radian Angle;
	light->GetSpreadAngle(&Angle);
	Stuff::Degree deg;
	deg=Angle;
	m_Spread=deg.angle;
}

void CSpotLightProps::SetData(MLRProjectLight *light)
{
	m_Intensity = light->GetIntensity();
	light->GetColor(m_Red,m_Green,m_Blue);
	Point3D pos;
	UnitVector3D dir;
	light->GetInWorldDirection(dir);
	light->GetInWorldPosition(pos);
	m_PosX=pos.x;
	m_PosY=pos.y;
	m_PosZ=pos.z;
	m_DirX=dir.x;
	m_DirY=dir.y;
	m_DirZ=dir.z;

	m_InnerRange=light->GetFalloffNear();
	m_OuterRange=light->GetFalloffFar();

	Stuff::Radian Angle;
	light->GetSpreadAngle(&Angle);
	Stuff::Degree deg;
	deg=Angle;
	m_Spread=deg.angle;
}

void CSpotLightProps::GetData(MLRSpotLight *Light)
{
	Light->SetIntensity(m_Intensity);
	Light->SetColor(m_Red,m_Green,m_Blue);
	Vector3D dir(m_DirX,m_DirY,m_DirZ);
	Point3D pos(m_PosX,m_PosY,m_PosZ);
	Stuff::LinearMatrix4D mat(pos);
	mat.AlignLocalAxisToWorldVector(dir,Stuff::Z_Axis,Stuff::Y_Axis,Stuff::X_Axis);
	Light->SetLightToWorldMatrix(mat);
	Stuff::Radian Angle;
	Stuff::Degree deg;
	deg=m_Spread;
	Angle=deg;
	Light->SetSpreadAngle(Angle);

	Light->SetFalloffDistance(m_InnerRange, m_OuterRange);
}

void CSpotLightProps::GetData(MLRProjectLight *pLight)
{
	pLight->SetIntensity(m_Intensity);
	pLight->SetColor(m_Red,m_Green,m_Blue);
	Vector3D dir(m_DirX,m_DirY,m_DirZ);
	Point3D pos(m_PosX,m_PosY,m_PosZ);
	Stuff::LinearMatrix4D mat(pos);
	mat.AlignLocalAxisToWorldVector(dir,Stuff::Z_Axis,Stuff::Y_Axis,Stuff::X_Axis);
	pLight->SetLightToWorldMatrix(mat);
	Stuff::Radian Angle;
	Stuff::Degree deg;
	deg=m_Spread;
	Angle=deg;
	pLight->SetSpreadAngle(Angle);

	pLight->SetFalloffDistance(m_InnerRange, m_OuterRange);
}

