/*
///////////////////////////////////////////////////////////////////////////////////////////////////
// Description : Inter.hpp
//
// Interface DLL class.
// This class is implement the DLL class.
//
///////////////////////////////////////////////////////////////////////////////////////////////////
// inherit from CPA_ObjectDLLBase
//
///////////////////////////////////////////////////////////////////////////////////////////////////
// Creation date: 21 jan 1997                        Author: J Thénoz
///////////////////////////////////////////////////////////////////////////////////////////////////
// Modification date:			                      Author:
//
//
//
//
///////////////////////////////////////////////////////////////////////////////////////////////////
*/

#ifndef __WPINTERF_HPP__
#define __WPINTERF_HPP__

class Light;
class DiaLight;
class Geometry3D;

//-----------------------------------------------------------
// Definition of the types objects
//-----------------------------------------------------------
#define C_ucLightCursor 1974


//----------------------------------------------------------------------
// Definition of file extensions
#define c_Light_3DsMax_File_extension "lg2"
#define c_Light_File_extension "lgt"
//----------------------------------------------------------------------

class Light_ListBySector 
{
private:
	CPA_SuperObject		*m_pSector;
	CPA_BaseObjectList	m_stList;

public:

	Light_ListBySector(CPA_SuperObject *pSector);
	~Light_ListBySector();

	CPA_SuperObject		* GetSector	(void)	{ return m_pSector; }
	CPA_BaseObjectList	* GetList	(void)	{ return &m_stList; }

	void fn_vUpdateList (void);
};

//----------------------------------------------------------
// Object DLL interface class
//----------------------------------------------------------
class Light_Interface : public CPA_ObjectDLLBase
{
private :
	static tdstKeyboardActionDef ms_a_stLightKeys[]; // keyboard mapping

	//--- Flags
	BOOL        m_bModifInsertOk;  // Force the acception of the AcceptModifInsert message
	BOOL        m_bRunEngine;
	BOOL		m_bStopDraw;
	BOOL		m_bGotoMouseMode;   // The cursor show where the light is going to be orient
	BOOL        m_bMainDll;         // This DLL is the active one when popup menu is called
	BOOL		m_bExistSaveFile;	// The save file exist
	BOOL		m_bFirstBeforeEditor; // Before editor is first executed
	BOOL		m_bLoadLight;			// create light in loading function
	BOOL		m_bSaveRLI;				// RLI have change between previous save
	BOOL		m_bNotifyIPO;			// Notify IPO when save
	BOOL		m_bSkipOnModifDelete;	// Don't execute OnModifDelete call
	BOOL		m_bOrientLight;			// We want to orient a light
	BOOL		m_bModifyAll;			// All lights are modified
	BOOL		m_bDialogOnScreen;		// is the dialog display on the screen ?
	BOOL		m_bClearStatus;			// Status line must be cleaned
//ROMTEAM SelectMode (Ionut Grozea 25/02/98)
	CString		m_csLastSelectionType;
	BOOL		m_bSelectModeIsLight;		
	BOOL		m_bPreviousLinkMode;
//ENDROMTEAM SelectMode (Ionut Grozea)

//ROMTEAM RealLights (Ionut Grozea 05/03/98)
	BOOL	m_bEditOnlyRealLights;
//ENDROMTEAM RealLights (Ionut Grozea)
//ROMTEAM color lights Ionut Grozea 10-08-1998
	BOOL m_bIs2ColorMode;
//ROMTEAM color lights Ionut Grozea 10-08-1998
	//--- General
	Light*			m_o_ModifRadiusLight;	// We modify the radius of this light
	CSplitFrame*	m_p_oSplitFrameLight;		// Main frame of the editor
	CPA_DialogList* m_p_oDialogList;			// dialog list

	//--- popup
	Light*			m_poRClicLight;				// we make a R button action on this light
	Light*			m_poLight;					// Light that we edit

	//--- CPA_List
	CPA_List<Light> m_ListMovingLight;			// light that move
	CPA_List<Light> m_ListOfInvalideLight;		// light that have an invalide matrix during loadings
	CPA_List<CPA_SuperObject> m_ListDeleteLightBeforeEngine;
	CPA_List<CPA_SuperObject> m_ListOfParentDeleteLightBeforeEngine;
	CPA_List<CPA_SuperObject> m_oModifSectorList; // list of modified sector
	CPA_List<Light> m_oErrorSectorLightList;	// list of lights that can't be updated because over 50 lights/sectors
	CPA_KeyActionConfiguration*  m_poKeyboard;
	CImageList m_oIconList;
//ROMTEAM RealLights (Ionut Grozea 05/03/98)
	CPA_List<CPA_SuperObject> m_ListDeleteLight;
	CPA_List<CPA_SuperObject> m_ListOfParentDeleteLight;
//ENDROMTEAM RealLights (Ionut Grozea)

	// Shaitan
	CPA_List<Light_ListBySector>	m_stListBySector;


public:
	Light_Interface(void);
	~Light_Interface(void);

//ROMTEAM RealLights (Ionut Grozea 05/03/98)
	void fn_vRefreshAllLights();
	void fn_bSetRealLight(BOOL bFlag) {m_bEditOnlyRealLights = bFlag;}
	BOOL fn_bGetRealLight() { return m_bEditOnlyRealLights ;}
	void RefreshOnlyRealLights();
	void fn_vSetCursor ( UINT i );
///ENDROMTEAM RealLights (Ionut Grozea)
//ROMTEAM color lights Ionut Grozea 10-08-1998
	BOOL fn_bGetColorMode() {return m_bIs2ColorMode;}
	void fn_SetColorMode(BOOL bValue) {m_bIs2ColorMode = bValue;}
//ROMTEAM color lights Ionut Grozea 10-08-1998
//ROMTEAM selection Ionut Grozea 14-08-1998
	CPA_DialogList* fn_GetDialogList (void){return m_p_oDialogList;}
//ROMTEAM selection Ionut Grozea 14-08-1998

	BOOL fn_bRunEngine (void) { return m_bRunEngine; }

	CPA_BaseObjectList * fn_pGetListBySector (CPA_SuperObject *pSector);
	void fn_vUpdateListsBySector();

//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
//										Dll Base
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------

//    BOOL fn_bPreTranslateMessage(MSG * /*p_stMsg*/);
    void fn_vJustAfterRegistered(void);
    void fn_vConstruct(void);
//    void fn_vRefreshDatas(void);
//	void fn_vLevelChanges (void);
	void fn_vLevelHasChanged (void);

// Editor Modifs
	void fn_vOnModifDelete	(CPA_List<EDT_SaveParents> *pListObjects, tdeTypeModif eType, tdeStatus eStatus);
	void fn_vOnModifParent	(CPA_List<EDT_SaveParents> *pListObjects, tdeTypeModif eType, tdeStatus eStatus);
	void fn_vOnModifCopy	(CPA_List<EDT_SaveParents> *pListObjects, tdeTypeModif eType, tdeStatus eStatus);
//	void fn_vOnModifName	(CPA_SuperObject *pEdObj, CString csInitalName, CString csFinalName, tdeTypeModif eType, tdeStatus eStatus);
//	void fn_vOnSelect		(CPA_SuperObject *pEdObj, tdeTypeModif eType, tdeStatus eStatus);

	void fn_vOnModifInsert	(CPA_SuperObject *pEdObj, CPA_SuperObject *pParent,
									 tdstPosition *p_stPosition, tdeTypeModif eType, tdeStatus eStatus);

// Moves
	void fn_vOnModifMove (CPA_List<EDT_SavePos> *pListObjects, CPA_List<EDT_SaveGlobalPos> *pListConcerned, tdeTypeModif eType, tdeStatus eStatus);
	void fn_vOnBeginMove (CPA_List<CPA_SuperObject> *pListObjects, CPA_List<CPA_SuperObject> *pListConcerned, tdeStatus eStatus);
	void fn_vOnMoving	 (CPA_List<CPA_SuperObject> *pListObjects, CPA_List<CPA_SuperObject> *pListConcerned, tdeStatus eStatus);

// permission
//	BOOL fn_bAcceptModifDelete		(CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus);
//	BOOL fn_bAcceptModifParent		(CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus);
//	BOOL fn_bAcceptModifCopy		(CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus);
//	BOOL fn_bAcceptModifTranslate	(CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus);
//	BOOL fn_bAcceptModifRotate		(CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus);
//	BOOL fn_bAcceptModifInsert		(CPA_SuperObject *pEdObj, CPA_SuperObject *pParent, tdeStatus eStatus);
	BOOL fn_bAcceptModifScale		(CPA_SuperObject *pEdObj, tdeStatus eStatus)					{ return FALSE; }
//	BOOL fn_bAcceptModifName		(CPA_SuperObject *pEdObj, tdeStatus eStatus);
//	BOOL fn_bAcceptMultiSelect		(void);

// to precise selection
	tdeTypeAnswer fn_bAcceptSelect	(CPA_SuperObject *pEdObj, ACP_tdxIndex xIndex, HIE_tdstPickInfo *pPicking, tdeStatus eStatus);

// orient
	BOOL fn_bAcceptOrientInstance	(CPA_SuperObject *pEdObj);
	BOOL fn_bOnClickOrientPosition	(CPA_SuperObject *pEdObj, tdstPosition *pOrientPosition);
	BOOL fn_bOnOrientingObject		(CPA_SuperObject *pEdObj, tdstPosition *pOrientPosition);
	BOOL fn_bOnEndOrientObject		(CPA_SuperObject *pEdObj, tdstPosition *pOrientPosition);


/*===========================================================================
	Dialog List
=========================================================================*/

//	BOOL fn_bSetCustomTest		(CPA_DialogList *pDialog);
//	BOOL fn_bCustomTestFunction (CString csCurrentType, CString csTestName, CPA_BaseObject *pEdObj);


//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
//										Editor Base
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------

// focus
//    void fn_vHasLostFocus	(void);
//    BOOL fn_bHasGainedFocus	(void);
// engine - editor
	void fn_vBeforeEngine (void);
	void fn_vBeforeEditor (void);
// engine
//    BOOL fn_bAcceptToRunEngine		(void);
//    BOOL fn_bAcceptToRunTimerEngine	(void);
// end appli
//	void fn_vJustBeforeClosing	(void);
//	BOOL fn_bAcceptToExit		(void);
// save
//    BOOL fn_bAcceptToSave		(void);
	void fn_vBeforeSaveAll      (void);
    void fn_vAfterSaveAll       (void);
// keys
//CPA2 Corneliu Babiuc 21-05-98
	BOOL _OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags);
//END CPA2 Corneliu Babiuc 21-05-98
	BOOL _OnKeyUp	(UINT nChar, UINT nRepCnt, UINT nFlags);
// mouse
//	BOOL _OnMouseMove	  (UINT nFlags, tdstMousePos *p_stPos, MTH3D_tdstVector *p_stVect);
//    BOOL _OnLButtonDblClk (UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo);
//    BOOL _OnRButtonDblClk (UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo);
    BOOL _OnLButtonDown	  (UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo);
    BOOL _OnRButtonDown	  (UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo);
    BOOL _OnLButtonUp	  (UINT nFlags, tdstMousePos *p_stPos);
//	BOOL _OnRButtonUp	  (UINT nFlags, tdstMousePos *p_stPos);
// command
//	BOOL _OnCommand			(UINT IDCmdMsg);
//	BOOL _OnUpdateCommandUI	(UINT uiID, CCmdUI *pCmdUI);
// dragdrop
//    BOOL _OnDragDropEnd			(WPARAM wParam, LPARAM lParam);
//    BOOL _OnDragDropMove		(WPARAM wParam, LPARAM lParam);
//    BOOL _OnDragDropLooseFocus	(WPARAM wParam, LPARAM lParam);
//    BOOL _OnDragDropGainFocus	(WPARAM wParam, LPARAM lParam);
// add objects to draw
//	void fn_vAddObjectsToDraw	(GLD_tdstViewportAttributes *p1, GLI_tdxHandleToLight p2);
//	void fn_vAddObjectsToDraw2	(GLD_tdstViewportAttributes *p1, GLI_tdxHandleToLight p2);

/*===========================================================================
	Reinit
=========================================================================*/

//	void fn_vOnChangeDevice (void);
//	void fn_vOnChangeWorld	(void);
//	void fn_vOnChangeRoot	(void);

/*===========================================================================
	Models
=========================================================================*/

//	BOOL fn_bCanDeleteThisModel	(CString csListName, CString csModelType, CString csModelName);
//	void fn_vOnAddModelToList	(CPA_ObjectDLLBase *pOwnerDLL, CString csListName, CString csModelName, tdeTypeModif eType);

/*===========================================================================
	for Dialog List
=========================================================================*/

	CPA_BaseObject  * GetDialogSelection (CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDrawMode);
	void			  GetListsForDialog  (CPA_DialogList *pDialog);

	BOOL fn_bOnSelChangeHierarchyTree	(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject, CPA_BaseObject *pSelectedParent);
	BOOL fn_bOnDblClkHierarchyTree		(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject, CPA_BaseObject *pSelectedParent);
	BOOL fn_bOnSelChangeListObjects		(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject, BOOL bUnselect);
	BOOL fn_bOnDblClkListObjects		(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject);
//	BOOL fn_bCanDragItemInHierarchyTree	(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pObjectToDrag);
//	BOOL fn_bCanDropItemInHierarchyTree	(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pObjectToDrop, CPA_BaseObject *pTarget);
//	BOOL fn_bOnDragDropInHierarchyTree	(CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pObject, CPA_BaseObject *pTarget);
//	BOOL fn_bOnSelChangeComboList		(CPA_DialogList *pDialog, CString csTypeName);
//	BOOL fn_bOnButtonTest				(CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDraw);

	BOOL fn_bOnKeyDownInDialog	(CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDraw,
										 CPA_BaseObject *pSelectedObject, UINT nChar, UINT nRepCnt, UINT nFlags);
//	BOOL fn_bOnKeyUpInDialog	(CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDraw,
//										 CPA_BaseObject *pSelectedObject, UINT nChar, UINT nRepCnt, UINT nFlags);
//	void fn_vInitDefaultParameters		(CPA_DialogList *pDialog);

//	void fn_vSetANewTest				(CPA_DialogList *pDialog, CString csCurrentList);
	BOOL fn_bTestFunction				(CString csCurrentType, CString csTestName, CPA_BaseObject *pEdObj);

//	CString GetInfoForListItem	(CPA_DialogList *pDialog, CString csListName, CPA_BaseObject *pObject);
//	int		GetIconForListItem	(CPA_DialogList *pDialog, CString csListName, CPA_BaseObject *pObject);
	int		GetStateForListItem (CPA_DialogList *pDialog, CString csListName, CPA_BaseObject *pObject);

//	CPA_BaseObject * GetTreeNodeFirstChild	(CPA_DialogList *pDialog, CString csListName, CPA_BaseObject *pParent);
//	CPA_BaseObject * GetTreeNodeNextChild	(CPA_DialogList *pDialog, CString csListName, CPA_BaseObject *pParent, CPA_BaseObject *pCurrentChild);
//	int				 GetIconForTreeItem		(CPA_DialogList *pDialog, CString csListName, CPA_BaseObject *pObject);
//	int				 GetStateForTreeItem	(CPA_DialogList *pDialog, CString csListName, CPA_BaseObject *pObject);




/*===========================================================================
	Current Editor
=========================================================================*/

	tdePermission fn_eAcceptNewEditor	(CPA_EditorBase *pNewEditor);

//	BOOL fn_bCanActivateEditor	(CPA_List<CPA_BaseObject> *pParams);
	void fn_vOnActivateEditor	(CPA_List<CPA_BaseObject> *pParams, BOOL bBackActivated=FALSE);

//	BOOL fn_bCanCloseEditor		(void);
	void fn_vOnCloseEditor		(void);

//	void fn_vBackActiveMe			(void *pMyData);
//	void fn_vEraseWalkDataStructure (void *pMyData);

/*===========================================================================
	Dialog Bar - Mircea Dunka 31 Aug. 1998
=========================================================================*/
	void fn_vDefineDlgBarBtnIcon (tde_DlgBarCategory wCategory, tds_DlgBarBtn *_pDlgBarBtn);

/*===========================================================================
	SubMenus and PopupMenu
=========================================================================*/

    BOOL fn_bDefineSubMenu		(EDT_SubMenu *_p_oEDTSubMenu);
    void _OnSubMenuCommand		(EDT_SubMenu *_p_oEDTSubMenu,UINT uiMsgID);

	BOOL fn_bDefinePopupMenu	(EDT_PopUpMenu *pPopup, CPA_List<CPA_SuperObject> *pSelection, BOOL bAsCurrentEditor);
	void _OnPopUpMenuCommand	(UINT m_IDCmdMsg);

/*===========================================================================
	Coherence
=========================================================================*/

//	BOOL fn_bOnInvalidateLink	(CPA_BaseObject *pOwner, CPA_BaseObject *pReferencedObject, BOOL bDestroyed);
//	void fn_vOnRestoreLink		(CPA_BaseObject *pOwner, CPA_BaseObject *pReferencedObject);
//	void fn_vOnModifyChild		(CPA_BaseObject *pOwner, CPA_BaseObject *pReferencedObject, unsigned long _ulData);


/*===========================================================================
	Draw Flag
=========================================================================*/

//	void fn_vOnModifDrawFlag (CPA_SuperObject *pSuperObject);

/*===========================================================================
	General Purpose
=========================================================================*/

    long OnQueryAction	(CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM);
//    long OnQueryInfos	(CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM);
//    long OnQueryOpen	(CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM);
//    long OnQueryClose	(CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM);

/*===========================================================================
	Reachable Objects
=========================================================================*/

//	BOOL fn_bLoadBaseObject		(CPA_BaseObject *p_oObject);


//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
//									Object DllBase
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------

// hierarchy
//	CPA_SuperObject *	GetNewEditorInstance		(HIE_tdxHandleToSuperObject pEngineInstance);
	void				fn_vBuildNewEditorInstance	(CPA_SuperObject *pEditorInstance, HIE_tdxHandleToSuperObject pEngineInstance);
//	void				fn_vUpdateEditorInstance	(CPA_SuperObject *pEditorInstance, HIE_tdxHandleToSuperObject pEngineInstance);
//	BOOL				fn_bCanHandleThisType		(long lEngineType);
// models & instances
	void			fn_vInitListByType		(CPA_World *pWorld);
	void			fn_vInitListsOfModels	(void);
//	void			fn_vSaveListModels		(CString csListName, CPA_List<EDT_Model> *pListModels);
//	CString			fn_csLoadListModels		(void);
//	EDT_Model		* GetNewModel			(CString csListName);
//	BOOL			fn_bCanLoadNewModel		(CString csListName);
//	BOOL			fn_bCanDeleteModel		(CString csListName);
//	BOOL			fn_bCanSaveListModels	(CString csListName);
//	BOOL			fn_bCanLoadListModels	(void);
//	void			fn_vOnLoadNewModel		(CString csListName, EDT_Model *pNewModel);

	CPA_SuperObject * GetNewInstance		 (CString csTypeName, CString csModelName, CPA_SuperObject *pParent);
	tdeTypeSO		  GetTypeInstance		 (CString csTypeName, CString csModelName);
//ANNECY Shaitan EmptySectors 25/02/98
	tdeSaveStatus	  GetStatusInstance		 (CString csTypeName, CString csModelName);
//ENDANNECY Shaitan EmptySectors
	CPA_SuperObject * GetParentForInsertion	 (CString csTypeName, CString csModelName, tdstPosition *p_stPosition);
//	BOOL			fn_bChooseInsertPosition (CPA_SuperObject *pNewInstance, CPA_SuperObject *pParent, tdstPosition *p_stPosition);

// objects
	CPA_BaseObject * GetNewObject (CString csObjectFile, CString csObjectName, FILE *p_fFile, CPA_MainWorld *p_oMainWorld);
	CPA_BaseObject * Duplicate	  (CPA_BaseObject *pObject, CPA_SuperObject *pNewSuperObject);

	CPA_SuperObject * GetCopyOfProtectedChild (CPA_SuperObject *pInitialChild, CPA_SuperObject *pNewOwner);

// permissions for EvtEditor
//	BOOL fn_bAcceptAsParent			(CPA_BaseObject *pChild, CPA_BaseObject *pParent);
//	BOOL fn_bAcceptAsChild			(CPA_BaseObject *pParent, CPA_BaseObject *pChild);

// for bounding volumes
//	void fn_vComputeBoundingVolume(CPA_BaseObject *pObject);
	ACP_tdxHandleOfObject fn_hGetBoundingVolume(CPA_BaseObject *_pObj);

// when insertion is canceled
//	void fn_vOnCancelInsertion (CPA_SuperObject *pInstance);

// Shaitan Scale {
	// to scale editor objects
 	CPA_SuperObject * GetVisualSuperObject (CPA_SuperObject *pInstance);
//End Shaitan Scale }

	BOOL fn_bIsExistFile (void) { return m_bExistSaveFile;  }
	void fn_vSetExistFile (BOOL bExistSaveFile) { m_bExistSaveFile=bExistSaveFile; }

	// Redefinition
	EDT_Model * fn_pstLoadNewDescriptor (void);


//----------------------------------------------------------- Loading
	void fn_vLoadStaticLight (void);
	CPA_SuperObject* fn_pCreateNewLightFromEngineHandle ( GLI_tdxHandleToLight hStaticLight );

//-------------------------------------------------------- save preferences
	void fn_vSaveDialogsPreferences (void);

//----------------------------------------------------------- Edition
	void fn_vEdit (Light* poLight,BOOL bSelectInList=TRUE);
	void fn_vSetRLIDrawMask (BOOL bOnlyRLI );

//---------------------------------------------------------- Sector
	void fn_vAddModifSectorList ( CPA_List<CPA_SuperObject>* poList ) { m_oModifSectorList.AddTail(poList); }

//--------------------------------------------------- status line
	void fn_vSetClearStatus (BOOL bClearStatus) { m_bClearStatus = bClearStatus; }
	void fn_vClearStatus (void);

//--------------------------------------------------- other functions
	void fn_vComputeAbsoluteMatrix (CPA_SuperObject* psoWP);
	void fn_vComputeNewRelativeMatrix (HIE_tdxHandleToSuperObject _hSprObj);
	void fn_vComputeInsertMatrix (CPA_SuperObject* poInsertSuperObject, CPA_SuperObject* poFatherSuperObject );

//--------------------------------------- Get new graphical instances
	CPA_SuperObject* fn_pGetNewSpotGraphicObject		(GLI_tdstLight_ *p_stLight = NULL);
	CPA_SuperObject* fn_pGetNewSphericalGraphicObject	(GLI_tdstLight_ *p_stLight = NULL);
	CPA_SuperObject* fn_pGetNewParallelGraphicObject	(GLI_tdstLight_ *p_stLight = NULL);
	CPA_SuperObject* fn_pGetNewAmbientGraphicObject		(GLI_tdstLight_ *p_stLight = NULL);
	CPA_SuperObject* fn_pGetNewFogGraphicObject			(GLI_tdstLight_ *p_stLight = NULL);
	CPA_SuperObject* fn_pGetNewConeGraphicObject (void);
	CPA_SuperObject* fn_pGetNewSphereGraphicObject (void);

	CPA_SuperObject* fn_pGetNewCursorGraphicObject (GLI_tdstLight_ *p_stLight = NULL);

//CHINA WFQ (MT) 16-02-98 {
	CPA_SuperObject* fn_pGetNewParallelBoxGraphicObject	(void);
	CPA_SuperObject* fn_pGetNewBoxGraphicObject		(void);
//ENDCHINA WFQ }
//ROMTEAM Z_Light Ionut Grozea 01-05-1998
	CPA_SuperObject* fn_pGetNewZGraphicObject	(void);
//ENDROMTEAM Z_Light Ionut Grozea 01-05-1998
	inline void fn_vRefreshHierarchyList (void);


//------------------------------------ Edition
	void fn_vRefreshLight (Light* poLight=NULL, BOOL bDelete=FALSE, BOOL bDraw=TRUE );

	void fn_vRefreshGameLight (void);
	void fn_vRefreshGameLight (Light* poLight, BOOL bDelete=FALSE, BOOL bSaveRLI=TRUE);
	void fn_vMakeLightArray ( long* lNbLight, GLI_tdxHandleToLight* d_hLight );
	void fn_vSwitchOnLight ( Light* poLight, BOOL bOn );


//-------------------------- RLI
	void fn_vComputeRLI (BOOL bSave=TRUE);

	CString fn_csGetSaveFileName (void);	// return current file name

	void fn_vGiveProgressInfo(CString csMessage, signed char cPercentage, BOOL _bNoHighlight = TRUE );


protected :
	void fn_vPick ( ACP_tdxIndex* pxNbPicked, HIE_aDEF_stTabOfPickInfo& ra_stPickInfo, tdstMousePos *p_stPos);
	CPA_SuperObject* fn_pExplorePicking (ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stObject, long lTypeObject, ACP_tdxIndex* pxFindIndex=NULL );

	void fn_vInitListOfLightSectionSector (void);
	void fn_vDeleteInvalideLight (void);

	void fn_vCreate3DSMaxLights (void);

	// extract a reachable object from the list
	CPA_BaseObject* fn_pSelectLightParam ( CPA_List<CPA_BaseObject> *pParams );
	unsigned short fn_iKeyAction ( UINT cKey ) { return m_poKeyboard->mfn_uwKeyToAction(cKey); }
	void fn_vExistSaveFile (void);

	BOOL fn_bIs3DsMaxLight (void);
	void fn_vUpDateAllLight (void);

	void fn_vSaveRLIModifyIPO (void);

public:
//ROMTEAM color lights Ionut Grozea 10-08-1998
		void fn_vInitGameMaterial ( Geometry3D* poGeomObject, ACP_tdxHandleOfElement hElement, float fR, float fG, float fB );
//ENDROMTEAM color lights Ionut Grozea 10-08-1998

};

extern tdstDLLIdentity     g_stLightIdentity;


#endif // __WPINTERF_HPP__




