void CParticleEditor::play(CWorkspaceNode &node)
{
	if (isRunning(&node)) return;
	// NB : node must be stopped, no check is done
	nlassert(node.isLoaded());
	// if node not started, start it
	node.memorizeState();
	// enable the system to take the right date from the scene	
	node.getPSModel()->enableAutoGetEllapsedTime(true);
	node.getPSPointer()->setSystemDate(0.f);
	node.getPSPointer()->reactivateSound();
	node.getPSModel()->activateEmitters(true);
	if (node.getPSPointer()->getAutoCountFlag())
	{
		if (node.getResetAutoCountFlag())
		{
			// reset particle size arrays
			node.getPSPointer()->matchArraySize();
		}
		resetAutoCount(&node, false);
	}		
	
	// Set speed playback particle system
	node.getPSModel()->setEllapsedTimeRatio(_Speed);
}
//******************************************************************************************************
void CStartStopParticleSystem::play(CParticleWorkspace::CNode &node)
{
	if (isRunning(&node)) return;
	// NB : node must be stopped, no check is done
	nlassert(node.isLoaded());	
	// if node not started, start it				
	node.memorizeState();
	// enable the system to take the right date from the scene	
	node.getPSModel()->enableAutoGetEllapsedTime(true);		
	node.getPSPointer()->setSystemDate(0.f);
	node.getPSPointer()->reactivateSound();	
	node.getPSModel()->activateEmitters(true);
	if (node.getPSPointer()->getAutoCountFlag())
	{
		if (node.getResetAutoCountFlag())
		{
			// reset particle size arrays
			node.getPSPointer()->matchArraySize();
		}
		resetAutoCount(&node, false);	
	}		
	CSliderCtrl *sl = (CSliderCtrl *) GetDlgItem(IDC_ANIM_SPEED);	
	node.getPSModel()->setEllapsedTimeRatio(m_SpeedSliderPos * 0.01f);
	_ParticleDlg->ParticleTreeCtrl->suppressLocatedInstanceNbItem(node, 0);				
}
//******************************************************************************************************
void CStartStopParticleSystem::OnEnableAutoCount() 
{		
	nlassert(_ActiveNode);
	stop();
	bool autoCount = ((CButton *) GetDlgItem(IDC_ENABLE_AUTO_COUNT))->GetCheck() != 0;
	if (autoCount)
	{	
		CString caption;
		CString mess;
		caption.LoadString(IDS_PARTICLE_SYSTEM_EDITOR);
		mess.LoadString(IDS_ENABLE_AUTOCOUNT);
		if (MessageBox((LPCTSTR) mess, (LPCTSTR) caption, MB_OKCANCEL) != IDOK)
		{
			((CButton *) GetDlgItem(IDC_ENABLE_AUTO_COUNT))->SetCheck(0);
			return;
		}
		resetAutoCount(_ActiveNode);
	}
	enableAutoCount(autoCount);		
}
//******************************************************************************************************
void CStartStopParticleSystem::OnResetCount() 
{
	stop();
	resetAutoCount(_ActiveNode);	
}