reman3/Rayman_X/cpa/tempgrp/TPG/Src/TPG_ClBk.cpp

964 lines
35 KiB
C++

////////////////////////////////////////////
//
// All CallBacks used by TPG
//
////////////////////////////////////////////
#include "StdAfx.h"
#define D_MSPrtSrc_StructureDefine
#include "ErO.h"
#include "MTH.h"
#include "TPG_ClBk.hpp"
#include "_Minterf.hpp"
#include "Tpg_Strg.hpp"
#include "TPG_Spri.hpp"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*
=======================================================================================
General function
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : Get a PrtSrc owner data in Editor data
Returns (PRT_tdstParticlesSource )
----------------------------------------------------------------------------------------
*/
PRT_tdstParticlesSource *fn_CB_p_stGetOwnerPrtSrc( CTL_Editor_Data *_p_clData )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
CTL_OwnerData *p_clOwnerData;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Function to get ParticlesSource Owner data",
"fn_CB_p_stGetOwnerPrtSrc",
E_ERROR_GRAVITY_FATAL,
"Ownerdata (PrtSrc) is NULL"
);
p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "PrtSrc" );
ERROR_ASSERT( p_clOwnerData != NULL );
return (PRT_tdstParticlesSource *) p_clOwnerData->m_pub_fn_pvGetDataPtr();
}
/*
----------------------------------------------------------------------------------------
Description : Check data passed to some call back
Returns (PRT_tdstParticlesSource )
----------------------------------------------------------------------------------------
*/
void fn_CB_vCheckData( CTL_Editor_Data *_p_clData )
{
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Function to check data",
"fn_CB_p_oCheckData",
E_ERROR_GRAVITY_FATAL,
"Data is NULL"
);
ERROR_ASSERT( _p_clData != NULL );
}
/*
----------------------------------------------------------------------------------------
Description : get and check current enum value of an enum data
----------------------------------------------------------------------------------------
*/
CTL_Editor_EnumElement *fn_CB_p_oGetCurrentEnumElement( CTL_Editor_Data *_p_clData )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
CTL_Editor_EnumElement *p_clEnumElement;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Function to retrieve current enum value",
"fn_CB_p_oGetCurrentEnumElement",
E_ERROR_GRAVITY_FATAL,
"Enum current value is NULL"
);
p_clEnumElement = ((CTL_Editor_EnumData*)_p_clData)->m_pclCurrentValue;
ERROR_ASSERT( p_clEnumElement != NULL );
return p_clEnumElement;
}
//////////////////////////////////////////////////
// Can Be Displayed CallBacks
//////////////////////////////////////////////////
//*** Probability for source generation mode *****
BOOL g_fn_bCallBackCanBeDisplayedSourceProbability( CTL_Editor_Control *_p_clControl )
{
CTL_OwnerData *p_clOwnerData;
unsigned char *p_ucGenerationMode;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Is source generation probability displayed ?",
"g_fn_bCallBackCanBeDisplayedSourceProbability",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get generation mode is NULL"
);
p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "GenerationMode" );
ERROR_ASSERT( p_clOwnerData != NULL );
p_ucGenerationMode = (unsigned char*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
return (*p_ucGenerationMode == PRT_C_ucProbabilistGeneration);
}
//*** Nb Frames For source generation mode ****
BOOL g_fn_bCallBackCanBeDisplayedSourceNbFrames( CTL_Editor_Control *_p_clControl )
{
CTL_OwnerData *p_clOwnerData;
unsigned char *p_ucGenerationMode;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Is source nb frames generation displayed ?",
"g_fn_bCallBackCanBeDisplayedSourceNbFrames",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get generation mode is NULL"
);
p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "GenerationMode" );
ERROR_ASSERT( p_clOwnerData != NULL );
p_ucGenerationMode = (unsigned char*) p_clOwnerData->m_pub_fn_pvGetDataPtr();
return (*p_ucGenerationMode == PRT_C_ucCrenelGeneration);
}
//*** Nb Particles For source nb particles to generate mode
BOOL g_fn_bCallBackCanBeDisplayedSourceNbParticles( CTL_Editor_Control *_p_clControl )
{
CTL_OwnerData *p_clOwnerData;
unsigned char *p_ucNbParticlesMode;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Is source nb particles constant displayed ?",
"g_fn_bCallBackCanBeDisplayedSourceNbParticles",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get nb particles to generate mode is NULL"
);
p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "NbParticlesMode" );
ERROR_ASSERT( p_clOwnerData != NULL );
p_ucNbParticlesMode = (unsigned char*) p_clOwnerData->m_pub_fn_pvGetDataPtr();
return (*p_ucNbParticlesMode == PRT_C_ucConstantNb);
}
//*** Nb Particles Min/Max For source nb particles to generate mode
BOOL g_fn_bCallBackCanBeDisplayedSourceNbParticlesMinMax( CTL_Editor_Control *_p_clControl )
{
CTL_OwnerData *p_clOwnerData;
unsigned char *p_ucNbParticlesMode;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Is source nb particles min/max displayed ?",
"g_fn_bCallBackCanBeDisplayedSourceNbParticles",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get nb particles to generate mode is NULL"
);
p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "NbParticlesMode" );
ERROR_ASSERT( p_clOwnerData != NULL );
p_ucNbParticlesMode = (unsigned char*) p_clOwnerData->m_pub_fn_pvGetDataPtr();
return (*p_ucNbParticlesMode == PRT_C_ucProbabilistNb);
}
//*** Quad geometry for source ********************
BOOL g_fn_bCallBackCanBeDisplayedSourceGeometryQuad( CTL_Editor_Control *_p_clControl )
{
CTL_OwnerData *p_clOwnerData;
unsigned char *p_ucNbParticlesMode;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Is points 1 and 2 displayed ?",
"g_fn_bCallBackCanBeDisplayedSourceGeometryQuad",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get geometry mode is NULL"
);
p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "GeometryMode" );
ERROR_ASSERT( p_clOwnerData != NULL );
p_ucNbParticlesMode = (unsigned char*) p_clOwnerData->m_pub_fn_pvGetDataPtr();
return (*p_ucNbParticlesMode == PRT_C_ucQuad);
}
//*** Constant Life time ********************
BOOL g_fn_bCallBackCanBeDisplayedSourceConstantLifeTime( CTL_Editor_Control *_p_clControl )
{
CTL_OwnerData *p_clOwnerData;
unsigned char *p_ucMode;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Is constant life time displayed ?",
"g_fn_bCallBackCanBeDisplayedSourceConstantLifeTime",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get geometry mode is NULL"
);
p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "LifeMode" );
ERROR_ASSERT( p_clOwnerData != NULL );
p_ucMode = (unsigned char*) p_clOwnerData->m_pub_fn_pvGetDataPtr();
return (*p_ucMode == PRT_C_ucConstantLifeTime);
}
//*** Probabilist Life time ********************
BOOL g_fn_bCallBackCanBeDisplayedSourceProbabilistLifeTime( CTL_Editor_Control *_p_clControl )
{
CTL_OwnerData *p_clOwnerData;
unsigned char *p_ucMode;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Are min/max life time displayed ?",
"g_fn_bCallBackCanBeDisplayedSourceProbabilistLifeTime",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get geometry mode is NULL"
);
p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "LifeMode" );
ERROR_ASSERT( p_clOwnerData != NULL );
p_ucMode = (unsigned char*) p_clOwnerData->m_pub_fn_pvGetDataPtr();
return (*p_ucMode == PRT_C_ucProbabilistLifeTime);
}
//*** GameMaterials for system *********************
BOOL g_fn_bCallBackCanBeDisplayedSystemGameMaterials( CTL_Editor_Control * _p_clControl)
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Is GameMaterials displayed ?",
"g_fn_bCallBackCanBeDisplayedSystemGameMaterials",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get objects type is NULL");
CTL_OwnerData *p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "ObjectsType" );
ERROR_ASSERT( p_clOwnerData != NULL );
ACP_tdxIndex *p_xType = (ACP_tdxIndex*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
return( (*p_xType == PRT_C_xPointParticles) || (*p_xType == PRT_C_xSegmentParticles) );
}
//*** Sprites for system
BOOL g_fn_bCallBackCanBeDisplayedSystemSprites( CTL_Editor_Control * _p_clControl)
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Is sprites displayed ?",
"g_fn_bCallBackCanBeDisplayedSystemSprites",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get objects type is NULL");
CTL_OwnerData *p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "ObjectsType" );
ERROR_ASSERT( p_clOwnerData != NULL );
ACP_tdxIndex *p_xType = (ACP_tdxIndex*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
return( *p_xType == PRT_C_xSpriteParticles );
}
//*** Min Max points for environment box with generator not linked
BOOL g_fn_bCallBackCanBeDisplayedEnvBox( CTL_Editor_Control * _p_clControl)
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Are min and max points for box displayed ?",
"g_fn_bCallBackCanBeDisplayedEnvBox",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get environment type is NULL");
CTL_OwnerData *p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "EnvType" );
ERROR_ASSERT( p_clOwnerData != NULL );
unsigned long *p_ulType = (unsigned long*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
return( *p_ulType == PRT_C_ulAlignedBoxEnv );
}
//*** Sphere center for environment box with generator not linked
BOOL g_fn_bCallBackCanBeDisplayedEnvSphere( CTL_Editor_Control * _p_clControl)
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Is center for sphere displayed ?",
"g_fn_bCallBackCanBeDisplayedEnvSphere",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get environment type is NULL");
CTL_OwnerData *p_clOwnerData = _p_clControl->m_fn_pclGetEditedData()->m_pub_fn_pclGetOwnerDataWithName( "EnvType" );
ERROR_ASSERT( p_clOwnerData != NULL );
unsigned long *p_ulType = (unsigned long*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
return( *p_ulType == PRT_C_ulSphereEnv );
}
////////////////////////////////////////
// Data Changed CallBacks
////////////////////////////////////////
//*** data changed for generator ******
void g_fn_vCallBackDataChangedGenerator( CTL_Editor_Data *_p_clData, CTL_eUpdateReason _eReason, long _lUserReason )
{
CTL_OwnerData *p_clOwnerData;
CPA_PartGen_Generator *p_clGenerator;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"CallBack to notify generator data has changed",
"g_fn_vCallBackDataChangedGenerator",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get edited generator is NULL"
);
p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedGenerator" );
ERROR_ASSERT( p_clOwnerData != NULL );
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"CallBack to notify generator data has changed",
"g_fn_vCallBackDataChangedGenerator",
E_ERROR_GRAVITY_FATAL,
"Edited generator is NULL"
);
p_clGenerator = (CPA_PartGen_Generator*) p_clOwnerData->m_pub_fn_pvGetDataPtr();
ERROR_ASSERT( p_clGenerator != NULL );
p_clGenerator->fn_vNotifySave();
}
//*** data changed for Particle source ******
void fn_vCBPrtSrcDataChanged( CTL_Editor_Data *_p_clData, CTL_eUpdateReason _eReason, long _lUserReason )
{
CTL_OwnerData *p_clOwnerData;
CPA_PartGen_Source *p_oPrtSrc;
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"CallBack to notify Particle source data has changed",
"fn_vCBPrtSrcDataChanged",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get edited source is NULL"
);
p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedSource" );
ERROR_ASSERT( p_clOwnerData != NULL );
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"CallBack to notify Particle source data has changed",
"fn_vCBPrtSrcDataChanged",
E_ERROR_GRAVITY_FATAL,
"Edited particle source is NULL"
);
p_oPrtSrc = (CPA_PartGen_Source *) p_clOwnerData->m_pub_fn_pvGetDataPtr();
ERROR_ASSERT( p_oPrtSrc != NULL );
p_oPrtSrc->fn_vNotifySave();
}
//*** data changed for Particle system ******
void g_fn_vCallBackDataChangedSystem( CTL_Editor_Data *_p_clData, CTL_eUpdateReason _eReason, long _lUserReason )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"CallBack to notify system data has changed",
"g_fn_vCallBackDataChangedSystem",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get edited system is NULL");
CTL_OwnerData *p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedSystem" );
ERROR_ASSERT( p_clOwnerData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"CallBack to notify system data has changed",
"g_fn_vCallBackDataChangedSystem",
E_ERROR_GRAVITY_FATAL,
"Edited system is NULL");
CPA_PartGen_System *p_clSystem = (CPA_PartGen_System*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ERROR_ASSERT( p_clSystem != NULL );
p_clSystem->fn_vNotifySave();
}
//*** data changed for Particle environment ******
void g_fn_vCallBackDataChangedEnv( CTL_Editor_Data *_p_clData, CTL_eUpdateReason _eReason, long _lUserReason )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"CallBack to notify environment data has changed",
"g_fn_vCallBackDataChangedEnv",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get edited environment is NULL");
CTL_OwnerData *p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedEnv" );
ERROR_ASSERT( p_clOwnerData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"CallBack to notify environment data has changed",
"g_fn_vCallBackDataChangedEnv",
E_ERROR_GRAVITY_FATAL,
"Edited environment is NULL");
CPA_PartGen_Environment *p_clEnv = (CPA_PartGen_Environment*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ERROR_ASSERT( p_clEnv != NULL );
p_clEnv->fn_vNotifySave();
}
/////////////////////////////////////////////////////
// Data Changed Special CallBacks
/////////////////////////////////////////////////////
//*** Display generator for combo changed ***********
void g_fn_vCallBackDataChangedSpecialDisplayGenerator( CTL_Editor_Data *_p_clData, CTL_eUpdateReason _eReason, long _lUserReason )
{
if( _eReason == CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER )
g_pclInterface->m_pub_fn_p_clGetDocument()->m_pub_fn_vDisplayCurrentGenerator();
}
void g_fn_vCallBackDataChangedSpecialDisplayAll( CTL_Editor_Data *_p_clData, CTL_eUpdateReason _eReason, long _lUserReason )
{
if( _eReason == CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER )
g_pclInterface->m_pub_fn_p_clGetDocument()->m_pub_fn_vUpdateGenerator(g_pclInterface->m_pub_fn_p_clGetDocument()->m_pub_p_clCurrentGenerator );
}
///////////////////////////////////////////////////
// Read/Write Modification CallBacks
///////////////////////////////////////////////////
///// Check if source is loaded before it is used by generator /////////////
void g_fn_vModificationWriteGeneratorSource( CTL_Editor_Data *_p_clData )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
CTL_Editor_EnumElement *p_clEnumElement;
CPA_PartGen_Source *p_oPrtSrc;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
fn_CB_vCheckData( _p_clData );
p_clEnumElement = fn_CB_p_oGetCurrentEnumElement(_p_clData);
if( p_clEnumElement->m_pub_fn_lGetValue() == (long)0 )
{
ERROR_PREPARE_M
(
g_c_csPartGenModuleNameForErrors,
"Function to modify system associated to generator",
"g_fn_vModificationWriteGeneratorSystem",
E_ERROR_GRAVITY_WARNING,
"Set a NULL System"
);
p_oPrtSrc = (CPA_PartGen_Source *)p_clEnumElement->m_pub_fn_pvGetAdditionnalPointer();
ERROR_ASSERT( p_oPrtSrc != NULL );
if( p_oPrtSrc != NULL )
{
p_oPrtSrc->m_pub_fn_vLoadIfUnloaded();
p_clEnumElement->m_pub_fn_vSetValue( ((long) p_oPrtSrc->GetData()) );
}
}
}
///// Check system is loaded before it is used by generator /////////////
void g_fn_vModificationWriteGeneratorSystem( CTL_Editor_Data *_p_clData )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to modify system associated to generator",
"g_fn_vModificationWriteGeneratorSystem",
E_ERROR_GRAVITY_FATAL,
"Data is NULL");
ERROR_ASSERT( _p_clData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to modify system associated to generator",
"g_fn_vModificationWriteGeneratorSystem",
E_ERROR_GRAVITY_FATAL,
"Enum current value is NULL");
CTL_Editor_EnumElement *p_clEnumElement = ((CTL_Editor_EnumData*)_p_clData)->m_pclCurrentValue;
ERROR_ASSERT( p_clEnumElement != NULL );
if( p_clEnumElement->m_pub_fn_lGetValue() == (long)0 )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to modify system associated to generator",
"g_fn_vModificationWriteGeneratorSystem",
E_ERROR_GRAVITY_WARNING,
"Set a NULL System");
CPA_PartGen_System *p_clSystem = (CPA_PartGen_System*)p_clEnumElement->m_pub_fn_pvGetAdditionnalPointer();
ERROR_ASSERT( p_clSystem != NULL );
if( p_clSystem != NULL )
{
p_clSystem->m_pub_fn_vLoadIfUnloaded();
p_clEnumElement->m_pub_fn_vSetValue( ((long)p_clSystem->GetData()) );
}
}
}
///// Check environment is loaded before it is used by generator /////////////
void g_fn_vModificationWriteGeneratorEnvironment( CTL_Editor_Data *_p_clData )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to modify environment associated to generator",
"g_fn_vModificationWriteGeneratorEnvironment",
E_ERROR_GRAVITY_FATAL,
"Data is NULL");
ERROR_ASSERT( _p_clData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to modify environment associated to generator",
"g_fn_vModificationWriteGeneratorEnvironment",
E_ERROR_GRAVITY_FATAL,
"Enum current value is NULL");
CTL_Editor_EnumElement *p_clEnumElement = ((CTL_Editor_EnumData*)_p_clData)->m_pclCurrentValue;
ERROR_ASSERT( p_clEnumElement != NULL );
if( p_clEnumElement->m_pub_fn_lGetValue() == (long)0 )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to modify environment associated to generator",
"g_fn_vModificationWriteGeneratorEnvironment",
E_ERROR_GRAVITY_WARNING,
"Set a NULL environment");
CPA_PartGen_Environment *p_clEnv = (CPA_PartGen_Environment*)p_clEnumElement->m_pub_fn_pvGetAdditionnalPointer();
ERROR_ASSERT( p_clEnv != NULL );
if( p_clEnv != NULL )
{
p_clEnv->m_pub_fn_vLoadIfUnloaded();
p_clEnumElement->m_pub_fn_vSetValue( (long)(p_clEnv->GetData()) );
}
}
}
///// Check environment is loaded before it is used by generator /////////////
void g_fn_vModificationWriteGeneratorLinkedGenerator( CTL_Editor_Data *_p_clData )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
CTL_Editor_EnumElement *p_clEnumElement;
CPA_PartGen_Generator *p_oLinkedGen;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
fn_CB_vCheckData( _p_clData );
p_clEnumElement = fn_CB_p_oGetCurrentEnumElement(_p_clData);
if( p_clEnumElement->m_pub_fn_lGetValue() == (long)0 )
{
p_oLinkedGen = (CPA_PartGen_Generator *) p_clEnumElement->m_pub_fn_pvGetAdditionnalPointer();
if( p_oLinkedGen != NULL )
{
//p_oLinkedGen->m_pub_fn_vLoadIfUnloaded();
g_pclInterface->fn_bLoadBaseObject( p_oLinkedGen );
p_clEnumElement->m_pub_fn_vSetValue( (long)(p_oLinkedGen->GetData()) );
/*
* todo : check for loop
*/
}
}
}
///// Read Nb frames generation using Nb frames total ///////////////////////////
void g_fn_vModificationReadSourceNbFramesGeneration( CTL_Editor_Data *_p_clData )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
PRT_tdstParticlesSource *p_stPrtSrc;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
fn_CB_vCheckData( _p_clData );
p_stPrtSrc = fn_CB_p_stGetOwnerPrtSrc( _p_clData );
((CTL_Editor_IntegerData *) _p_clData)->m_lCurrentValue -= (long) p_stPrtSrc->xNbFramesNoGeneration;
}
///// write nb frames total using nb frames generation ///////////////////////////
void g_fn_vModificationWriteSourceNbFramesGeneration( CTL_Editor_Data *_p_clData )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
PRT_tdstParticlesSource *p_stPrtSrc;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
fn_CB_vCheckData( _p_clData );
p_stPrtSrc = fn_CB_p_stGetOwnerPrtSrc( _p_clData );
((CTL_Editor_IntegerData *) _p_clData)->m_lCurrentValue += (long) p_stPrtSrc->xNbFramesNoGeneration;
}
//*** Get GameMaterial used by system with point or segment
void g_fn_vModificationReadSystemGameMaterials( CTL_Editor_Data *_p_clData )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to get GameMaterial from Point or Segment",
"g_fn_vModificationReadSystemGameMaterials",
E_ERROR_GRAVITY_FATAL,
"Data is NULL");
ERROR_ASSERT( _p_clData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to get GameMaterial from Point or Segment",
"g_fn_vModificationReadSystemGameMaterials",
E_ERROR_GRAVITY_FATAL,
"EnumElement is NULL");
CTL_Editor_EnumElement *p_clEnumElement = ((CTL_Editor_EnumData*)_p_clData)->m_pclCurrentValue;
ERROR_ASSERT( p_clEnumElement != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to get GameMaterial from Point or Segment",
"g_fn_vModificationReadSystemGameMaterials",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get objects type is NULL");
CTL_OwnerData *p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "ObjectsType" );
ERROR_ASSERT( p_clOwnerData != NULL );
ACP_tdxIndex *p_xType = (ACP_tdxIndex*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to get GameMaterial from Point or Segment",
"g_fn_vModificationReadSystemGameMaterials",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get edited system is NULL");
p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedSystem" );
ERROR_ASSERT( p_clOwnerData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to get GameMaterial from Point or Segment",
"g_fn_vModificationReadSystemGameMaterials",
E_ERROR_GRAVITY_FATAL,
"Edited system is NULL");
CPA_PartGen_System *p_clSystem = (CPA_PartGen_System*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ERROR_ASSERT( p_clSystem != NULL );
if( *p_xType == PRT_C_xPointParticles )
p_clEnumElement->m_pub_fn_vSetValue( (long)p_clSystem->m_pub_fn_hGetPointGameMaterial() );
if( *p_xType == PRT_C_xSegmentParticles )
p_clEnumElement->m_pub_fn_vSetValue( (long)p_clSystem->m_pub_fn_hGetSegmentGameMaterial() );
}
///// Create Point, Segment or Sprite for system //////////////////////
void g_fn_vModificationWriteSystemObjects( CTL_Editor_Data *_p_clData )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to create Point, Segment or Sprite",
"g_fn_vModificationWriteSystemObjects",
E_ERROR_GRAVITY_FATAL,
"Data is NULL");
ERROR_ASSERT( _p_clData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to create Point, Segment or Sprite",
"g_fn_vModificationWriteSystemObjects",
E_ERROR_GRAVITY_FATAL,
"EnumElement is NULL");
CTL_Editor_EnumElement *p_clEnumElement = ((CTL_Editor_EnumData*)_p_clData)->m_pclCurrentValue;
ERROR_ASSERT( p_clEnumElement != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to create Point, Segment or Sprite",
"g_fn_vModificationWriteSystemObjects",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get objects type is NULL");
CTL_OwnerData *p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "ObjectsType" );
ERROR_ASSERT( p_clOwnerData != NULL );
ACP_tdxIndex *p_xType = (ACP_tdxIndex*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to create Point, Segment or Sprite",
"g_fn_vModificationWriteSystemObjects",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get edited system is NULL");
p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedSystem" );
ERROR_ASSERT( p_clOwnerData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to create Point, Segment or Sprite",
"g_fn_vModificationWriteSystemObjects",
E_ERROR_GRAVITY_FATAL,
"Edited system is NULL");
CPA_PartGen_System *p_clSystem = (CPA_PartGen_System*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ERROR_ASSERT( p_clSystem != NULL );
if( *p_xType == PRT_C_xPointParticles )
p_clSystem->m_pub_fn_vSetObjectPoint( (GMT_tdxHandleToGameMaterial)p_clEnumElement->m_pub_fn_lGetValue() );
if( *p_xType == PRT_C_xSegmentParticles )
p_clSystem->m_pub_fn_vSetObjectSegment( (GMT_tdxHandleToGameMaterial)p_clEnumElement->m_pub_fn_lGetValue() );
if( *p_xType == PRT_C_xSpriteParticles )
{
if( p_clEnumElement->m_pub_fn_lGetValue() == 0 )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Function to create Point, Segment or Sprite",
"g_fn_vModificationWriteSystemObjects",
E_ERROR_GRAVITY_WARNING,
"Set a NULL Sprite !");
TPG_Sprite *p_clSprite = (TPG_Sprite*)p_clEnumElement->m_pub_fn_pvGetAdditionnalPointer();
ERROR_ASSERT( p_clSprite != NULL );
if( p_clSprite != NULL )
{
p_clSprite->m_pub_fn_vLoadSprite();
p_clEnumElement->m_pub_fn_vSetValue( (long)p_clSprite->m_pub_fn_hGetSprite() );
}
}
p_clSystem->m_pub_fn_vSetObjectSprite( (ACP_tdxHandleOfSprite)p_clEnumElement->m_pub_fn_lGetValue() );
}
}
///// Save min max point in environment or in generator linked //
void g_fn_vModificationWriteEnvBox( CTL_Editor_Data *_p_clData )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data min max points for environment",
"g_fn_vModificationWriteEnvBox",
E_ERROR_GRAVITY_FATAL,
"Data is NULL");
ERROR_ASSERT( _p_clData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data min max points for environment",
"g_fn_vModificationWriteEnvBox",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get edited environment is NULL");
CTL_OwnerData *p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedEnv" );
ERROR_ASSERT( p_clOwnerData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data min max points for environment",
"g_fn_vModificationWriteEnvBox",
E_ERROR_GRAVITY_FATAL,
"Edited environment is NULL");
CPA_PartGen_Environment *p_clEnv = (CPA_PartGen_Environment*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ERROR_ASSERT( p_clEnv != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data min max points for environment",
"g_fn_vModificationWriteEnvBox",
E_ERROR_GRAVITY_FATAL,
"Edited engine environment is NULL");
ERROR_ASSERT( p_clEnv->m_pri_p_stEnv != NULL );
if( p_clEnv->m_pri_p_clGenerator == NULL )
{
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_stEnv->stMinPoint)), (&(p_clEnv->m_pri_stMinPoint)) );
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_stEnv->stMaxPoint)), (&(p_clEnv->m_pri_stMaxPoint)) );
}
else
{
if( p_clEnv->m_pri_p_clGenerator->m_pub_fn_bGetLinkToEnv() )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data min max points for environment",
"g_fn_vModificationWriteEnvBox",
E_ERROR_GRAVITY_FATAL,
"Engine generator using edited environment is NULL");
ERROR_ASSERT( p_clEnv->m_pri_p_clGenerator->m_pri_hGenerator != NULL );
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_clGenerator->m_pri_hGenerator->stMinPoint)), (&(p_clEnv->m_pri_stMinPoint)) );
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_clGenerator->m_pri_hGenerator->stMaxPoint)), (&(p_clEnv->m_pri_stMaxPoint)) );
}
else
{
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_stEnv->stMinPoint)), (&(p_clEnv->m_pri_stMinPoint)) );
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_stEnv->stMaxPoint)), (&(p_clEnv->m_pri_stMaxPoint)) );
}
}
}
///// Save sphere center in environment or in generator linked ////
void g_fn_vModificationWriteEnvSphere( CTL_Editor_Data *_p_clData )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data center of sphere for environment",
"g_fn_vModificationWriteEnvSphere",
E_ERROR_GRAVITY_FATAL,
"Data is NULL");
ERROR_ASSERT( _p_clData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data center of sphere for environment",
"g_fn_vModificationWriteEnvSphere",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get edited environment is NULL");
CTL_OwnerData *p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedEnv" );
ERROR_ASSERT( p_clOwnerData != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data center of sphere for environment",
"g_fn_vModificationWriteEnvSphere",
E_ERROR_GRAVITY_FATAL,
"Edited environment is NULL");
CPA_PartGen_Environment *p_clEnv = (CPA_PartGen_Environment*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ERROR_ASSERT( p_clEnv != NULL );
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data center of sphere for environment",
"g_fn_vModificationWriteEnvSphere",
E_ERROR_GRAVITY_FATAL,
"Edited engine environment is NULL");
ERROR_ASSERT( p_clEnv->m_pri_p_stEnv != NULL );
if( p_clEnv->m_pri_p_clGenerator == NULL )
{
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_stEnv->stSphereCenter)), (&(p_clEnv->m_pri_stSphereCenter)) );
}
else
{
if( p_clEnv->m_pri_p_clGenerator->m_pub_fn_bGetLinkToEnv() )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Update engine data center of sphere for environment",
"g_fn_vModificationWriteEnvSphere",
E_ERROR_GRAVITY_FATAL,
"Engine generator using edited environment is NULL");
ERROR_ASSERT( p_clEnv->m_pri_p_clGenerator->m_pri_hGenerator != NULL );
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_clGenerator->m_pri_hGenerator->stMinPoint)), (&(p_clEnv->m_pri_stSphereCenter)) );
}
else
{
MTH3D_M_vCopyVector( (&(p_clEnv->m_pri_p_stEnv->stSphereCenter)), (&(p_clEnv->m_pri_stSphereCenter)) );
}
}
}
///////////////////////////////////////////////////////////////////////////////////
// Must be read_written CallBacks
///////////////////////////////////////////////////////////////////////////////////
//*** Is GameMaterial data of system is taken into account ************************
BOOL g_fn_bCallBackMustBeReadWrittenSystemGameMaterial( CTL_Editor_Data * _p_clData )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Is GameMaterial data taken into account ?",
"g_fn_bCallBackMustBeReadWrittenSystemGameMaterial",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get objects type is NULL");
CTL_OwnerData *p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "ObjectsType" );
ERROR_ASSERT( p_clOwnerData != NULL );
ACP_tdxIndex *p_xType = (ACP_tdxIndex*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
return( (*p_xType == PRT_C_xPointParticles) || (*p_xType == PRT_C_xSegmentParticles) );
}
//*** Is Sprite data of system is taken into account
BOOL g_fn_bCallBackMustBeReadWrittenSystemSprite( CTL_Editor_Data * _p_clData )
{
ERROR_PREPARE_M(g_c_csPartGenModuleNameForErrors,
"Is sprite data taken into account ?",
"g_fn_bCallBackMustBeReadWrittenSystemSprite",
E_ERROR_GRAVITY_FATAL,
"OwnerData to get objects type is NULL");
CTL_OwnerData *p_clOwnerData = _p_clData->m_pub_fn_pclGetOwnerDataWithName( "ObjectsType" );
ERROR_ASSERT( p_clOwnerData != NULL );
ACP_tdxIndex *p_xType = (ACP_tdxIndex*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
return( *p_xType == PRT_C_xSpriteParticles );
}
//ROMTEAM Bugs Correction (Cristian Stegaru 24/03/98)
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : g_fnCanISelectThisItemCallBack
// Date : 98-03
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description : this function is called from a combobox when a selection is changed
// if the selected item is valid approve the selection
// Author : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
int g_fnCanISelectThisItemCallBack (CTL_Editor_Data * p_clData, CTL_Editor_EnumElement *pNewElement)
{
ASSERT (pNewElement);
CString csSelectedString = pNewElement->m_pub_fn_csGetElementName();
if ("No Element" == csSelectedString)
return 1;
ASSERT (p_clData);
CString csDataName = p_clData->m_pub_fn_csGetDataName ();
if ("Environment" != csDataName)
return 1;
//get the current generator
CTL_OwnerData *p_clOwnerData = p_clData->m_pub_fn_pclGetOwnerDataWithName( "EditedGenerator" );
ASSERT( p_clOwnerData != NULL );
CPA_PartGen_Generator *p_clGenerator = (CPA_PartGen_Generator*)( p_clOwnerData->m_pub_fn_pvGetDataPtr() );
ASSERT (p_clGenerator);
ASSERT (g_pclInterface->m_clDocument.m_pub_p_clCurrentGenerator == p_clGenerator);
CString csCurrentGeneratorName = p_clGenerator->GetName ();
CPA_PartGen_Environment *pSelectedEnv = (CPA_PartGen_Environment*)pNewElement->m_pub_fn_pvGetAdditionnalPointer();
ASSERT (pSelectedEnv);
PRT_tdstParticlesEnvironment *pSelectedEngEnv = pSelectedEnv->m_pub_fn_p_stGetEnv();
//check every generator to see if the environment is already used
CPA_BaseObjectList * p_clList = g_pclInterface->GetMainWorld()->fn_p_oGetOriginalObjectList(C_szPartGenGeneratorName);
CPA_PartGen_Generator *p_Generator = NULL;
Position pos = p_clList->GetHeadPosition();
while (pos != NULL)
{
p_Generator = (CPA_PartGen_Generator *)p_clList->GetNext (pos);
ASSERT (p_Generator);
if (p_Generator->GetName() == csCurrentGeneratorName) //don't count the current generator
continue;
tdxHandleToParticleGenerator pEngGenerator = p_Generator->m_pub_fn_hGetGenerator();
if (NULL == pEngGenerator)
continue;
PRT_tdstParticlesEnvironment *pEngEnv = pEngGenerator->p_stPrtEnv;
if (NULL == pEngEnv)
continue;
if (pSelectedEngEnv == pEngEnv)
{
AfxMessageBox ("This environment is already used.\nPlease, select another one.");
return 0;
}
}
return 1;
}
//ENDROMTEAM Bugs Correction (Cristian Stegaru)