reman3/Rayman_X/cpa/tempgrp/OAC/Src/EdActors/edacloadCB.cpp

444 lines
13 KiB
C++

#include "StdAfx.h"
//External Modules
#include "ACP_Base.h"
#include "ITF.h"
#include "TAC.h"
#include "TFA.h"
#include "IncMEC.h"
#define D_State_Define
#include "IncGAM.h"
#undef D_State_Define
#include "GLI.h"
//End of External Modules
#include "EDACStrg.hpp"
#include "EDACInst.hpp"
#include "EDACModl.hpp"
#include "EDACDgIf.hpp"
#include "EDACDgPI.hpp"
#include "EDACGlob.hpp"
#include "Defines.hpp"
#include "x:\cpa\Main\inc\_editid.h"
//-----------------IR-------------------------
#include "EdIRStrg.hpp"
#include "EdIRFrm.hpp"
#include "EdIRBeEn.hpp"
#include "EDACQuer.hpp"
//--------------------------------------------
//External Modules
#include "ErO.h"
//#include "CTL.h"
//End of External Modules
#undef CPA_WANTS_IMPORT
#undef CPA_EXPORT
#define CPA_WANTS_EXPORT
//-----------------IR-------------------------
#include "EdIRIRD.hpp"
//--------------------------------------------
#include "_Actors.hpp"
#undef CPA_WANTS_EXPORT
#define CPA_WANTS_IMPORT
#ifdef CPA_USES_LDT
#include "ldt.h"
#define lTagType 'epyT'
#define lTagBitmap 'mtiB'
#define lTagFamily 'imaF'
#define lTagEditorBrain 'tidE'
#define lTagShowPrivate 'wohS'
/*****************************************************************
Function name : EdActors_MyDocument::fn_iCreateEditorActorModel
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 15-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int EdActors_MyDocument::fn_iCreateEditorActorModel( LDT_tdst_Link *pLink )
{
//Working Model
CPA_Actor *s_pclModel = NULL;
//For error Infos
//ERROR_SET_SCRIPT_INFO(_p_stFile)
//Gets the 'context' Model
unsigned long ulPassedValue = LDT_GetTempLong(0);
LDT_SetLinkValue( pLink, ulPassedValue);
char* szName = LDT_szGetSectionName();
CString csName(pLink->szName);
if ( ulPassedValue == 0 )
{
//Creates the Model
CPA_SuperObject *pclSO = g_pclInterface->m_clDocument.m_fn_pclCreateModelForLoad(csName);
s_pclModel = (CPA_Actor *)pclSO->GetObject();
}
else
{
//Creates the Model
s_pclModel = (CPA_Actor *)ulPassedValue;
CPA_SuperObject *pclSO = g_pclInterface->m_clDocument.m_fn_pclCreateModelForLoad(csName, s_pclModel);
s_pclModel = (CPA_Actor *)pclSO->GetObject();
ERROR_ASSERT( (unsigned long)s_pclModel == ulPassedValue );
}
ERROR_ASSERT( s_pclModel != NULL );
ERROR_ASSERT( s_pclModel->m_fn_bIsAModel() );
pLink->pObject = (void*)s_pclModel;
return 0;
}
/*****************************************************************
Function name : EdActors_MyDocument::fn_iLoadEditorActorModel
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 15-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int EdActors_MyDocument::fn_iLoadEditorActorModel( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
//Working Model
CPA_Actor *s_pclModel = (CPA_Actor *)pLink->pObject;
ERROR_ASSERT ( s_pclModel != NULL );
//Info Window
CString s_csMessage;
BOOL s_bModelAlreadyExists = FALSE;
unsigned char s_ucProgressValue = 0;
char * szName = LDT_szGetSectionName();
CString csName(szName);
s_csMessage = "Actors Editor loading Model : " + csName;
unsigned long ulPassedValue = LDT_GetLinkValue( pLink);
if ( ulPassedValue == 0 )
{
s_bModelAlreadyExists = FALSE;
}
else
{
s_bModelAlreadyExists = TRUE;
}
while( result!=ParseResult_EndSection )
{
result=LDT_GetNextEntry();
switch( result )
{
case ParseResult_Entry: /* an entry */
{
char *szEntry=LDT_szGetEntryName();
switch (*(long*)szEntry)
{
case lTagType : /* */
{
s_ucProgressValue += 10;
EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue);
s_pclModel->m_fn_vMakeGenDoor( g_c_csModelTypeGenDoor.CompareNoCase(LDT_szGetParam(1)) == 0);
//Sets progress
s_ucProgressValue += 10;
EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue);
}
break;
case lTagBitmap : /* */
{
s_ucProgressValue += 10;
EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue);
CString csBitmapName(LDT_szGetParam(1));
s_pclModel->m_fn_pclGetEditorModel()->m_fn_vSetBitmapName(csBitmapName);
//Sets progress
s_ucProgressValue += 10;
EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue);
}
break;
case lTagFamily : /* */
{
s_ucProgressValue += 10;
EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue);
CPA_Family *pclFamily = (CPA_Family *)g_pclInterface->GetMainWorld()->fn_p_oFindObject( LDT_szGetParam(1),
C_szFamilyTypeName);
//If Family is not loaded, calls Family DLL to load it
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,"Loading a Model",
"EdActors_MyDocument::m_fn_tdeCallBackLoadModel(...)",
E_ERROR_GRAVITY_FATAL,
"Family for the Model has not been found");
ERROR_ASSERT( pclFamily != NULL );
if ( !(pclFamily->fn_bIsAvailable()) )
{
CString csFamilyMessage = "Actors Editor asking for Family '" + pclFamily->GetName() + "' load... Please wait !";
EDACTORS_fn_vGiveProgressInfo(csFamilyMessage, -1);
CPA_DLLBase *p_clFamilyDll = g_pclInterface->GetMainWorld()->GetDLLWithTypeName(C_szDLLFamilyName);
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,"Loading a Model",
"EdActors_MyDocument::m_fn_tdeCallBackLoadModel(...)",
E_ERROR_GRAVITY_FATAL,
"Family DLL cannot be found");
ERROR_ASSERT( p_clFamilyDll != NULL );
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,"Loading a Model",
"EdActors_MyDocument::m_fn_tdeCallBackLoadModel(...)",
E_ERROR_GRAVITY_FATAL,
"Family can't be loaded");
ERROR_VERIFY( p_clFamilyDll->fn_bLoadBaseObject(pclFamily) );
}
s_pclModel->m_pub_fn_vSetFamily(pclFamily);
s_pclModel->m_pub_fn_vConstructEnumDescriptorForObjectsTables();
s_ucProgressValue += 10;
EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue);
}
break;
case lTagEditorBrain : /* */
{
s_ucProgressValue += 10;
EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue);
CString csName(LDT_szGetParam(1));
// NOTE: LoadBrain calls dActors_ActorMiniStructure::m_fn_tdeCallBackLoad (the CB for 'CreateEditorIntelligence' section from .eru files)
EDAC_fn_vLoadBrain(s_pclModel,csName);
s_ucProgressValue += 10;
EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue);
}
break;
case lTagShowPrivate : /* */
{
CPA_EdIR_Brain *pclBrain = ((EdActors_EditorActorModel *)s_pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
pclBrain -> m_bShowPrivateVariable = atoi(LDT_szGetParam(1));
}
break;
}
}
break;
case ParseResult_BeginSection : /* subsection MiniStructure*/
{
LDT_LoadSection( NULL );
}
break;
}
}
//Adds in the Models list
g_pclInterface->m_clDocument.m_fn_vAddLoadedModelInList(s_pclModel->m_fn_pclGetEditorModel(), !s_bModelAlreadyExists);
//Re-builds section name
s_pclModel->GetCompleteSectionName(); //???
// -> OS : THIS CODE SHOULD BE CHANGED 17-Sep-98
// SCR_M_RdL0_SetSectionLong(0, 0, (long)s_pclModel);
// <- OS : THIS CODE SHOULD BE CHANGED 17-Sep-98
EDACTORS_fn_vGiveProgressInfo(s_csMessage, 100);
return 0;
}
/*****************************************************************
Function name : EdActors_ActorMiniStructure::fn_iCreateActorMiniStructure
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 15-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int EdActors_ActorMiniStructure::fn_iCreateActorMiniStructure( LDT_tdst_Link *pLink )
{
CPA_Actor *pclActor = (CPA_Actor *)pLink->pParent->pObject;
char* szName= LDT_szGetSectionName();
CString csAction(szName);
ERROR_ASSERT( pclActor->m_fn_bIsAModel() );
EdActors_EditorActor *pclEdActor = pclActor->m_fn_pclGetEditorActor();
EdActors_ActorMiniStructure *s_pclAMS = NULL;
//For error Infos
//ERROR_SET_SCRIPT_INFO(_p_stFile);
CString csAllocated = CString(LDT_szGetParam(2));
if ( csAllocated.CompareNoCase(g_c_csAllocatedMS) == 0 )
{
//Selects the right list of AMS
EdActors_ActorMiniStructureList *pclAMSList;
CString csGroupName = CString(LDT_szGetParam(1));
BOOL bAMSListFound = FALSE;
POSITION ASMListPos = pclEdActor->m_clListOfAMSLists.GetHeadPosition();
while ( (ASMListPos != NULL) && (!bAMSListFound) )
{
pclAMSList = pclEdActor->m_clListOfAMSLists.GetNext(ASMListPos);
bAMSListFound = ( csGroupName.CompareNoCase(pclAMSList->m_fn_csGetGroupScriptName()) == 0 );
}
ERROR_ASSERT( bAMSListFound );
BOOL bAMSFound = FALSE;
CString csMSName = csAction;
EdActors_ActorMiniStructure *pclAMS;
POSITION pos = pclAMSList->GetHeadPosition();
while ( (pos != NULL) && (!bAMSFound) )
{
pclAMS = pclAMSList->GetNext(pos);
bAMSFound = ( pclAMS->m_csScriptName.CompareNoCase(csMSName) == 0 );
}
//Allocates the MS
if ( bAMSFound )
{
pclAMS->m_fn_bAllocate();
s_pclAMS = pclAMS;
}
}
pLink->pObject = (void*)s_pclAMS;
return 0;
}
/*****************************************************************
Function name : EdActors_ActorMiniStructure::fn_iLoadActorMiniStructure
Description :
Author : Ovidiu Scripa (oscripa@ubisoft.ro) - ROMTEAM
Creation Date : 15-Oct-98
Modified :
Return type : int
Argument : LDT_tdst_Link *pLink
*****************************************************************/
int EdActors_ActorMiniStructure::fn_iLoadActorMiniStructure( LDT_tdst_Link *pLink )
{
LDT_tdeParseResult result=ParseResult_BeginSection;
CPA_Actor *pclActor = (CPA_Actor *)pLink->pParent->pObject;
ERROR_ASSERT( pclActor->m_fn_bIsAModel() );
EdActors_EditorActor *pclEdActor = pclActor->m_fn_pclGetEditorActor();
EdActors_ActorMiniStructure *s_pclAMS = (EdActors_ActorMiniStructure *)pLink->pObject;
while( result!=ParseResult_EndSection )
{
result=LDT_GetNextEntry();
switch( result )
{
case ParseResult_Entry: /* an entry */
{
char* szEntry = LDT_szGetEntryName();
CString csAction(szEntry);
if ( s_pclAMS != NULL )
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Loading a Mini Structure",
"EdActors_ActorMiniStructure::m_fn_tdeCallBackLoad(...)",
E_ERROR_GRAVITY_FATAL,
"A field has been found in a Model's MS which is not allocated : this should not occur !!");
ERROR_ASSERT( s_pclAMS->m_fn_bIsAllocated() );
//Searches for the Data
BOOL bFound = FALSE;
CTL_Editor_Data *pclData;
POSITION pos = s_pclAMS->m_pclDataList->GetHeadPosition();
while ( (pos != NULL) && (!bFound) )
{
pclData = s_pclAMS->m_pclDataList->GetNext(pos);
bFound = ( pclData->m_pub_fn_csGetDataName().CompareNoCase(csAction) == 0 );
}
if ( bFound )
{
CString csValue(LDT_szGetParam(1));
//Analyses link state
if ( csValue.CompareNoCase(g_c_csLinkedField) == 0 )
OAC_fn_tdeSetLink(pclData, OAC_LINK_MODE__LINKED);
else if ( csValue.CompareNoCase(g_c_csNotLinkedField) == 0 )
OAC_fn_tdeSetLink(pclData, OAC_LINK_MODE__NOT_LINKED);
else if ( csValue.CompareNoCase(g_c_csAlwaysLinkedField) == 0 )
OAC_fn_tdeSetLink(pclData, OAC_LINK_MODE__ALWAYS_LINKED);
else if ( csValue.CompareNoCase(g_c_csNeverLinkedField) == 0 )
OAC_fn_tdeSetLink(pclData, OAC_LINK_MODE__NEVER_LINKED);
else
ERROR_ASSERT(FALSE);
//Analyses Value string
CStringList cslStringList;
long c_lI;
// To clean all ema files
if (csValue.CompareNoCase("Activable") != 0)
{
long lNbP = LDT_iGetNbParams();
for ( c_lI = 2; c_lI <= (lNbP-1); c_lI ++ )
{
cslStringList.AddTail(LDT_szGetParam(c_lI));
}
}
else
cslStringList.AddTail("TRUE");
pclData->m_fn_vSetValueWithString(&cslStringList);
}
}
}
}
}
return 0;
}
#endif //CPA_USES_LDT