reman3/Rayman_X/cpa/tempgrp/OLG/inc/LightObj.hpp

224 lines
8.8 KiB
C++

/*
///////////////////////////////////////////////////////////////////////////////////////////////////
// Description : WPObj.hpp
//
// Definition of the Light editors objects
//
///////////////////////////////////////////////////////////////////////////////////////////////////
// inherit from : CPA_Object
// CPA_EdMot<ACP_tdxHandleOfLink>
///////////////////////////////////////////////////////////////////////////////////////////////////
// Creation date: 11 feb 1997 Author: J Thénoz
///////////////////////////////////////////////////////////////////////////////////////////////////
// Modification date: Author:
//
//
//
//
///////////////////////////////////////////////////////////////////////////////////////////////////
*/
#ifndef __WPOBJECT_HPP__
#define __WPOBJECT_HPP__
//----------------------------------------------------------------------
// Definition of the name of the models
static CString csSpotModelName = "Spot";
static CString csSphericalModelName = "Spherical";
static CString csParallelModelName = "Parallel";
static CString csAmbientModelName = "Ambient";
//CHINA WFQ (MT) 16/02/98 {
static CString csParallelBoxModelName = "ParallelBox";
//ENDCHINA WFQ }
//ROMTEAM Z_Light Ionut Grozea 01-05-1998
static CString csZModelName = "Z_Light";
//ENDROMTEAM Z_Light Ionut Grozea 01-05-1998
//ANNECY jt {
static CString csFogModelName = "Fog";
//ENDANNECY jt }
//----------------------------------------------------------------------
class DiaLight;
class Light_Interface;
class Light : public CPA_SaveObject, public CPA_EdMot<GLI_tdxHandleToLight>
{
protected:
static Light_Interface* ms_poInterface;
static DiaLight* ms_poDiaLight; // dialog
static BOOL ms_bNotifyHeader; // header of this file is already notify
static BOOL ms_bStopNotification; // Stop notification
static CPA_List<CPA_SectionObject> ms_oListOfSectionObject;// List of all the sector sections
BOOL m_b3DsMaxLight; // light created with 3DsMax
BOOL m_bLightOn; // The light is on ?
BOOL m_bModify; // the light has been changed since last load
CPA_SuperObject* m_poSuperObject; // Super Object
CPA_SectionObject* m_poMatrixSection;
CPA_List<CPA_SuperObject> m_oSectorList; // list of affected sectors
CPA_List<CPA_SectionObject> m_oListOfSectorSection; // list of sector SectionObject
float m_fIntensity; // light intensity ( 0-10 )
long m_lType; // type of the light
//ROMTEAM BlendRLI (Ionut Grozea 24/02/98)
long m_lIsTypePaint; // is type of the light Paint
//ENDROMTEAM BlendRLI (Ionut Grozea)
public:
CPA_SuperObject* m_poNearSuperObject; // near edit objetct
CPA_SuperObject* m_poFarSuperObject; // far edit object
//CHINA WFQ (MT) 16/02/98 {
CPA_SuperObject* m_poInterSuperObject;
CPA_SuperObject* m_poExterSuperObject;
//ENDCHINA WFQ }
BOOL m_bSelect; // Is this light selected ?
//--- static
static void fn_vInitObject (void);
static void fn_vSetDialog ( DiaLight* poDiaLight, Light_Interface* pInterface );
static DiaLight* fn_pGetDialog ( void ) { return ms_poDiaLight; }
static void fn_vSetNotifyHeader (BOOL bNotifyHeader) { ms_bNotifyHeader=bNotifyHeader; }
static void fn_vStopNotification (BOOL bStopNotification) { ms_bStopNotification = bStopNotification; }
static Light_Interface* GetInterface (void) { return ms_poInterface; }
static void fn_vInitListOfSectionObject (void);
static void fn_vFreeListOfSectionObject (void);
static CPA_SectionObject* fn_poFindSectionObject ( CPA_SuperObject* poSector );
static void fn_vUpdateSectorSection (void);
// load save
static SCRIPT_tdeReturnValue CallBackLoad (FILE *p_fFile, char *szAction, char *szParams[], SCRIPT_tdeAction cType);
static void fn_vCallbackHeader ( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName, void *_p_vData,SCR_tde_Ntfy_Action _eAction );
static void fn_vCallbackSave ( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName, void *_p_vData,SCR_tde_Ntfy_Action _eAction );
static void fn_vCallBackSaveSector ( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName, void *_p_vData,SCR_tde_Ntfy_Action _eAction );
static void fn_vCallbackSaveMatrix ( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName, void *_p_vData,SCR_tde_Ntfy_Action _eAction );
Light(CPA_MainWorld *p_oMainWorld, CPA_ObjectDLLBase *p_oDLL, CString csFileName );
Light(CPA_MainWorld *p_oMainWorld, CPA_ObjectDLLBase *p_oDLL, GLI_tdxHandleToLight hEngineLight, CString csName, CString csFileName, CString csSectionName );
Light( Light& rLight);
~Light();
//--- data
long GetDataType (void);
void* GetData (void);
//--- get
long fn_lGetType (void) { return m_lType; }
CPA_List<CPA_SuperObject>* fn_pGetSectorList ( void ) { return &m_oSectorList; }
BOOL fn_vAddSector ( CPA_SuperObject* poObject );
BOOL fn_bIsAffectedSector ( CPA_SuperObject* poSuperSector ) { return m_oSectorList.Find(poSuperSector)!=NULL; }
CPA_SuperObject* GetSuperObject (void) { return m_poSuperObject; }
CPA_SectionObject* GetMatrixSection (void) { return m_poMatrixSection; }
BOOL fn_bIs3DsMaxLight (void) { return m_b3DsMaxLight; }
BOOL fn_bIsLightOn (void) { return m_bLightOn; }
BOOL fn_bIsModify (void) { return m_bModify; }
//--- set
void SetSuperObject ( CPA_SuperObject* poSuperObject ) { m_poSuperObject = poSuperObject; }
void Set3DsMaxLight (BOOL b3DsMaxLight) { m_b3DsMaxLight=b3DsMaxLight; }
void fn_vSetLightOn (BOOL bOn) { m_bLightOn=bOn; }
void fn_vSetModify ( BOOL bModify ) { m_bModify=bModify; }
//--- Save notify
void fn_vUpDateSectorSection (void);
void fn_vNotifySave (void);
void fn_vNotifyUnSave (void);
void fn_vNotifyRestore (void);
void fn_vNotifyRename (void);
void fn_vUpdateReference (CPA_SaveObject *pReferencedObject);
//--- color -> control edit manager
void fn_vSetColor ( GEO_tdxColorValue xR, GEO_tdxColorValue xG, GEO_tdxColorValue xB, GEO_tdxColorValue xA );
void fn_vGetColor ( GEO_tdxColorValue* xR, GEO_tdxColorValue* xG, GEO_tdxColorValue* xB, GEO_tdxColorValue* xA );
//--- intensity
void fn_vSetIntensity ( float fIntensity ) { m_fIntensity = fIntensity; }
float fn_fGetIntensity (void) { return m_fIntensity; }
//--- intensity -> control edit manager
void fn_vSetLightIntensity ( float& fIntensity );
//--- alpha / near-far -> control edit manager
void fn_vSetLightAlpha ( MTH_tdxReal& xLittleAlpha, MTH_tdxReal& xBigAlpha );
void fn_vSetLightNearFar ( MTH_tdxReal& xNear, MTH_tdxReal& xFar );
//CHINA WFQ (MT) 16/02/98 {
void fn_vSetLight_Intensity_Min_Max ( MTH_tdxReal& xIntensity_Min, MTH_tdxReal& xIntensity_Max );
void fn_vSetLight_Inter_Min_Pos ( MTH3D_tdstVector& xInter_Min_Pos);
void fn_vSetLight_Inter_Max_Pos ( MTH3D_tdstVector& xInter_Max_Pos);
void fn_vSetLight_Exter_Min_Pos ( MTH3D_tdstVector& xExter_Min_Pos);
void fn_vSetLight_Exter_Max_Pos ( MTH3D_tdstVector& xExter_Max_Pos);
//ENDCHINA WFQ }
//--- change radius of lights
void fn_vSetMouseControl (MTH3D_tdstVector* pstTranslation, BOOL bModifNearRadius, BOOL bModifFarRadius );
//--- On/Off
void fn_vSetOnOff (BOOL bState);
BOOL fn_bGetOnOff (void);
//ROMTEAM BlendRLI (Ionut Grozea 24/02/98)
BOOL fn_bIsPaint(void);
BOOL fn_bIsAlphaLight(void);
BOOL fn_bIsNoAlphaLight(void);
void fn_vSetTypePaint();
void fn_vSetLightForAlpha();
void fn_vSetTypeNormal();
//ENDROMTEAM BlendRLI (Ionut Grozea)
//ROMTEAM color lights Ionut Grozea 10-08-1998
void SetMultiColor();
void Set2Colors();
//ENDROMTEAM color lights Ionut Grozea 10-08-1998
//--- On decor
void fn_vSetOnDecor (BOOL bState);
BOOL fn_bGetOnDecor (void);
//---- selection of light
void fn_vSelect (void);
void fn_vUnSelect (BOOL bDraw=TRUE);
//--- draw edit objects
void fn_vDrawEditObject (void);
//--- light move
void fn_vOrientLight ( MTH3D_tdstVector* pstVertex );
//--- Paint sectors
void fn_vPaintSector (BOOL bColor=TRUE);
//--- Compute sectors
ACP_tdxBool fn_bSphericalLightAffectSector(HIE_tdxHandleToSuperObject hSuperSector);
void fn_vComputeSector (void);
void fn_vComputeSector ( MTH3D_tdstVector* pstVertex );
//--- Update light from .lg2 file
void fn_vUpdateLight (BOOL bComputeRLI=TRUE,BOOL bUpdateScreen=TRUE);
void *GetEngineStruct() { return GetStruct(); };
//------------------------------- compute motor object
void fn_vSetEngineMatrix (BOOL bDraw=TRUE);
//--- Referenced light ?
BOOL fn_bReferenced (void) { return m_oSectorList.GetCount()>0; }
protected :
void fn_vSetNearFar ( MTH_tdxReal xNear, MTH_tdxReal xFar );
// color a sector
void fn_vColorSector ( CPA_SuperObject* poSuperSector, tdeLocalColor eColor );
// Is pSector see pIsVisibleSector ?
BOOL fn_bIsSectorVisible ( CPA_SuperObject *pSector, CPA_SuperObject *pIsVisibleSector);
// Check if engine sector limit
BOOL fn_bCheckEngineLimit (CPA_SuperObject* poSuperObject);
};
extern CPA_List<Light> g_ListLight;
#endif //__OBJECT_HPP__