// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010  Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

#include "std_afx.h"
#include "object_viewer.h"
#include "collision_zone_dlg.h"
#include "editable_range.h"
#include "particle_dlg.h"
#include "start_stop_particle_system.h"

/////////////////////////////////////////////////////////////////////////////
// CCollisionZoneDlg dialog

// standard constructor
CCollisionZoneDlg::CCollisionZoneDlg(CParticleWorkspace::CNode *ownerNode, NL3D::CPSZone *zone, CParticleDlg *particleDlg)
	: _Zone(zone),
	  _Node(ownerNode),
	  _ParticleDlg(particleDlg)
{
	nlassert(particleDlg);
	//{{AFX_DATA_INIT(CCollisionZoneDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CCollisionZoneDlg::init(sint x, sint y, CWnd *pParent)
{
	RECT r;
	Create(IDD_ZONE, pParent);
	GetClientRect(&r);
	r.top += y; r.bottom += y;
	r.right += x; r.left += x;
	MoveWindow(&r);

	_BounceFactorDlg = new CEditableRangeFloat(std::string("BOUNCE_FACTOR"), _Node, 0.f, 1.f);
	pushWnd(_BounceFactorDlg);
	_BounceFactorWrapper.Z = _Zone;
	_BounceFactorDlg->setWrapper(&_BounceFactorWrapper);
	_BounceFactorDlg->init(60, 35, this);
	
	m_CollisionBehaviour.SetCurSel((uint) _Zone->getCollisionBehaviour() );

	if (_Zone->getCollisionBehaviour() != NL3D::CPSZone::bounce)
	{
		_BounceFactorDlg->EnableWindow(FALSE);	
	}

	UpdateData();

	ShowWindow(SW_SHOW);
}


void CCollisionZoneDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCollisionZoneDlg)
	DDX_Control(pDX, IDC_COLLISION_BEHAVIOUR, m_CollisionBehaviour);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCollisionZoneDlg, CDialog)
	//{{AFX_MSG_MAP(CCollisionZoneDlg)
	ON_CBN_SELCHANGE(IDC_COLLISION_BEHAVIOUR, OnSelchangeCollisionBehaviour)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCollisionZoneDlg message handlers

void CCollisionZoneDlg::OnSelchangeCollisionBehaviour() 
{
	UpdateData();
	_Zone->setCollisionBehaviour( (NL3D::CPSZone::TCollisionBehaviour) m_CollisionBehaviour.GetCurSel());
	_BounceFactorDlg->EnableWindow(_Zone->getCollisionBehaviour() == NL3D::CPSZone::bounce ? TRUE : FALSE);	
	_ParticleDlg->StartStopDlg->resetAutoCount(_Node);
}