reman3/Rayman_X/cpa/tempgrp/TIA/Src/EdIRDat.cpp

1291 lines
37 KiB
C++

// EdIRDat.cpp : implementation file
//
#include "stdafx.h"
#include "Defines.hpp"
#ifdef D_ED_IR_ACTIVE
#include "EdIRDat.hpp"
#include "EdIRWaW.hpp"
#include "EdIRIRD.hpp"
#include "EdIRBeEn.hpp"
#include "EdIRGlob.hpp"
#include "EdIR2Eng.hpp"
#include "EdIRStrg.hpp"
#include "EDACActr.hpp"
#include "EDACModl.hpp"
#include "_Actors.hpp"
#include "Ctl.h"
#include "WaW.h"
#include "x:\cpa\main\inc\_EditID.h"
#include "incAI.h"
#define C_OWNER_DATA_PARENT_ACTOR "Data_Parent_Actor"
#define C_OWNER_DATA_IS_IN_WATCH "Is In Watch"
//For array
#define C_OWNER_DATA_ASSOCIATED_CONTROL "Associated Control"
#define C_OWNER_DATA_BASE_ADDRESS "Base Address"
//For WAW
#define C_OWNER_DATA_WAW_DATA "WaW Data"
/**********************************************************************************/
void fn_vDelete(CTL_Editor_Data *pclData)
{
if(fn_bIsInWatch(pclData)==TRUE)
{
fn_vRemoveValueFromWatch(pclData);
}
delete pclData;
}
/**********************************************************************************/
void fn_vAddOwnerData(CTL_Editor_Data *pclData,EdActors_EditorActor *pclParentActor)
{
pclData->m_pub_fn_pclAddOwnerData((void *)pclParentActor,C_OWNER_DATA_PARENT_ACTOR);
pclData->m_pub_fn_pclAddOwnerData((long)FALSE,C_OWNER_DATA_IS_IN_WATCH);
pclData->m_pub_fn_pclAddOwnerData((void *)NULL,C_OWNER_DATA_ASSOCIATED_CONTROL);
pclData->m_pub_fn_pclAddOwnerData((void *)NULL,C_OWNER_DATA_BASE_ADDRESS);
pclData->m_pub_fn_pclAddOwnerData((void *)NULL,C_OWNER_DATA_WAW_DATA);
}
/**********************************************************************************/
EdActors_EditorActor *fn_pclGetParentActor(CTL_Editor_Data *pclData)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_PARENT_ACTOR);
if(pclOwnerData!=NULL)
return (EdActors_EditorActor *)(pclOwnerData->m_pub_fn_pvGetDataPtr());
else
return NULL;
}
/**********************************************************************************/
BOOL fn_bIsInWatch(CTL_Editor_Data *pclData)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_IS_IN_WATCH);
if(pclOwnerData!=NULL)
return (BOOL)(pclOwnerData->m_pub_fn_lGetData());
else
return FALSE;
}
/**********************************************************************************/
void fn_vSetInWatch(CTL_Editor_Data *pclData,BOOL bInWatch)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_IS_IN_WATCH);
if(pclOwnerData!=NULL)
pclOwnerData->m_pub_fn_vSetData((long)bInWatch);
}
/**********************************************************************************/
WAW_Data *fn_pclGetWatchData(CTL_Editor_Data *pclData)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_WAW_DATA);
if(pclOwnerData!=NULL)
return (WAW_Data *)(pclOwnerData->m_pub_fn_pvGetDataPtr());
else
return NULL;
}
/**********************************************************************************/
void fn_vSetWatchData(CTL_Editor_Data *pclData,WAW_Data *pclWatchData)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_WAW_DATA);
if(pclOwnerData!=NULL)
pclOwnerData->m_pub_fn_vSetDataPtr((void *)pclWatchData);
}
/**********************************************************************************/
CTL_Editor_Control *fn_pclGetAssociatedControl(CTL_Editor_Data *pclData)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_ASSOCIATED_CONTROL);
if(pclOwnerData!=NULL)
return (CTL_Editor_Control *)(pclOwnerData->m_pub_fn_pvGetDataPtr());
else
return NULL;
}
/**********************************************************************************/
void fn_vSetAssociatedControl(CTL_Editor_Data *pclData,CTL_Editor_Control *pclAssociatedControl)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_ASSOCIATED_CONTROL);
if(pclOwnerData!=NULL)
pclOwnerData->m_pub_fn_vSetDataPtr((void *)pclAssociatedControl);
}
/**********************************************************************************/
void *fn_pvGetBaseAddress(CTL_Editor_Data *pclData)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_BASE_ADDRESS);
if(pclOwnerData!=NULL)
return pclOwnerData->m_pub_fn_pvGetDataPtr();
else
return NULL;
}
/**********************************************************************************/
void fn_vSetBaseAddress(CTL_Editor_Data *pclData,void *pvBaseAddress)
{
CTL_OwnerData *pclOwnerData=pclData->m_pub_fn_pclGetOwnerDataWithName(C_OWNER_DATA_BASE_ADDRESS);
if(pclOwnerData!=NULL)
pclOwnerData->m_pub_fn_vSetDataPtr(pvBaseAddress);
}
/**********************************************************************************/
void fn_vIndexHasChanged(CTL_Editor_Data *pclDataBase,enum CTL_eUpdateReason eReason,long)
{
if(eReason==CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER)
{
//Gets associated control
CTL_Editor_Control *pclArrayControl=fn_pclGetAssociatedControl(pclDataBase);
if(pclArrayControl!=NULL)
{
//Gets associated data
CTL_Editor_Data *pclArrayData=pclArrayControl->m_fn_pclGetEditedData();
if(pclArrayData!=NULL)
{
//Gets selected index
ASSERT(pclDataBase->m_pub_fn_tdeGetDataType()==CTL_DATA_TYPE__INTEGER);
CTL_Editor_IntegerData *pclIndexData=(CTL_Editor_IntegerData *)pclDataBase;
long lIndex=pclIndexData->m_lCurrentValue;
//Gets base address of the array
void *pvBaseAddress=fn_pvGetBaseAddress(pclArrayData);
if(pvBaseAddress!=NULL)
{
tdstArray *pstArray=(tdstArray *)pvBaseAddress;
pclArrayData->m_fn_vSetMotorDataPtr(M_ARRAY_ELEMENT(pstArray,lIndex));
pclArrayData->m_fn_vGetMotorData();
pclArrayControl->m_fn_vUpdate();
}
else
{
ASSERT(FALSE);
}
}
else
{
ASSERT(FALSE);
}
}
else
{
ASSERT(FALSE);
}
}
}
/****************************************************************************/
void fn_vNotifyInitialValue(CTL_Editor_Data *pclDataBase,CTL_tdeUpdateReason eReason,long)
{
if(eReason==CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER)
{
//Gets parent for this data
EdActors_EditorActor *pclParentActor=fn_pclGetParentActor(pclDataBase);
CPA_Actor *pclActor=pclParentActor->m_pclActor;
// Shaitan => Check Save type
// check for save type
if (pclDataBase->m_pub_fn_csGetDataName().Find(g_c_csDsgVarSaveTypeText)!= -1)
{
// the actor is a model, but check anyway
if (!pclActor->m_fn_bIsAnInstance())
{
EdActors_EditorActorModel *pclModel = (EdActors_EditorActorModel *)(pclActor->m_fn_pclGetEditorActor());
POSITION pos = pclModel->m_clInstancesList.GetHeadPosition();
BOOL bAlways = FALSE;
BOOL bCommon = TRUE;
while (pos)
{
EdActors_EditorActorInstance *pclInstance = pclModel->m_clInstancesList.GetNext(pos);
// an always must have no save type
if (pclInstance->m_pclActor->m_fn_bIsAnAlways())
bAlways = TRUE;
// a level actor can have only "level" or "non" save type
else if (!pclInstance->m_pclActor->m_pub_fn_bIsCommon())
bCommon = FALSE;
}
if (bAlways)
{
CTL_Editor_EnumData *pData = (CTL_Editor_EnumData *) pclDataBase;
if (pData->m_pclCurrentValue->m_pub_fn_lGetValue() != 0)
{
MessageBox(NULL, "An always must not use any Save Type !!", "WARNING SAVE TYPE", MB_ICONEXCLAMATION);
pData->m_pclCurrentValue = pData->m_fn_pclGetEnumDescriptor()->GetHead();
pData->m_fn_vUpdateMotorData(eReason);
pData->m_pub_fn_pclGetParentControl()->m_fn_vUpdate();
}
}
// a level actor can have only "level" or "non" save type
else if (!bCommon)
{
CTL_Editor_EnumData *pData = (CTL_Editor_EnumData *) pclDataBase;
if (pData->m_pclCurrentValue->m_pub_fn_lGetValue() == SAI_ePlayerSaveCurrentValue)
{
int iRes = MessageBox(NULL, "This Save Type must be used only be the actors in fix !!\n Are you sure you want to keep this value ?", "WARNING SAVE TYPE", MB_ICONEXCLAMATION | MB_YESNO );
if (iRes == IDNO)
{
pData->m_pclCurrentValue = pData->m_pclOldValue;
pData->m_fn_vUpdateMotorData(eReason);
pData->m_pub_fn_pclGetParentControl()->m_fn_vUpdate();
}
}
}
}
}
// End Shaitan => Check Save type
if(pclActor->m_fn_bIsAnInstance())
{
pclActor->fn_vNotifySave();
}
else
{
EdActors_EditorActorModel *pclModel=(EdActors_EditorActorModel *)(pclActor->m_fn_pclGetEditorActor());
CPA_EdIR_Brain *pclBrain=pclModel->m_pclBrain;
pclBrain->m_fn_vSetModified(TRUE);
// Shaitan => Check Save type
if (pclDataBase->m_pub_fn_csGetDataName().Find(g_c_csDsgVarSaveTypeText) != -1)
{
COLORREF rBackGround = ((CTL_Editor_EnumData *)pclDataBase)->m_pclCurrentValue->m_pub_fn_lGetValue() ? RGB(255,100,200) : RGB(0,255,255);
pclDataBase->m_pub_fn_pclGetParentControl()->m_pub_fn_pclGetNameStatic()->m_pub_fn_vSetBackGroundColor(rBackGround, TRUE);
}
else if (pclDataBase->m_pub_fn_csGetDataName().Find(g_c_csDsgVarInitTypeText)!= -1)
{
COLORREF rBackGround = (((CTL_Editor_EnumData *)pclDataBase)->m_pclCurrentValue->m_pub_fn_lGetValue() != OTI_PlayerDead) ? RGB(255,100,0) : RGB(255,255,0);
pclDataBase->m_pub_fn_pclGetParentControl()->m_pub_fn_pclGetNameStatic()->m_pub_fn_vSetBackGroundColor(rBackGround, TRUE);
}
// End Shaitan => Check Save type
}
}
}
/*************************************************************************/
//return pointer in pcslValues
void fn_vGetLowInfoAboutDsgVar(CTL_Editor_Data *pclData,
CString &csName,
CString &csType,
CStringList *pcslValues)
{
//Updates data
pclData->m_fn_vGetMotorData();
//Gets Name
csName=pclData->m_pub_fn_csGetDataName();
//Tests if pclData is an array
void *pvBaseAddress=fn_pvGetBaseAddress(pclData);
if(pvBaseAddress!=NULL)
{
tdstArray *pstArray=(tdstArray *)pvBaseAddress;
long lNbElt=M_ARRAY_SIZE(pstArray);
CString csValue;
tdstGetSetParam stGetSetParam;
switch(pclData->m_pub_fn_tdeGetDataType())
{
case CTL_DATA_TYPE__INTEGER:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Integer);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
csValue.Format("%ld",M_GetSetParam_lValue(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csInteger;
}
break;
case CTL_DATA_TYPE__DECIMAL:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Float);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
csValue.Format("%f",M_GetSetParam_xValue(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csDecimal;
}
break;
case CTL_DATA_TYPE__ENUM:
{
ASSERT((M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text));
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso)
csValue.Format("%ld",M_GetSetParam_lValue(&stGetSetParam));
else
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint)
csValue.Format("%ld",M_GetSetParam_WayPointValue(&stGetSetParam));
else
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text)
csValue.Format("%ld",M_GetSetParam_hText(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csEnum;
}
break;
case CTL_DATA_TYPE__VECTOR:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Vector);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
MTH3D_tdstVector *pstVector=&(M_GetSetParam_stVertexValue(&stGetSetParam));
csValue.Format("%f,%f,%f",
MTH3D_M_xGetXofVector(pstVector),
MTH3D_M_xGetYofVector(pstVector),
MTH3D_M_xGetZofVector(pstVector));
pcslValues->AddTail(csValue);
}
csType=g_c_csVector;
}
break;
default:
{
AfxMessageBox("Pb with GetInfoAboutDsgVar");
}
}
}
else
{
CString csValue;
switch(pclData->m_pub_fn_tdeGetDataType())
{
case CTL_DATA_TYPE__INTEGER:
{
CTL_Editor_IntegerData *pclDataInteger=(CTL_Editor_IntegerData *)pclData;
csValue.Format("%ld",pclDataInteger->m_lCurrentValue);
csType=g_c_csInteger;
}
break;
case CTL_DATA_TYPE__DECIMAL:
{
CTL_Editor_DecimalData *pclDataDecimal=(CTL_Editor_DecimalData *)pclData;
csValue.Format("%f",pclDataDecimal->m_ldCurrentValue);
csType=g_c_csDecimal;
}
break;
case CTL_DATA_TYPE__BOOLEAN:
{
CTL_Editor_BooleanData *pclDataBoolean=(CTL_Editor_BooleanData *)pclData;
if(pclDataBoolean->m_bCurrentState==TRUE)
csValue=g_c_csTrue;
else
csValue=g_c_csFalse;
csType=g_c_csBoolean;
}
break;
case CTL_DATA_TYPE__ENUM:
{
CTL_Editor_EnumData *pclDataEnum=(CTL_Editor_EnumData *)pclData;
if(pclDataEnum->m_pclCurrentValue!=NULL)
csValue.Format("%ld",pclDataEnum->m_pclCurrentValue->m_pub_fn_lGetValue());
else
{
AfxMessageBox("Pb with GetInfoAboutDsgVar : Enum control with current value NULL !!");
csValue="";
}
csType=g_c_csEnum;
}
break;
case CTL_DATA_TYPE__TEXT:
{
CTL_Editor_TextData *pclDataText=(CTL_Editor_TextData *)pclData;
csValue=pclDataText->m_csCurrentString;
csType=g_c_csText;
}
break;
case CTL_DATA_TYPE__VECTOR:
{
CTL_Editor_VectorData *pclDataVector=(CTL_Editor_VectorData *)pclData;
csValue.Format("%f,%f,%f",
pclDataVector->m_ldCurrentValueX,
pclDataVector->m_ldCurrentValueY,
pclDataVector->m_ldCurrentValueZ);
csType=g_c_csVector;
}
break;
//ANNECY Bart#02 24/04/98 {
case CTL_DATA_TYPE__MASKED:
{
CTL_Editor_MaskedData* pclDataMask=(CTL_Editor_MaskedData* )pclData;
csValue.Format("%uld",pclDataMask->m_ulCurrentValue);
csType = g_c_csInteger; // ?
}
break;
//ENDANNECY Bart#02 }
// BEGIN ROMTEAM Cristi Petrescu 98-11-
// shouldn't we use m_fn_pcslFormatDataValueString ?!!!!
// another example of poor design. we cannot use it because cannot compile for the enums...
// maybe define a new call back?!
// or use the control call back?! - who cares, it's only used here.
case CTL_DATA_TYPE__ARRAY:
{
CTL_Editor_ArrayData *pclArrayData;
pclArrayData = (CTL_Editor_ArrayData *) pclData;
CTL_Editor_Control *pclControl;
pclControl = pclArrayData -> m_pub_fn_pclGetParentControl ();
tdstArray *pstArray;
pstArray = (tdstArray *) pclArrayData -> m_pub_fn_pvGetMotorData ();
long lNbElt;
lNbElt=M_ARRAY_SIZE(pstArray);
if (lNbElt == 0)
break;
tdstGetSetParam stGetSetParam;
switch (pclControl -> m_pub_fn_tdeGetDataType ())
{
case CTL_DATA_TYPE__ARRAY_ENUM:
{
ASSERT((M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text));
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso)
csValue.Format("%ld",M_GetSetParam_lValue(&stGetSetParam));
else
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint)
csValue.Format("%ld",M_GetSetParam_WayPointValue(&stGetSetParam));
else
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text)
csValue.Format("%ld",M_GetSetParam_hText(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csEnum;
}
break;
case CTL_DATA_TYPE__ARRAY_VECTOR:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Vector);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
MTH3D_tdstVector *pstVector=&(M_GetSetParam_stVertexValue(&stGetSetParam));
csValue.Format("%f,%f,%f",
MTH3D_M_xGetXofVector(pstVector),
MTH3D_M_xGetYofVector(pstVector),
MTH3D_M_xGetZofVector(pstVector));
pcslValues->AddTail(csValue);
}
csType=g_c_csVector;
}
break;
case CTL_DATA_TYPE__ARRAY_DECIMAL:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Float);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
csValue.Format("%f",M_GetSetParam_xValue(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csDecimal;
}
break;
case CTL_DATA_TYPE__ARRAY_INTEGER:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Integer);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
csValue.Format("%ld",M_GetSetParam_lValue(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csInteger;
}
break;
default:
{
AfxMessageBox("Pb with GetInfoAboutDsgVar - array");
}
}
}
break;
// END ROMTEAM Cristi Petrescu 98-11-
default:
{
AfxMessageBox("Pb with GetInfoAboutDsgVar");
}
}
if (pclData->m_pub_fn_tdeGetDataType() != CTL_DATA_TYPE__ARRAY)
pcslValues->AddTail(csValue);
}
}
/*************************************************************************/
//return name object in pcslValues
void fn_vGetInfoAboutDsgVar(CTL_Editor_Data *pclData,
CString &csName,
CString &csType,
CStringList *pcslValues)
{
//Updates data
pclData->m_fn_vGetMotorData();
//Gets Name
csName=pclData->m_pub_fn_csGetDataName();
//Tests if pclData is an array
void *pvBaseAddress=fn_pvGetBaseAddress(pclData);
if(pvBaseAddress!=NULL)
{
tdstArray *pstArray=(tdstArray *)pvBaseAddress;
long lNbElt=M_ARRAY_SIZE(pstArray);
CString csValue;
tdstGetSetParam stGetSetParam;
switch(pclData->m_pub_fn_tdeGetDataType())
{
case CTL_DATA_TYPE__INTEGER:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Integer);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
csValue.Format("%ld",M_GetSetParam_lValue(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csInteger;
}
break;
case CTL_DATA_TYPE__DECIMAL:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Float);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
csValue.Format("%f",M_GetSetParam_xValue(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csDecimal;
}
break;
case CTL_DATA_TYPE__ENUM:
{
ASSERT((M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text));
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
//Persos
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso)
{
long lHandle=M_GetSetParam_lValue(&stGetSetParam);
CString csReferencedSectionName;
if(lHandle!=NULL)
{
CPA_SaveObject *pclObject=fn_pclGetReachableObject(lHandle,C_szActorInstanceTypeName);
csValue=(pclObject) ? pclObject->GetName() : "Unknown";
}
else
csValue=szFindKeyWordScriptNameFromId(eKeyWord_Nobody);
}
else
//SuperObject
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_SuperObject)
{
long lHandle=M_GetSetParam_lValue(&stGetSetParam);
CString csReferencedSectionName;
if(lHandle!=NULL)
{
CPA_SaveObject *pclObject=fn_pclGetReachableObject(lHandle,C_szSuperObjectTypeName);
csValue=(pclObject) ? pclObject->GetName() : "Unknown";
}
else
csValue=szFindKeyWordScriptNameFromId(eKeyWord_NoSuperObject);
}
//Waypoints
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint)
{
long lHandle=(long)M_GetSetParam_WayPointValue(&stGetSetParam);
if(lHandle!=NULL)
{
CPA_SaveObject *pclObject=fn_pclGetReachableObject(lHandle,C_szWayPointTypeName);
csValue=(pclObject) ? pclObject->GetName() : "Unknown";
}
else
csValue=szFindKeyWordScriptNameFromId(eKeyWord_Nowhere);
}
else
//Texts
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text)
{
FON_tdxHandleOfText hText = M_GetSetParam_hText(&stGetSetParam);
csValue = FON_fn_szGetNameOfTextHandle(hText);
}
pcslValues->AddTail(csValue);
}
csType=g_c_csEnum;
}
break;
case CTL_DATA_TYPE__VECTOR:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Vector);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
MTH3D_tdstVector *pstVector=&(M_GetSetParam_stVertexValue(&stGetSetParam));
csValue.Format("%f,%f,%f",
MTH3D_M_xGetXofVector(pstVector),
MTH3D_M_xGetYofVector(pstVector),
MTH3D_M_xGetZofVector(pstVector));
pcslValues->AddTail(csValue);
}
csType=g_c_csVector;
}
break;
default:
{
AfxMessageBox("Pb with EdIRDat::fn_vGetInfoAboutDsgVar");
ASSERT(FALSE);
}
}
}
else
{
CString csValue;
switch(pclData->m_pub_fn_tdeGetDataType())
{
case CTL_DATA_TYPE__INTEGER:
{
CTL_Editor_IntegerData *pclDataInteger=(CTL_Editor_IntegerData *)pclData;
csValue.Format("%ld",pclDataInteger->m_lCurrentValue);
csType=g_c_csInteger;
}
break;
case CTL_DATA_TYPE__DECIMAL:
{
CTL_Editor_DecimalData *pclDataDecimal=(CTL_Editor_DecimalData *)pclData;
csValue.Format("%f",pclDataDecimal->m_ldCurrentValue);
csType=g_c_csDecimal;
}
break;
case CTL_DATA_TYPE__BOOLEAN:
{
CTL_Editor_BooleanData *pclDataBoolean=(CTL_Editor_BooleanData *)pclData;
if(pclDataBoolean->m_bCurrentState==TRUE)
csValue=g_c_csTrue;
else
csValue=g_c_csFalse;
csType=g_c_csBoolean;
}
break;
case CTL_DATA_TYPE__ENUM:
{
CTL_Editor_EnumData *pclDataEnum=(CTL_Editor_EnumData *)pclData;
if(pclDataEnum->m_pclCurrentValue!=NULL)
csValue=pclDataEnum->m_fn_pcslFormatDataValueString()->GetHead();
else
{
AfxMessageBox("Pb with EdIRDat::fn_vGetInfoAboutDsgVar : Enum control with current value NULL !!");
csValue="";
ASSERT(FALSE);
}
csType=g_c_csEnum;
}
break;
case CTL_DATA_TYPE__TEXT:
{
CTL_Editor_TextData *pclDataText=(CTL_Editor_TextData *)pclData;
csValue=pclDataText->m_csCurrentString;
csType=g_c_csText;
}
break;
case CTL_DATA_TYPE__VECTOR:
{
CTL_Editor_VectorData *pclDataVector=(CTL_Editor_VectorData *)pclData;
csValue.Format("%f,%f,%f",
pclDataVector->m_ldCurrentValueX,
pclDataVector->m_ldCurrentValueY,
pclDataVector->m_ldCurrentValueZ);
csType=g_c_csVector;
}
break;
//ANNECY Bart#02 24/04/98 {
case CTL_DATA_TYPE__MASKED:
{
CTL_Editor_MaskedData* pclDataMask=(CTL_Editor_MaskedData* )pclData;
csValue.Format("%uld",pclDataMask->m_ulCurrentValue);
csType = g_c_csInteger; // ?
}
break;
//ENDANNECY Bart#02 }
// BEGIN ROMTEAM Cristi Petrescu 98-11-
// shouldn't we use m_fn_pcslFormatDataValueString ?!!!!
// another example of poor design. we cannot use it because cannot compile for the enums...
// maybe define a new call back?!
// or use the control call back?! - who cares, it's only used here.
case CTL_DATA_TYPE__ARRAY:
{
CTL_Editor_ArrayData *pclArrayData;
pclArrayData = (CTL_Editor_ArrayData *) pclData;
CTL_Editor_Control *pclControl;
pclControl = pclArrayData -> m_pub_fn_pclGetParentControl ();
tdstArray *pstArray;
pstArray = (tdstArray *) pclArrayData -> m_pub_fn_pvGetMotorData ();
long lNbElt;
lNbElt=M_ARRAY_SIZE(pstArray);
if (lNbElt == 0)
break;
tdstGetSetParam stGetSetParam;
switch (pclControl -> m_pub_fn_tdeGetDataType ())
{
case CTL_DATA_TYPE__ARRAY_ENUM:
{
ASSERT((M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text));
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
//Persos
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso)
{
long lHandle=M_GetSetParam_lValue(&stGetSetParam);
CString csReferencedSectionName;
if(lHandle!=NULL)
{
CPA_SaveObject *pclObject=fn_pclGetReachableObject(lHandle,C_szActorInstanceTypeName);
csValue=(pclObject) ? pclObject->GetName() : "Unknown";
}
else
csValue=szFindKeyWordScriptNameFromId(eKeyWord_Nobody);
}
else
//Waypoints
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint)
{
long lHandle=(long)M_GetSetParam_WayPointValue(&stGetSetParam);
if(lHandle!=NULL)
{
CPA_SaveObject *pclObject=fn_pclGetReachableObject(lHandle,C_szWayPointTypeName);
csValue=(pclObject) ? pclObject->GetName() : "Unknown";
}
else
csValue=szFindKeyWordScriptNameFromId(eKeyWord_Nowhere);
}
else
//Texts
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text)
{
FON_tdxHandleOfText hText = M_GetSetParam_hText(&stGetSetParam);
csValue = FON_fn_szGetNameOfTextHandle(hText);
}
pcslValues->AddTail(csValue);
}
csType=g_c_csEnum;
}
break;
case CTL_DATA_TYPE__ARRAY_VECTOR:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Vector);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
MTH3D_tdstVector *pstVector=&(M_GetSetParam_stVertexValue(&stGetSetParam));
csValue.Format("%f,%f,%f",
MTH3D_M_xGetXofVector(pstVector),
MTH3D_M_xGetYofVector(pstVector),
MTH3D_M_xGetZofVector(pstVector));
pcslValues->AddTail(csValue);
}
csType=g_c_csVector;
}
break;
case CTL_DATA_TYPE__ARRAY_DECIMAL:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Float);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
csValue.Format("%f",M_GetSetParam_xValue(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csDecimal;
}
break;
case CTL_DATA_TYPE__ARRAY_INTEGER:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Integer);
for(long lIndex=0;lIndex<lNbElt;lIndex++)
{
fn_ucGetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
csValue.Format("%ld",M_GetSetParam_lValue(&stGetSetParam));
pcslValues->AddTail(csValue);
}
csType=g_c_csInteger;
}
break;
default:
{
AfxMessageBox("Pb with EdIRDat::fn_vGetInfoAboutDsgVar - array");
}
}
}
break;
// END ROMTEAM Cristi Petrescu 98-11-
default:
{
AfxMessageBox("Pb with EdIRDat::fn_vGetInfoAboutDsgVar");
ASSERT(FALSE);
}
}
if (pclData->m_pub_fn_tdeGetDataType() != CTL_DATA_TYPE__ARRAY)
pcslValues->AddTail(csValue);
}
}
/*************************************************************************/
void fn_vSetValueInDsgVar(CTL_Editor_Data *pclData,CStringList *pcslValues,void *pvEngineData)
{
//Tests if pclData is an array
void *pvBaseAddress=fn_pvGetBaseAddress(pclData);
if(pvBaseAddress!=NULL)
{
tdstArray *pstArray=(tdstArray *)pvBaseAddress;
long lNbElt=M_ARRAY_SIZE(pstArray);
CString csValue;
tdstGetSetParam stGetSetParam;
switch(pclData->m_pub_fn_tdeGetDataType())
{
case CTL_DATA_TYPE__INTEGER:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Integer);
POSITION pos=pcslValues->GetHeadPosition();
long lIndex=0;
while(pos!=NULL && lIndex<lNbElt)
{
csValue=pcslValues->GetNext(pos);
M_GetSetParam_lValue(&stGetSetParam)=atol(M_MAKECHAR(csValue));
fn_ucSetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
lIndex++;
}
}
break;
case CTL_DATA_TYPE__DECIMAL:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Float);
POSITION pos=pcslValues->GetHeadPosition();
long lIndex=0;
while(pos!=NULL && lIndex<lNbElt)
{
csValue=pcslValues->GetNext(pos);
M_GetSetParam_xValue(&stGetSetParam)=(MTH_tdxReal)atof(M_MAKECHAR(csValue));
M_GetSetParam_Type(&stGetSetParam) = E_vt_Float;
fn_ucSetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
lIndex++;
}
}
break;
case CTL_DATA_TYPE__ENUM:
{
ASSERT((M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text));
POSITION pos=pcslValues->GetHeadPosition();
long lIndex=0;
while(pos!=NULL && lIndex<lNbElt)
{
csValue=pcslValues->GetNext(pos);
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso)
M_GetSetParam_lValue(&stGetSetParam) = atol(M_MAKECHAR(csValue));
else
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint)
M_GetSetParam_WayPointValue(&stGetSetParam) = (struct WP_tdstWayPoint_ *)atol(M_MAKECHAR(csValue));
else
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text)
M_GetSetParam_hText(&stGetSetParam) = (FON_tdxHandleOfText) atol(M_MAKECHAR(csValue));
fn_ucSetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
lIndex++;
}
}
break;
case CTL_DATA_TYPE__VECTOR:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Vector);
POSITION pos=pcslValues->GetHeadPosition();
long lIndex=0;
while(pos!=NULL && lIndex<lNbElt)
{
csValue=pcslValues->GetNext(pos);
long lTmpIndex=0;
CString csX=fn_csGetNextWord(csValue,lTmpIndex);
CString csY=fn_csGetNextWord(csValue,lTmpIndex);
CString csZ=fn_csGetNextWord(csValue,lTmpIndex);
MTH3D_tdstVector *pstVector=&(M_GetSetParam_stVertexValue(&stGetSetParam));
MTH3D_M_xGetXofVector(pstVector)=(MTH_tdxReal)atof(M_MAKECHAR(csX));
MTH3D_M_xGetYofVector(pstVector)=(MTH_tdxReal)atof(M_MAKECHAR(csY));
MTH3D_M_xGetZofVector(pstVector)=(MTH_tdxReal)atof(M_MAKECHAR(csZ));
fn_ucSetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
lIndex++;
}
}
break;
default:
{
AfxMessageBox("Pb with SetValueInDsgVar");
}
}
}
else
{
CString csValue=pcslValues->GetHead();
switch(pclData->m_pub_fn_tdeGetDataType())
{
case CTL_DATA_TYPE__ENUM:
{
*(long *)pvEngineData=atol(M_MAKECHAR(csValue));
}
break;
case CTL_DATA_TYPE__INTEGER:
{
long lValue=atol(M_MAKECHAR(csValue));
memcpy(pvEngineData,&lValue,((CTL_Editor_IntegerData *)pclData)->m_cDataSize);
}
break;
case CTL_DATA_TYPE__DECIMAL:
{
*(MTH_tdxReal *)pvEngineData=(MTH_tdxReal)atof(M_MAKECHAR(csValue));
}
break;
case CTL_DATA_TYPE__BOOLEAN:
{
if(csValue==g_c_csTrue)
*(unsigned char *)pvEngineData=1;
else
*(unsigned char *)pvEngineData=0;
}
break;
case CTL_DATA_TYPE__TEXT:
{
}
break;
case CTL_DATA_TYPE__VECTOR:
{
long lIndex=0;
CString csX=fn_csGetNextWord(csValue,lIndex);
CString csY=fn_csGetNextWord(csValue,lIndex);
CString csZ=fn_csGetNextWord(csValue,lIndex);
((MTH3D_tdstVector *)pvEngineData)->xX=(MTH_tdxReal)atof(M_MAKECHAR(csX));
((MTH3D_tdstVector *)pvEngineData)->xY=(MTH_tdxReal)atof(M_MAKECHAR(csY));
((MTH3D_tdstVector *)pvEngineData)->xZ=(MTH_tdxReal)atof(M_MAKECHAR(csZ));
}
break;
//ANNECY Bart#02 24/04/98 {
case CTL_DATA_TYPE__MASKED:
{
unsigned long ulValue=strtoul(M_MAKECHAR(csValue),NULL,10);
*(unsigned long *)pvEngineData=ulValue;
}
break;
//ENDANNECY Bart#02 }
// BEGIN ROMTEAM Cristi Petrescu 98-11-
// shouldn't we use m_fn_pcslFormatDataValueString ?!!!!
// another example of poor design. we cannot use it because cannot compile for the enums...
// maybe define a new call back?!
// or use the control call back?! - who cares, it's only used here.
case CTL_DATA_TYPE__ARRAY:
{
CTL_Editor_ArrayData *pclArrayData;
pclArrayData = (CTL_Editor_ArrayData *) pclData;
CTL_Editor_Control *pclControl;
pclControl = pclArrayData -> m_pub_fn_pclGetParentControl ();
tdstArray *pstArray;
pstArray = (tdstArray *) pclArrayData -> m_pub_fn_pvGetMotorData ();
// BEGIN ROMTEAM Cristi Petrescu 99-01- debug
long lNbElt, lOldNbElt;
// BEGIN ROMTEAM Cristi Petrescu 98-12-
lNbElt=M_ARRAY_SIZE(pstArray);
if (lNbElt == 0)
break;
lOldNbElt = pcslValues -> GetCount ();
// for safety
if (lOldNbElt == 0)
pcslValues -> AddTail ("0 0 0");
while (lNbElt < lOldNbElt)
{
pcslValues -> RemoveTail ();
lOldNbElt --;
}
while (lNbElt > lOldNbElt)
{
pcslValues -> AddTail (pcslValues -> GetTail ());
lOldNbElt ++;
}
// END ROMTEAM Cristi Petrescu 99-01- debug
//lNbElt = pcslValues -> GetCount ();
//M_ARRAY_SIZE (pstArray) = lNbElt;
// END ROMTEAM Cristi Petrescu 98-12-
tdstGetSetParam stGetSetParam;
switch (pclControl -> m_pub_fn_tdeGetDataType ())
{
case CTL_DATA_TYPE__ARRAY_ENUM:
{
ASSERT((M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint) ||
(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text));
POSITION pos=pcslValues->GetHeadPosition();
long lIndex=0;
while(pos!=NULL && lIndex<lNbElt)
{
csValue=pcslValues->GetNext(pos);
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Perso)
M_GetSetParam_lValue(&stGetSetParam) = atol(M_MAKECHAR(csValue));
else
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_WayPoint)
M_GetSetParam_WayPointValue(&stGetSetParam) = (struct WP_tdstWayPoint_ *)atol(M_MAKECHAR(csValue));
else
if(M_ARRAY_TYPE(pstArray)==eDsgVarType_Text)
M_GetSetParam_hText(&stGetSetParam) = (FON_tdxHandleOfText) atol(M_MAKECHAR(csValue));
fn_ucSetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
lIndex++;
}
}
break;
case CTL_DATA_TYPE__ARRAY_VECTOR:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Vector);
POSITION pos=pcslValues->GetHeadPosition();
long lIndex=0;
while(pos!=NULL && lIndex<lNbElt)
{
csValue=pcslValues->GetNext(pos);
long lTmpIndex=0;
CString csX=fn_csGetNextWord(csValue,lTmpIndex);
CString csY=fn_csGetNextWord(csValue,lTmpIndex);
CString csZ=fn_csGetNextWord(csValue,lTmpIndex);
MTH3D_tdstVector *pstVector=&(M_GetSetParam_stVertexValue(&stGetSetParam));
MTH3D_M_xGetXofVector(pstVector)=(MTH_tdxReal)atof(M_MAKECHAR(csX));
MTH3D_M_xGetYofVector(pstVector)=(MTH_tdxReal)atof(M_MAKECHAR(csY));
MTH3D_M_xGetZofVector(pstVector)=(MTH_tdxReal)atof(M_MAKECHAR(csZ));
fn_ucSetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
lIndex++;
}
}
break;
case CTL_DATA_TYPE__ARRAY_DECIMAL:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Float);
POSITION pos=pcslValues->GetHeadPosition();
long lIndex=0;
while(pos!=NULL && lIndex<lNbElt)
{
csValue=pcslValues->GetNext(pos);
M_GetSetParam_xValue(&stGetSetParam)=(MTH_tdxReal)atof(M_MAKECHAR(csValue));
M_GetSetParam_Type(&stGetSetParam) = E_vt_Float;
fn_ucSetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
lIndex++;
}
}
break;
case CTL_DATA_TYPE__ARRAY_INTEGER:
{
ASSERT(M_ARRAY_TYPE(pstArray)==eDsgVarType_Integer);
POSITION pos=pcslValues->GetHeadPosition();
long lIndex=0;
while(pos!=NULL && lIndex<lNbElt)
{
csValue=pcslValues->GetNext(pos);
M_GetSetParam_lValue(&stGetSetParam)=atol(M_MAKECHAR(csValue));
fn_ucSetDsgVarValue(M_ARRAY_ELEMENT(pstArray,lIndex),0,M_ARRAY_TYPE(pstArray),&stGetSetParam);
lIndex++;
}
}
break;
default:
{
AfxMessageBox("Pb with SetValueInDsgVar - array");
}
}
}
break;
// END ROMTEAM Cristi Petrescu 98-11-
default:
{
AfxMessageBox("Pb with SetValueInDsgVar");
}
}
}
pclData->m_fn_vGetMotorData();
}
/****************************************************************************/
void fn_vUpdateWatchData (CTL_Editor_Data *pclData,enum CTL_eUpdateReason,long l)
{
if (fn_bIsInWatch(pclData))
{
WAW_fn_vRefreshWatchWindow();
/* WAW_Data *pclWatchData=fn_pclGetWatchData(pclData);
CString csValue=fn_csGetValue(pclWatchData);
WAW_fn_bUpdateData(pclWatchData,csValue);
*/ }
}
#endif //D_ED_IR_ACTIVE