/*
 =======================================================================================
  Name        : TPG_OSrc.hpp
 
  Author      : vincent lhullier            Date :20/03/98
 
  Description : definition of ParticleSource editor object
 =======================================================================================
 */

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#ifndef _TPG_OSRC_HPP_
#define _TPG_OSRC_HPP_
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

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

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#include "ACP_Base.h"
#include "ITF.h"
#include "PRT.h"
#include "CTL.h"

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

class CPA_PartGen_MyDocument;

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

/*
 =======================================================================================
	Constants 
 =======================================================================================
 */
#define TPG_C_tdxDefaultParticlesNumber 100

/*
 =======================================================================================
	CPA_PartGen_Source class 
 =======================================================================================
 */
class CPA_PartGen_Source : public CPA_SaveObject
{
  public:
	CPA_PartGen_Source( CString );
	CPA_PartGen_Source( CString, PRT_tdstParticlesSource *_p_stPrtSrc = NULL, BOOL _bIsLoaded = TRUE );
	~CPA_PartGen_Source();

	//virtual functions
	virtual long GetDataType(void);
	virtual void *GetData(void);
	virtual CString fn_csComputeReferencedSectionName(const CString _csNewName);

	static void m_s_fn_vCallBackSaveSource( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName, void *_p_vData, SCR_tde_Ntfy_Action _eAction );

	BOOL m_pub_fn_vLoadIfUnloaded();

	PRT_tdstParticlesSource * m_pub_fn_p_stGetSource() {return m_pri_p_stPrtSrc;}
	void m_pub_fn_vSetSource( PRT_tdstParticlesSource* _p_stPrtSrc );


	//CString m_pub_fn_csGetObjectName();


	void	m_pub_fn_vSetGenerationMode( short _wIndex );
	long	m_pub_fn_lGetGenerationMode();
	double	m_pub_fn_dGetGenerationProba();
	long	m_pub_fn_lGetNbNoGeneration();
	long	m_pub_fn_lGetNbGeneration();

	///////////////////////////////////////////////////////
	// Nb Particles to Generate Mode and parameters
	void	m_pub_fn_vSetNbGenerateMode( short _wIndex );
	long	m_pub_fn_lGetNbGenerateMode();
	long	m_pub_fn_lGetNbToGenerate();
	long	m_pub_fn_lGetNbMax();
	long	m_pub_fn_lGetNbMin();

	/////////////////////////////////////////////////////
	// Geometry Mode and parameters
	void	m_pub_fn_vSetGeometryMode( short _wIndex );
	long	m_pub_fn_lGetGeometryMode();
	double	m_pub_fn_dGetSrcPt1X();
	double	m_pub_fn_dGetSrcPt1Y();
	double	m_pub_fn_dGetSrcPt1Z();
	double	m_pub_fn_dGetSrcPt2X();
	double	m_pub_fn_dGetSrcPt2Y();
	double	m_pub_fn_dGetSrcPt2Z();
	double	m_pub_fn_dGetSrcPt3X();
	double	m_pub_fn_dGetSrcPt3Y();
	double	m_pub_fn_dGetSrcPt3Z();


	/////////////////////////////////////////////////
	// Link Mode
	void	m_pub_fn_vSetLinkMode( short _wIndex );
	long	m_pub_fn_lGetLinkMode();

	//////////////////////////////////////////////
	// Speed and speed Range
	void	m_pub_fn_vSetSpeed( double _dSpeed );
	double	m_pub_fn_dGetSpeed();
	void	m_pub_fn_vSetSpeedRange( double _dSpeedRange );
	double	m_pub_fn_dGetSpeedRange();


	CPA_PartGen_MyDocument *m_pub_fn_p_clGetDocument();

  	CTL_Editor_DataList		m_pub_clDataList;

  /*
   * private data members
   */
  private:
	PRT_tdstParticlesSource *m_pri_p_stPrtSrc;

	//GMT_tdxHandleToGameMaterial m_pri_hGameMaterial;
	//ACP_tdxHandleOfSprite m_pri_hSprite;

  /*
   * private methods
   */
  private:
	void m_pri_fn_vFillDataList();
	void m_pri_fn_vSaveSource( SCR_tdst_File_Description* );
	//void m_pri_fn_vSetInternalParticle();
};

#endif //_TPG_OSRC_HPP_
