#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 //************************************************************************* // Model Loading Function (Direct) //************************************************************************* CPA_Actor *EdActors_MyDocument::m_fn_pclLoadModel(CString csModelName /*=""*/, CPA_Actor *pclModel /*= NULL*/) { CPA_Actor *pclLoadedModel = NULL; CString csTrueFileName; BOOL bMustGoOn = TRUE; if ( csModelName.IsEmpty() ) { /* CString csFilters("Actor Model File(*.eam)|*.eam|All Files|*.*|"); CFileDialog dial( TRUE, "*.ema", "*.ema", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, csFilters); char a_cOldDir[MAX_PATH]; GetCurrentDirectory(MAX_PATH, (char *)(&a_cOldDir)); CString csOldDir(a_cOldDir); SetCurrentDirectory(m_csModelsSavePath); if ( dial.DoModal() == IDOK ) csTrueFileName = dial.GetFileName(); else bMustGoOn = FALSE; SetCurrentDirectory(csOldDir); */ } else csTrueFileName = csModelName + g_csModelExtension; if ( bMustGoOn ) { //Loads the Model CString csCompleteSectionName = csTrueFileName; csCompleteSectionName += '^'; csCompleteSectionName += g_c_csActorScriptModelSectionName + ':'; csModelName = g_c_csModelNamePrefix + csModelName; CString csModelTrueName = csModelName.Right(csModelName.GetLength() - csModelName.ReverseFind('\\') - 1); csCompleteSectionName += csModelTrueName; //Gives the Model to the CallBack SCR_M_RdL0_SetContextLong(1, 0, pclModel); AfxGetApp()->DoWaitCursor(1); BOOL bIsLoadingWorld = g_pclInterface->GetInterface()->fn_bIsLoadingWorld(); g_pclInterface->GetInterface()->SetLoadingWorld(TRUE); SCR_tdst_Cxt_Values *p_stValues; p_stValues = SCR_fnp_st_RdL0_AnalyseSection((char *)LPCTSTR(csCompleteSectionName), SCR_CDF_uw_Anl_Normal); ERROR_RESET_SCRIPT_INFO //Displays the last loaded Actor pclLoadedModel = (CPA_Actor *)p_stValues->a_ulValues[0]; ERROR_PREPARE_M(g_c_csActorModuleNameForErrors, "Loading a Model", "EdActors_MyDocument::m_fn_pclLoadModel(...)", E_ERROR_GRAVITY_FATAL, "Model could not be loaded"); ERROR_ASSERT( pclLoadedModel != NULL ); pclLoadedModel->SetExistingSection(TRUE); g_pclInterface->GetInterface()->SetLoadingWorld(bIsLoadingWorld); AfxGetApp()->DoWaitCursor(-1); } g_pclInterface->m_clDocument.m_pLoadedModel = NULL; return pclLoadedModel; } //////////////////////////////// // Models : Loading functions // //////////////////////////////// //************************************************************************* // Model Loading Function (CallBack) //************************************************************************* SCR_tde_Anl_ReturnValue EdActors_MyDocument::m_fn_tdeCallBackLoadModel( SCR_tdst_File_Description *_p_stFile, char *_p_szName, char *_ap_szParams[], SCR_tde_Anl_Action _eAction) { //Working Model static CPA_Actor *s_pclModel = NULL; //Info Window static unsigned char s_ucProgressValue = 0; static CString s_csMessage; static BOOL s_bModelAlreadyExists = FALSE; CString csAction(_p_szName); //For error Infos ERROR_SET_SCRIPT_INFO(_p_stFile) switch ( _eAction ) { case SCR_EA_Anl_BeginSection: { CString csName(_p_szName); s_csMessage = "Actors Editor loading Model : " + csName; //Gets the 'context' Model unsigned long ulPassedValue; SCR_M_RdL0_GetContextLong(0, 0, unsigned long, ulPassedValue); if ( ulPassedValue == 0 ) { //Creates the Model CPA_SuperObject *pclSO = g_pclInterface->m_clDocument.m_fn_pclCreateModelForLoad(csName); s_pclModel = (CPA_Actor *)pclSO->GetObject(); s_bModelAlreadyExists = FALSE; } 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 ); s_bModelAlreadyExists = TRUE; } ERROR_ASSERT( s_pclModel != NULL ); ERROR_ASSERT( s_pclModel->m_fn_bIsAModel() ); } break; case SCR_EA_Anl_EndSection: //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(); SCR_M_RdL0_SetSectionLong(0, 0, (long)s_pclModel); s_pclModel = NULL; EDACTORS_fn_vGiveProgressInfo(s_csMessage, 100); s_ucProgressValue = 0; s_csMessage = ""; s_bModelAlreadyExists = FALSE; break; case SCR_EA_Anl_BeginSubSection: SCR_M_RdL0_SetContextLong(1, 0, (long)s_pclModel); break; case SCR_EA_Anl_Entry: ERROR_ASSERT ( s_pclModel != NULL ); //Analyses Model's type if ( csAction.CompareNoCase(g_c_csModelType) == 0 ) { s_ucProgressValue += 10; EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue); s_pclModel->m_fn_vMakeGenDoor(g_c_csModelTypeGenDoor.CompareNoCase(_ap_szParams[0]) == 0); //Sets progress s_ucProgressValue += 10; EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue); } //Analyses Model's Bitmap name else if ( csAction.CompareNoCase(g_c_csBitmapName) == 0 ) { s_ucProgressValue += 10; EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue); CString csBitmapName(_ap_szParams[0]); s_pclModel->m_fn_pclGetEditorModel()->m_fn_vSetBitmapName(csBitmapName); //Sets progress s_ucProgressValue += 10; EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue); } //Analyses Model's Family else if ( csAction.CompareNoCase(g_c_csActorFamily) == 0 ) { s_ucProgressValue += 10; EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue); CPA_Family *pclFamily = (CPA_Family *)g_pclInterface->GetMainWorld()->fn_p_oFindObject( _ap_szParams[0], 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); } //-----------------IR------------------------- //Analyses Brain else if(csAction.CompareNoCase(g_c_csBrainName)==0) { s_ucProgressValue += 10; EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue); CString csName(_ap_szParams[0]); EDAC_fn_vLoadBrain(s_pclModel,csName); s_ucProgressValue += 10; EDACTORS_fn_vGiveProgressInfo(s_csMessage, s_ucProgressValue); } //BEGIN ROMTEAM Cristi Petrescu 98-06- //Analyses show private variable status else if(csAction.CompareNoCase(g_c_csShowPrivateVariable)==0) { CPA_EdIR_Brain *pclBrain = ((EdActors_EditorActorModel *)s_pclModel->m_fn_pclGetEditorActor())->m_pclBrain; pclBrain -> m_bShowPrivateVariable = atoi(_ap_szParams[0]); } //END ROMTEAM Cristi Petrescu 98-06- //-------------------------------------------- break; } return SCR_ERV_Anl_NormalReturn; } ////////////////////////////////////// // MS : Loading functions // ////////////////////////////////////// //************************************************************************* // Level Loading Function (CallBack) //************************************************************************* SCR_tde_Anl_ReturnValue EdActors_ActorMiniStructure::m_fn_tdeCallBackLoad(SCR_tdst_File_Description *_p_stFile, char *_p_szName, char *_ap_szParams[], SCR_tde_Anl_Action _eAction) { //Gets the working Model long lValue; SCR_M_RdL0_GetContextLong(0, 0, long, lValue); CPA_Actor *pclActor = (CPA_Actor *)lValue; ERROR_ASSERT( pclActor->m_fn_bIsAModel() ); EdActors_EditorActor *pclEdActor = pclActor->m_fn_pclGetEditorActor(); static EdActors_ActorMiniStructure *s_pclAMS = NULL; //For error Infos ERROR_SET_SCRIPT_INFO(_p_stFile); CString csAction(_p_szName); switch ( _eAction ) { case SCR_EA_Anl_Entry: { /* ERROR_PREPARE_M(g_c_csActorModuleNameForErrors, "Loading a Mini Structure", "EdActors_ActorMiniStructure::m_fn_tdeCallBackLoad(...)", E_ERROR_GRAVITY_WARNING, "A field has been found in a Model's MS which is not allocated"); ERROR_ASSERT( s_pclAMS != NULL );*/ 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(_ap_szParams[0]); //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; // To clean all ema files if (csValue.CompareNoCase("Activable") != 0) { long c_lI; for ( c_lI = 1; _ap_szParams[c_lI] != NULL; c_lI ++ ) cslStringList.AddTail(_ap_szParams[c_lI]); } else cslStringList.AddTail("TRUE"); pclData->m_fn_vSetValueWithString(&cslStringList); } } } break; case SCR_EA_Anl_EndSection: s_pclAMS = NULL; break; case SCR_EA_Anl_BeginSection: { CString csAllocated = CString(_ap_szParams[1]); if ( csAllocated.CompareNoCase(g_c_csAllocatedMS) == 0 ) { //Selects the right list of AMS EdActors_ActorMiniStructureList *pclAMSList; CString csGroupName = CString(_ap_szParams[0]); 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 ); } /* ERROR_PREPARE_M(g_c_csActorModuleNameForErrors, "Loading a Mini Structure", "EdActors_ActorMiniStructure::m_fn_tdeCallBackLoad(...)", E_ERROR_GRAVITY_FATAL, "A section is referencing a MS which does not exist in Editor"); ERROR_ASSERT( bAMSFound );*/ //Allocates the MS if ( bAMSFound ) { pclAMS->m_fn_bAllocate(); s_pclAMS = pclAMS; } } } break; } return SCR_ERV_Anl_NormalReturn; }