// ai_intf.cpp : implementation file // #include "stdafx.h" #include "Defines.hpp" #include "ai_intf.hpp" #include "EdIRFrm.hpp" #include "EdIRIRD.hpp" #include "EdIRBeEn.hpp" #include "EdIRBeha.hpp" #include "EdIRStrg.hpp" #include "EdIRDVLs.hpp" #include "EdIRDVVw.hpp" #include "EdIRSave.hpp" #include "EdIRWaW.hpp" #include "OAc.h" #include "EDACModl.hpp" #include "WAW.h" #include "x:\cpa\main\inc\_EditID.h" // CPA2 ASilvescu 98-04-30 #include "edirwaw.hpp" #include "edirdat.hpp" // End CPA2 ASilvescu 98-04-30 //Stefan Dumitrean 19-06-98 ( choose font ) #include "EdIRRVw.hpp" //End Stefan Dumitrean 19-06-98 ( choose font ) //BEGIN ROMTEAM Cristi Petrescu 98-05- #include "showflag.hpp" //END ROMTEAM Cristi Petrescu 98-05- #include "x:\cpa\tempgrp\gam\locale\fonmem.h" #include "x:\cpa\tempgrp\gam\locale\fonerm.h" // infos static CString g_csTIAName = "Artificial Intelligence"; static CString g_csTIAAuthor = "Xavier Billault"; static CString g_csTIAVersion = "V 5.0.6 31/03/99"; static CString g_csTIAFrenchHelpFile = "EdIRfr.hlp"; static CString g_csTIAEnglishHelpFile = "EdIR.hlp"; BOOL g_bTipFirstTime = TRUE; /* * the DLL global definition */ tdstDLLIdentity g_stAIIdentity; CPA_EdIR_Interface *g_pclAIInterface; #define C_AI_MenuID_SaveDimensions 105 //Stefan Dumitrean 18-06-98 ( choose font ) #define C_AI_MenuID_ChooseFont 106 //End Stefan Dumitrean 18-06-98 #define C_AI_MenuID_ReloadTexts 107 #define C_AI_MenuID_ReloadInit 108 CString g_sReloadMessage; ////////////////////////////////////////////////////////////////// // class CPA_EdIR_Interface ////////////////////////////////////////////////////////////////// /**********************************************************************************/ CPA_EdIR_Interface::CPA_EdIR_Interface() { m_p_stDLLIdentity=&g_stAIIdentity; // Does your DLL can output in main game view ? m_stBaseDLLDefinition.bCanOutputIn3DView=FALSE; SetCurrent(FALSE); SetEditorInfo(g_csTIAName, g_csTIAAuthor, g_csTIAVersion, g_csTIAFrenchHelpFile, g_csTIAEnglishHelpFile); m_pclIRMainFrame=NULL; m_bIsOpened=FALSE; m_bIsProcessing = FALSE; //For Watch Window WAW_fn_hUserRegister(C_MODULE_NAME,fn_vCallBackForWatchWindow); } /* *======================================================================================= * ACP Messages Functions overload *======================================================================================= */ /**********************************************************************************/ void CPA_EdIR_Interface::fn_vJustAfterRegistered() { m_csBrainHelpFileNameAndPath= M_GetMainApp()->m_csEditorDataPath + CString("Objects\\Actors\\Help\\EdIRfr.hlp"); CString a_csTypes[] = { CString(C_szIABehaviourTypeName) }; fn_vRegisterObjectsType(a_csTypes, 1); SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csIntelligenceSectionName), CPA_EdIR_Frame::m_fn_tdeCallBackLoadIntelligence, SCR_CRC_c_RdL0_ForSection); SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csReflexSectionName), CPA_EdIR_Frame::m_fn_tdeCallBackLoadReflex, SCR_CRC_c_RdL0_ForSection); SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csDeclarationSectionName), CPA_EdIR_Frame::m_fn_tdeCallBackLoadDeclaration, SCR_CRC_c_RdL0_ForSection); // BEGIN CPA2 Cristi Petrescu 98-03- SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csMacroSectionName), CPA_EdIR_Frame::m_fn_tdeCallBackLoadMacro, SCR_CRC_c_RdL0_ForSection); // END CPA2 Cristi Petrescu 98-03- // BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04- SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csSubrSectionName), CPA_EdIR_Frame::m_fn_tdeCallBackLoadSubr, SCR_CRC_c_RdL0_ForSection); // END ROMTEAM CPA2 Cristi Petrescu 98-04- SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csBehaviourSectionName), CPA_EdIR_Frame::m_fn_tdeCreateMainBehaviour, SCR_CRC_c_RdL0_ForSection); } //************************************************************************************** void CPA_EdIR_Interface::fn_vConstruct() { //Creates the main frame (IR) if ( m_pclIRMainFrame == NULL ) { m_pclIRMainFrame = new CPA_EdIR_Frame; m_pclIRMainFrame->m_fn_vCreateEditor(); } } //************************************************************************************** void CPA_EdIR_Interface::fn_vLevelChanges() { if(m_pclIRMainFrame!=NULL) m_pclIRMainFrame->m_fn_vLevelChanges(); } //************************************************************************************** BOOL CPA_EdIR_Interface::fn_bAcceptToRunEngine() { if (m_bIsProcessing) return FALSE; if(m_pclIRMainFrame!=NULL) return m_pclIRMainFrame->m_fn_bAcceptToRunEngine(); else return TRUE; } //************************************************************************************** BOOL CPA_EdIR_Interface::fn_bAcceptToSave() { if(m_pclIRMainFrame!=NULL) return m_pclIRMainFrame->m_fn_bAcceptToSave(); else return TRUE; } //************************************************************************************** void CPA_EdIR_Interface::fn_vBeforeSaveAll() { m_bIsSaving = TRUE; if(m_pclIRMainFrame!=NULL) m_pclIRMainFrame->m_fn_vBeforeSaveAll(); } //************************************************************************************** void CPA_EdIR_Interface::fn_vAfterSaveAll() { m_bIsSaving = FALSE; if(m_pclIRMainFrame!=NULL) m_pclIRMainFrame->m_fn_vAfterSaveAll(); } //************************************************************************************** void CPA_EdIR_Interface::fn_vBeforeEngine() { if(m_pclIRMainFrame!=NULL) m_pclIRMainFrame->m_fn_vBeforeEngine(); g_oFrameGest.mfn_vSetRefresh(FALSE); if(m_bIsOpened && m_pclIRMainFrame!=NULL) { g_oFrameGest.mfn_vDisactivateWindow(m_pclIRMainFrame); g_oFrameGest.mfn_vActivateWindow(GetInterface()->GetModelFrame()); } g_oFrameGest.mfn_vSetRefresh(TRUE); // m_fn_vHideEditor(); } //************************************************************************************** void CPA_EdIR_Interface::fn_vBeforeEditor() { if(m_pclIRMainFrame!=NULL) m_pclIRMainFrame->m_fn_vBeforeEditor(); } //************************************************************************************** BOOL CPA_EdIR_Interface::fn_bOnInvalidateLink(CPA_BaseObject *pOwner, CPA_BaseObject *pReferencedObject, BOOL bDestroyed) { if(pOwner->GetType()==C_szIABehaviourTypeName) { CPA_EdIR_MainBehaviour *pclMainBehaviour=(CPA_EdIR_MainBehaviour *)pOwner; if(pclMainBehaviour->m_pclBehaviour!=NULL) { pclMainBehaviour->m_pclBehaviour->m_fn_vSetModified(TRUE); } } if(pOwner->GetType()==C_szActorModelTypeName) { CPA_Actor *pclActor=(CPA_Actor *)pOwner; EdActors_EditorActorModel *pclModelOfNewInstance=(EdActors_EditorActorModel *)(pclActor->m_fn_pclGetEditorActor()); if(pclModelOfNewInstance->m_pclBrain!=NULL) { //Save IA pclModelOfNewInstance->m_pclBrain->m_fn_vSetModified(TRUE); } } return FALSE; } //*********************************************************************** BOOL CPA_EdIR_Interface::fn_bCanActivateEditor(CPA_List *) { return TRUE; } //*********************************************************************** void CPA_EdIR_Interface::fn_vOnActivateEditor(CPA_List *,BOOL bBackActivated) { m_fn_vShowEditor(); } //*********************************************************************** BOOL CPA_EdIR_Interface::fn_bCanCloseEditor(void) { return TRUE; } //*********************************************************************** void CPA_EdIR_Interface::fn_vOnCloseEditor(void) { } //************************************************************************************** BOOL CPA_EdIR_Interface::fn_bDefineSubMenu(EDT_SubMenu *p_oEDTSubMenu) { if (p_oEDTSubMenu->GetSubMenuType() == C_SubMenuTool) { // add entry to reload texts p_oEDTSubMenu->AddAnEntry(this, "Reload Texts", C_AI_MenuID_ReloadTexts); // add entry to reload initial values CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName)); CPA_Actor *pclSelectedActor=(CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0); if (pclSelectedActor) p_oEDTSubMenu->AddAnEntry(this, "Reload Initial Values ...", C_AI_MenuID_ReloadInit); } /* if(p_oEDTSubMenu->GetSubMenuType()==C_SubMenuPreference) { if(m_bIsOpened) p_oEDTSubMenu->AddAnEntry(this,"Save dimensions (AI)",C_AI_MenuID_SaveDimensions,FALSE); } */ //Stefan Dumitrean 18-06-98 ( choose font ) /* if( p_oEDTSubMenu->GetSubMenuType() == C_SubMenuTool ) p_oEDTSubMenu->AddAnEntry( this, "Choose AI editor font...", C_AI_MenuID_ChooseFont ); */ //End Stefan Dumitrean 18-06-98 ( choose font ) return TRUE; } //************************************************************************************** void CPA_EdIR_Interface::_OnSubMenuCommand(EDT_SubMenu *p_oEDTSubMenu,UINT uiMsgID) { char szSection[256]; char szText[256]; switch(uiMsgID) { case C_AI_MenuID_ReloadTexts: // status bar M_GetMainWnd()->UpdateStatus("Reloading Text... reinit fonts", C_STATUSPANE_INFOS, C_STATUS_NORMAL); // close corresponding LinkTable SCR_fn_v_Link_CloseTable(FON_fn_p_stGetLinkTable()); // reinit corresponding memory FON_fn_vReinitFONMemory(); // init corresponding structures FON_fn_vReInitFonts(); // status bar M_GetMainWnd()->UpdateStatus("Reloading Text... reinit scripts", C_STATUSPANE_INFOS, C_STATUS_NORMAL); // delete open sections for FON SCR_fn_v_RdL0_DeleteOpenSection(FON_C_SectionAddNewStrings, SCR_CDR_c_RdL0_Contains); SCR_fn_v_RdL0_DeleteOpenSection(FON_C_SectionNewString, SCR_CDR_c_RdL0_Contains); SCR_fn_v_RdL0_DeleteOpenSection(FON_C_SectionNewUpperString, SCR_CDR_c_RdL0_Contains); SCR_fn_v_RdL0_DeleteOpenSection(FON_C_SectionNewStringLength, SCR_CDR_c_RdL0_Contains); // delete open sections for DSC SCR_fn_v_RdL0_DeleteOpenSection(C_EntryAddStringsFile, SCR_CDR_c_RdL0_Contains); SCR_fn_v_RdL0_DeleteOpenSection(C_AddLanguage, SCR_CDR_c_RdL0_Contains); SCR_fn_v_RdL0_DeleteOpenSection(".txt", SCR_CDR_c_RdL0_Contains); // status bar M_GetMainWnd()->UpdateStatus("Reloading Text... load text sections", C_STATUSPANE_INFOS, C_STATUS_NORMAL); // reload corresponding entries SCR_fn_v_RdL0_ComputeSectionName(szSection, C_GameScriptFile, C_SectionAddStringsFiles, ""); SCR_fnp_st_RdL0_AnalyseSection(szSection, SCR_CDF_uw_Anl_ForceAnalyse); // status bar M_GetMainWnd()->UpdateStatus("Reloading Text : OK.", C_STATUSPANE_INFOS, C_STATUS_NORMAL); break; case C_AI_MenuID_ReloadInit: { // get selected actor CPA_DLLBase *pclActorDLL = (CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName)); CPA_Actor *pclSelectedActor = (CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0); if (!pclSelectedActor) break; // get corresponding model CPA_Actor *pModel = pclSelectedActor->m_fn_bIsAModel() ? pclSelectedActor : pclSelectedActor->m_fn_pclGetModel(); // status bar sprintf(szText, "Reloading Initial Values for instances of model %s", pModel->GetName()); M_GetMainWnd()->UpdateStatus("", C_STATUSPANE_INFOS, C_STATUS_NORMAL); // change the callback for the section init SCR_tdst_Anl_Callback *pCallback = SCR_fnp_st_RdL0_GetRegisterCallback(C_InitVariables_String, SCR_CRC_c_RdL0_ForSection); SCR_tdpfn_Anl_Callback pPreviousCallback = pCallback->pfn_eCallback; /* Address of function */ SCR_fn_v_RdL0_DeleteRegisterCallback(C_InitVariables_String, SCR_CRC_c_RdL0_ForSection, SCR_CDR_c_RdL0_Match); SCR_fn_v_RdL0_RegisterCallback(C_InitVariables_String, m_fn_tdeCallBackReloadInitValues, SCR_CRC_c_RdL0_ForSection); // get all instances of the model CPA_List clInstancesList; g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList, "", C_szActorInstanceTypeName, pModel); POSITION pos=clInstancesList.GetHeadPosition(); while (pos!=NULL) { CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetNext(pos)); char szBrainSection[256]; char szInitSection[256]; g_sReloadMessage = ""; // compute section name SCR_fn_v_RdL0_ComputeSectionName(szBrainSection, (char *)(LPCSTR) pclInstance->GetReferencedSectionName(), "Brain" ,""); SCR_fn_v_RdL0_ComputeSectionName(szInitSection, szBrainSection, C_InitVariables_String ,""); // analyse section with the new callback if (SCR_fn_c_RdL0_IsSectionExists(szInitSection)) { SCR_M_RdL0_SetContextLong(1,0,(long)pclInstance); SCR_fnp_st_RdL0_AnalyseSection(szInitSection, SCR_CDF_uw_Anl_ForceAnalyse); } if (g_sReloadMessage != "") { MessageBox(NULL, "The following variables had a specific value and were reloaded :\n" + g_sReloadMessage, "Reload values for instance " + pclInstance->GetName(), IDOK); } else { MessageBox(NULL, "The instance had no specific values for its designer variables", "Reload values for instance " + pclInstance->GetName(), IDOK); } } // update display pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_DisplayActor,(long)NULL); pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_DisplayActor,(long)pclSelectedActor); // restore the callback for the section init SCR_fn_v_RdL0_DeleteRegisterCallback(C_InitVariables_String, SCR_CRC_c_RdL0_ForSection, SCR_CDR_c_RdL0_Match); SCR_fn_v_RdL0_RegisterCallback(C_InitVariables_String, pPreviousCallback, SCR_CRC_c_RdL0_ForSection); // status bar M_GetMainWnd()->UpdateStatus("Reloading Initial Values : OK.", C_STATUSPANE_INFOS, C_STATUS_NORMAL); } break; /* case C_AI_MenuID_SaveDimensions: if(m_bIsOpened) m_clDocument.m_pub_fn_bSavePreferences(); break; */ //Stefan Dmmumitrean 18-06-98 ( choose font ) /* case C_AI_MenuID_ChooseFont: if( m_pclIRMainFrame && m_pclIRMainFrame->m_fn_pclGetEdRulesView() ) (m_pclIRMainFrame->m_fn_pclGetEdRulesView())->m_fn_vChooseFont(); break; */ //End Stefan Dumitrean 18-06-98 ( choose font ) default : break; } } //*********************************************************************** void CPA_EdIR_Interface::m_fn_vShowEditor() { g_oFrameGest.mfn_vSetRefresh(FALSE); if(/*!m_bIsOpened && */m_pclIRMainFrame!=NULL) { g_oFrameGest.mfn_vDisactivateWindow(GetInterface()->GetModelFrame()); g_oFrameGest.mfn_vActivateWindow(m_pclIRMainFrame); m_bIsOpened=TRUE; } g_oFrameGest.mfn_vSetRefresh(TRUE); // Shaitan Correction CPA_EdIR_Brain *p_clCurrentBrain = m_pclIRMainFrame->m_pclBrain; //End Shaitan Correction // CPA2 ASilvescu 98-05-08 // Load watch variables CPA_List clInstancesList; GetInterface()->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,NO_CRITERIA/*pclModel*/); POSITION pos = clInstancesList.GetHeadPosition(); while(pos!=NULL) { CPA_Actor *pclInstance = (CPA_Actor *)(clInstancesList.GetNext(pos)); EdActors_EditorActor *edActor = pclInstance->m_fn_pclGetEditorActor(); CString name = edActor->m_pclActor->GetName(); CString iniFileName = M_GetMainApp()->m_csEditorDataPath; iniFileName += "watch.dat"; char var[16384], *c; GetPrivateProfileSection(name, var, sizeof(var), iniFileName); for(c=var; *c; c+=lstrlen(c)+1) { CTL_Editor_Data *data = NULL; char *d = strchr(c, '='); if(d) { *d++ = 0; if(!lstrcmpi(d, "Designer Variables")) { m_pclIRMainFrame->m_fn_vShowBrain(((EdActors_EditorActorModel *)pclInstance->m_fn_pclGetModel()->m_fn_pclGetEditorActor())->m_pclBrain); CTL_Editor_DataList *datalist = edActor->m_pclListOfDesignerVariableType; data = datalist->m_fn_pclGetDataFromName(CString(c)); if(data) { fn_vAddValueInWatch(data); fn_vSetInWatch(data,TRUE); } } } c = d; } } // End CPA2 ASilvescu 98-05-08 // Shaitan Correction if (p_clCurrentBrain) m_pclIRMainFrame->m_fn_vShowBrain(p_clCurrentBrain); //End Shaitan Correction // BEGIN ROMTEAM Cristi Petrescu 98-08- //Enable windows ((CWnd *) m_pclIRMainFrame -> m_fn_pclGetDiagrammeView ()) -> EnableWindow (TRUE); ((CWnd *) m_pclIRMainFrame -> m_fn_pclGetButtonView ()) -> EnableWindow (TRUE); // END ROMTEAM Cristi Petrescu 98-08- } //*********************************************************************** void CPA_EdIR_Interface::m_fn_vHideEditor() { g_oFrameGest.mfn_vSetRefresh(FALSE); if(m_bIsOpened && m_pclIRMainFrame!=NULL) { g_oFrameGest.mfn_vDisactivateWindow(m_pclIRMainFrame); g_oFrameGest.mfn_vActivateWindow(GetInterface()->GetModelFrame()); m_bIsOpened=FALSE; } g_oFrameGest.mfn_vSetRefresh(TRUE); } /* *======================================================================================= * tool dll functions overload *======================================================================================= */ /**********************************************************************************/ long CPA_EdIR_Interface::OnQueryAction(CPA_EditorBase *p_oSender,WPARAM wParam,LPARAM lParam) { long lResult=0; switch(wParam) { case C_uiAI_GetNewDesignerVariableList: { lResult=(long) new CPA_EdIR_DesignerVariableList; } break; case C_uiAI_DeleteDesignerVariableList: { delete (CPA_EdIR_DesignerVariableList *)lParam; lResult=1; } break; case C_uiAI_DesignerVariableView_UpdateDisplayWithValues: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)pstCom->pvThis; CTL_Editor_DataList *pclDataList=(CTL_Editor_DataList *)pstCom->pvData; pclDesignerVariableView->m_fn_vUpdateDisplayWithValues(pclDataList); lResult=1; } break; case C_uiAI_DesignerVariableView_UpdateDisplay: { CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)lParam; pclDesignerVariableView->m_fn_vUpdateDisplay(); lResult=1; } break; case C_uiAI_DesignerVariableView_HideVariables: { CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)lParam; pclDesignerVariableView->mfn_vHideVariables(TRUE); lResult=1; } break; case C_uiAI_DesignerVariableView_ShowVariables: { CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)lParam; pclDesignerVariableView->mfn_vHideVariables(FALSE); lResult=1; } break; case C_uiAI_DesignerVariableView_UpdateControls: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)pstCom->pvThis; CTL_Editor_ControlList *pclControlList=(CTL_Editor_ControlList *)pstCom->pvData; pclDesignerVariableView->m_fn_vUpdateControls(pclControlList); lResult=1; } break; case C_uiAI_DesignerVariableView_GetOldHeight: { CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)lParam; lResult=pclDesignerVariableView->m_fn_ulGetOldHeight(); } break; case C_uiAI_DesignerVariableView_SetOldHeight: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)pstCom->pvThis; unsigned long ulOldHeight=pstCom->lData; pclDesignerVariableView->m_fn_vSetOldHeight(ulOldHeight); lResult=1; } break; case C_uiAI_DesignerVariableView_GetRuntimeClass: { lResult=(long)RUNTIME_CLASS(CPA_EdIR_DesignerVariablesView); } break; case C_uiAI_GetNewIA: { lResult=(long) new CPA_EdIR_Brain((CPA_Actor *)lParam); } break; case C_uiAI_GetNewCopyOfIA: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_EdIR_Brain *pclBrain=(CPA_EdIR_Brain *)pstCom->pvThis; CPA_Actor *pclModel=(CPA_Actor *)pstCom->pvData; lResult=(long) new CPA_EdIR_Brain(pclModel,pclBrain); } break; case C_uiAI_DeleteIA: { delete (CPA_EdIR_Brain *)lParam; lResult=1; } break; case C_uiAI_ShowIA: { m_pclIRMainFrame->m_fn_vShowBrain((CPA_EdIR_Brain *)lParam); lResult=1; } break; case C_uiAI_LoadIA: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclModel=(CPA_Actor *)pstCom->pvThis; CString *pcsName=(CString *)pstCom->pvData; m_pclIRMainFrame->m_fn_vLoadBrain(pclModel,*pcsName); lResult=1; } break; // Shaitan => state list in the level case C_uiAI_ProcessModifiedIA: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclModel=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvData; EdActors_EditorActorModel *pclModelOfNewInstance=(EdActors_EditorActorModel *)(pclModel->m_fn_pclGetEditorActor()); if (pclModelOfNewInstance->m_pclBrain && (!pclModelOfNewInstance->m_pclBrain->m_fn_bIAIsAlreadyProcessed() || pclModelOfNewInstance->m_pclBrain->m_bHasBeenModified)) { if(pclModelOfNewInstance->m_pclBrain->m_fn_bProcessIA(FALSE,pclInstance)) { lResult=1; } else { lResult=0; } } else { lResult=0; } } break; // End Shaitan => state list in the level // Shaitan => optimisation lists in the level case C_uiAI_UpdateAndProcessIA: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclModel=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvData; EdActors_EditorActorModel *pclModelOfNewInstance=(EdActors_EditorActorModel *)(pclModel->m_fn_pclGetEditorActor()); if(pclModelOfNewInstance->m_pclBrain!=NULL) { pclModelOfNewInstance->m_pclBrain->m_fn_vSetModified(TRUE); if(pclModelOfNewInstance->m_pclBrain->m_fn_bProcessIA(TRUE,pclInstance)) { lResult=1; } else { lResult=0; } } else { lResult=0; } } break; // End Shaitan => optimisation lists in the level case C_uiAI_ProcessIA: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclModel=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvData; EdActors_EditorActorModel *pclModelOfNewInstance=(EdActors_EditorActorModel *)(pclModel->m_fn_pclGetEditorActor()); if(pclModelOfNewInstance->m_pclBrain!=NULL) { if(pclModelOfNewInstance->m_pclBrain->m_fn_bProcessIA(TRUE,pclInstance)) { lResult=1; } else { lResult=0; } } else { lResult=0; } } break; case C_uiAI_SaveIA: { CPA_Actor *pclActor=(CPA_Actor *)lParam; EdActors_EditorActorModel *pclModelOfNewInstance=(EdActors_EditorActorModel *)(pclActor->m_fn_pclGetEditorActor()); if(pclModelOfNewInstance->m_pclBrain!=NULL) { pclModelOfNewInstance->m_pclBrain->m_fn_vSetModified(TRUE); } lResult=1; } break; case C_uiAI_UpdateIA: { OnQueryAction(g_pclAIInterface,C_uiAI_ProcessIA,lParam); OnQueryAction(g_pclAIInterface,C_uiAI_SaveIA,lParam); } break; case C_uiAI_SaveInitValuesInBrainMS: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; SCR_tdst_File_Description *pstFile=(SCR_tdst_File_Description *)pstCom->pvData; EdIR_fn_vSaveInitValuesInBrainMS(pclInstance,pstFile); lResult=1; } break; case C_uiAI_MustSaveAIEntryInModel: { CPA_EdIR_Brain *pclBrain=(CPA_EdIR_Brain *)lParam; CPA_EdIR_MainBehaviour *pclDsgVarBehaviour=NULL; if(!pclBrain->m_clListOfDeclarations.IsEmpty()) pclDsgVarBehaviour=pclBrain->m_clListOfDeclarations.GetHead(); if( (!pclBrain->m_clListOfIntelligenceBehaviours.IsEmpty()) || (!pclBrain->m_clListOfReflexBehaviours.IsEmpty()) // BEGIN CPA2 Cristi Petrescu 98-03- || (!pclBrain->m_clListOfMacros.IsEmpty()) // END CPA2 Cristi Petrescu 98-03- // BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04- || (!pclBrain->m_clListOfMacros.IsEmpty()) // END ROMTEAM CPA2 Cristi Petrescu 98-04- || ( (pclDsgVarBehaviour!=NULL) && ( (!pclDsgVarBehaviour->m_csText.IsEmpty()) || ( (pclDsgVarBehaviour->m_pclBehaviour!=NULL) && (!pclDsgVarBehaviour->m_pclBehaviour->m_fn_csGetRules().IsEmpty()) ) ) ) ) { lResult=(long)TRUE; } else { lResult=(long)FALSE; } } break; case C_uiAI_GetDsgVarName: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclModel=pclInstance->m_fn_pclGetModel(); EdActors_EditorActorModel *pclActorModel=pclModel->m_fn_pclGetEditorModel(); long lDsgVarIndex=pstCom->lData; pstCom->csData=pclActorModel->m_pclBrain->m_fn_csGetDsgVarName(lDsgVarIndex); } break; case C_uiAI_ShowBehaviour: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclModel=pclInstance->m_fn_pclGetModel(); EdActors_EditorActorModel *pclActorModel=pclModel->m_fn_pclGetEditorModel(); struct tdstNodeInterpret_ *pstNode=(struct tdstNodeInterpret_ *)pstCom->pvData; pclActorModel->m_pclBrain->m_fn_vShowBehaviour(pstNode); } break; case C_uiAI_ShowEditor: { CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName)); CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0); m_fn_vShowEditor(); pclDesignerVariableView->m_fn_vUpdateDisplay(); // display Tip of the Day GetInterface()->fn_vDisplayTipOfDay("Intelligence", "TIA", g_bTipFirstTime); g_bTipFirstTime = FALSE; break; } case C_uiAI_HideEditor: { CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName)); CPA_EdIR_DesignerVariablesView *pclDesignerVariableView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0); m_fn_vHideEditor(); pclDesignerVariableView->m_fn_vUpdateDisplay(); break; } case C_uiAI_HasLostFocus: m_bIsOpened=FALSE; break; //BEGIN ROMTEAM Cristi Petrescu 98-05- case C_uiAI_MustBuildDebugInfo: { tdstActorsIACom *pstCom = (tdstActorsIACom *) lParam; CPA_Actor *pclInstance = (CPA_Actor *) pstCom -> pvThis; CPA_Actor *pclModel = pclInstance -> m_fn_pclGetModel (); EdActors_EditorActorModel *pclActorModel = pclModel -> m_fn_pclGetEditorModel (); BOOL bBuild = *((BOOL *) (pstCom -> pvData)); pclActorModel -> m_pclBrain -> m_fn_vMustBuildDebugInfo (bBuild); } break; case C_uiAI_GetBehaviourName: { tdstActorsIACom *pstCom = (tdstActorsIACom *) lParam; CPA_Actor *pclInstance = (CPA_Actor *) pstCom -> pvThis; CPA_Actor *pclModel = pclInstance -> m_fn_pclGetModel (); EdActors_EditorActorModel *pclActorModel = pclModel -> m_fn_pclGetEditorModel (); struct tdstNodeInterpret_ *pstNode=(struct tdstNodeInterpret_ *)pstCom->pvData; pstCom -> csData = pclActorModel -> m_pclBrain -> m_fn_csGetBehaviourName (pstNode); } break; /* case C_uiAI_StartExecutedCodeDisplay: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclModel=pclInstance->m_fn_pclGetModel(); EdActors_EditorActorModel *pclActorModel=pclModel->m_fn_pclGetEditorModel(); CString csBehaviourName = *((CString *) pstCom->pvData); pclActorModel->m_pclBrain->m_fn_vStartExecutedCodeDisplay (csBehaviourName); } break; case C_uiAI_StopExecutedCodeDisplay: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclModel=pclInstance->m_fn_pclGetModel(); EdActors_EditorActorModel *pclActorModel=pclModel->m_fn_pclGetEditorModel(); CString csBehaviourName = *((CString *) pstCom->pvData); pclActorModel->m_pclBrain->m_fn_vStopExecutedCodeDisplay (csBehaviourName); } break; */ case C_uiAI_ClearExecutedNodes: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclModel=pclInstance->m_fn_pclGetModel(); EdActors_EditorActorModel *pclActorModel=pclModel->m_fn_pclGetEditorModel(); CString csBehaviourName = *((CString *) pstCom->pvData); pclActorModel->m_pclBrain->m_fn_vClearExecutedNodes (csBehaviourName); } break; case C_uiAI_SetOneExecutedNode: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclModel=pclInstance->m_fn_pclGetModel(); EdActors_EditorActorModel *pclActorModel=pclModel->m_fn_pclGetEditorModel(); struct tdstNodeInterpret_ *pstNode=(struct tdstNodeInterpret_ *)pstCom->pvData; pclActorModel->m_pclBrain->m_fn_vSetOneExecutedNode (pstNode); } break; case C_uiAI_ShowBehaviourByEngineNode: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclModel=pclInstance->m_fn_pclGetModel(); EdActors_EditorActorModel *pclActorModel=pclModel->m_fn_pclGetEditorModel(); struct tdstNodeInterpret_ *pstNode=(struct tdstNodeInterpret_ *)pstCom->pvData; // BEGIN ROMTEAM Cristi Petrescu 98-06- m_pclIRMainFrame -> m_pclDebugBrain = pclActorModel->m_pclBrain; // END ROMTEAM Cristi Petrescu 98-06- // BEGIN ROMTEAM Cristi Petrescu 98-08- //Disable windows ((CWnd *) m_pclIRMainFrame -> m_fn_pclGetDiagrammeView ()) -> EnableWindow (FALSE); ((CWnd *) m_pclIRMainFrame -> m_fn_pclGetButtonView ()) -> EnableWindow (FALSE); // END ROMTEAM Cristi Petrescu 98-08- pclActorModel->m_pclBrain->m_fn_vShowBehaviour (pstNode); } break; case C_uiAI_ShowBehaviourByName: { tdstActorsIACom *pstCom=(tdstActorsIACom *)lParam; CPA_Actor *pclInstance=(CPA_Actor *)pstCom->pvThis; CPA_Actor *pclModel=pclInstance->m_fn_pclGetModel(); EdActors_EditorActorModel *pclActorModel=pclModel->m_fn_pclGetEditorModel(); CString csBehaviourName = *((CString *) pstCom->pvData); // BEGIN ROMTEAM Cristi Petrescu 98-06- m_pclIRMainFrame -> m_pclDebugBrain = pclActorModel->m_pclBrain; // END ROMTEAM Cristi Petrescu 98-06- // BEGIN ROMTEAM Cristi Petrescu 98-08- //Disable windows ((CWnd *) m_pclIRMainFrame -> m_fn_pclGetDiagrammeView ()) -> EnableWindow (FALSE); ((CWnd *) m_pclIRMainFrame -> m_fn_pclGetButtonView ()) -> EnableWindow (FALSE); // END ROMTEAM Cristi Petrescu 98-08- pclActorModel->m_pclBrain->m_fn_vShowBehaviour (csBehaviourName); } break; case C_uiAI_ShowFlags: { switch (lParam) { case E_MarkExecutedLines: if (m_pclIRMainFrame ) m_pclIRMainFrame -> m_fn_vMarkExecutedLines (); break; case E_ShowTestsAndActions: m_pclIRMainFrame -> m_fn_vShowTestsAndActions (); break; case E_ShowActions: m_pclIRMainFrame -> m_fn_vShowActions (); break; } if (m_pclIRMainFrame ) m_pclIRMainFrame -> m_pclBrain -> m_fn_vShowBehaviour (NULL); } break; // BEGIN ROMTEAM Cristi Petrescu 98-08- case C_uiAI_GetVariableIndex: { CString csVariableName = * ((CString *) lParam); lResult = m_pclIRMainFrame -> m_pclDebugBrain -> m_fn_lGetVariableIndex (csVariableName); } break; // END ROMTEAM Cristi Petrescu 98-08- case C_uiAI_AddVariableInWatch: { CTL_Editor_Data *pclData = (CTL_Editor_Data *) lParam; fn_vAddValueInWatch(pclData); fn_vSetInWatch(pclData,TRUE); } break; default: break; } return lResult; } /**********************************************************************************/ SCR_tde_Anl_ReturnValue CPA_EdIR_Interface::m_fn_tdeCallBackReloadInitValues(SCR_tdst_File_Description *pfFile, char *szAction, char *szPars[], SCR_tde_Anl_Action eType) { tdstEngineObject *pstEngineObject; AI_tdstMind *p_stMind; CPA_Actor *pclInstance; if (eType==SCR_EA_Anl_BeginSection) { SCR_M_RdL0_GetContextLong(0,0,CPA_Actor *,pclInstance); SCR_M_RdL0_SetSectionLong(0, 0, (long) pclInstance); } if (eType == SCR_EA_Anl_Entry) { long lNumDsgVar; CString csDsgVarType = szAction; CString csDsgVarName = szPars[1]; CString csDsgVarValue = szPars[2]; SCR_M_RdL0_GetSectionLong(0, 0, CPA_Actor *, pclInstance); pstEngineObject = (tdstEngineObject *)pclInstance->GetStruct(); p_stMind = (pstEngineObject->h_Brain) ? M_pstGetMindOfBrain(pstEngineObject->h_Brain) : NULL; if (p_stMind) { char cElement=(szPars[1][0]=='@'); char *szName=&szPars[1][cElement]; // get corresponding variable for (lNumDsgVar = 0; lNumDsgVar < M_GetNbDsgVar(p_stMind); lNumDsgVar++) { if (!stricmp(M_GetDsgVarName(p_stMind, lNumDsgVar), szName)) break; } // if variable was found if (lNumDsgVar < M_GetNbDsgVar(p_stMind)) { tdeDsgVarTypeId eDsgVarTypeId=fn_eFindDsgVarTypeIdFromScriptName(szAction); // element of array if (cElement) { unsigned char ucIndex= (unsigned char) atoi(szPars[0]); // check the type if (fn_GetDsgVarType(M_GetDsgVarType(p_stMind,lNumDsgVar)) == E_vt_Array) { // check the element tdstArray *p_stArray =(tdstArray*) M_GetDsgVarAddrInit(p_stMind,lNumDsgVar); if (eDsgVarTypeId ==M_ARRAY_TYPE(p_stArray)) { // check index if (ucIndex