3373 lines
120 KiB
C++
3373 lines
120 KiB
C++
// EdIRIRD.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
|
||
#include "Defines.hpp"
|
||
|
||
#ifdef D_ED_IR_ACTIVE
|
||
|
||
#include "EdIRIRD.hpp"
|
||
|
||
#include "EdIRBvw.hpp"
|
||
#include "EdIRBtVw.hpp"
|
||
#include "EdIRBeEn.hpp"
|
||
#include "EdIRBeha.hpp"
|
||
#include "EdIRFrm.hpp"
|
||
#include "EdIRBis.hpp"
|
||
#include "EdIRDVVw.hpp"
|
||
#include "EdIRDVLs.hpp"
|
||
#include "EdIRStrg.hpp"
|
||
#include "EdIR2Eng.hpp"
|
||
#include "EdIRGlob.hpp"
|
||
#include "EdIRCtl.hpp"
|
||
#include "EdIRDat.hpp"
|
||
#include "EdIRQuer.hpp"
|
||
#include "EdIRWaW.hpp"
|
||
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
#include "edirrvw.hpp"
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
|
||
#include "EdIRIAWd.hpp"
|
||
|
||
#include "ai_intf.hpp"
|
||
|
||
#include "Ctl.h"
|
||
|
||
#include "_Ainterf.hpp"
|
||
|
||
#include "EDACModl.hpp"
|
||
|
||
#include "TFA.h"
|
||
|
||
#include "DPT.h"
|
||
|
||
#include "incAI.h"
|
||
|
||
#include "x:\cpa\main\inc\_EditID.h"
|
||
|
||
#include "_Actors.hpp"
|
||
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
#include "EdIRMacL.hpp"
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
extern CPA_EdIR_MacroList g_clMacroList;
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// class CPA_EdIR_Brain
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
static long gs_lDummyData;
|
||
|
||
/****************************************************************************/
|
||
CPA_EdIR_Brain::CPA_EdIR_Brain(CPA_Actor *pclModel)
|
||
{
|
||
m_pclModel =pclModel;
|
||
m_bHasBeenModified =FALSE;
|
||
m_bOldApplicationIsOK =TRUE;
|
||
m_bDsgVarControlsAreCreated =FALSE;
|
||
m_bMustReInitBehaviour =FALSE;
|
||
m_bAlreadyProcessed =FALSE;
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
m_bMustBuildDebugInfo = FALSE;
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-06-
|
||
m_bShowPrivateVariable = FALSE;
|
||
//END ROMTEAM Cristi Petrescu 98-06-
|
||
//ANNECY CB
|
||
m_bFirstShow = TRUE;
|
||
m_bCanQuickSave = TRUE;
|
||
//END ANNECY
|
||
}
|
||
|
||
/****************************************************************************/
|
||
CPA_EdIR_Brain::CPA_EdIR_Brain(CPA_Actor *pclModel,CPA_EdIR_Brain *pclBrain)
|
||
:m_clListOfIntelligenceBehaviours(pclModel,&(pclBrain->m_clListOfIntelligenceBehaviours)),
|
||
m_clListOfReflexBehaviours(pclModel,&(pclBrain->m_clListOfReflexBehaviours)),
|
||
m_clListOfDeclarations(pclModel,&(pclBrain->m_clListOfDeclarations)),
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
m_clListOfMacros(pclModel,&(pclBrain->m_clListOfMacros)),
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
m_clListOfSubrs(pclModel,&(pclBrain->m_clListOfSubrs))
|
||
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
{
|
||
m_pclModel =pclModel;
|
||
m_bHasBeenModified =FALSE;
|
||
m_bOldApplicationIsOK =TRUE;
|
||
m_bDsgVarControlsAreCreated =FALSE;
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
m_bMustBuildDebugInfo = FALSE;
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-06-
|
||
m_bShowPrivateVariable = FALSE;
|
||
//END ROMTEAM Cristi Petrescu 98-06-
|
||
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
// sets the macro list
|
||
// cleanup the macro list
|
||
// g_clMacroList.m_fn_vDestroyAndRemoveAllEntries();
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
|
||
//Renames all behaviour
|
||
POSITION pos=m_clListOfIntelligenceBehaviours.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfIntelligenceBehaviours.GetNext(pos);
|
||
CString csBehaviourName=pclMainBehaviour->GetName();
|
||
|
||
m_fn_vReplaceBehaviourNames(csBehaviourName);
|
||
|
||
pclMainBehaviour->fn_eRename(m_fn_csGetModelName()+"_"+csBehaviourName);
|
||
}
|
||
|
||
pos=m_clListOfReflexBehaviours.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfReflexBehaviours.GetNext(pos);
|
||
CString csBehaviourName=pclMainBehaviour->GetName();
|
||
|
||
m_fn_vReplaceBehaviourNames(csBehaviourName);
|
||
|
||
pclMainBehaviour->fn_eRename(m_fn_csGetModelName()+"_"+csBehaviourName);
|
||
}
|
||
|
||
// Notifies new IA
|
||
m_fn_vNotify();
|
||
|
||
m_fn_vSetModified(TRUE);
|
||
}
|
||
|
||
/****************************************************************************/
|
||
CPA_EdIR_Brain::~CPA_EdIR_Brain()
|
||
{
|
||
m_clListOfIntelligenceBehaviours.m_fn_vDeleteAllMainBehaviours();
|
||
m_clListOfReflexBehaviours.m_fn_vDeleteAllMainBehaviours();
|
||
m_clListOfDeclarations.m_fn_vDeleteAllMainBehaviours();
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
m_clListOfMacros.m_fn_vDeleteAllMainBehaviours();
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
m_clListOfSubrs.m_fn_vDeleteAllMainBehaviours();
|
||
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vReplaceBehaviourNames(CString csBehaviourName)
|
||
{
|
||
CString csFamilyName=m_pclModel->m_fn_csGetFamilyName();
|
||
|
||
POSITION pos=m_clListOfIntelligenceBehaviours.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfIntelligenceBehaviours.GetNext(pos);
|
||
CString csBehaviourText=pclMainBehaviour->m_csText;
|
||
|
||
pclMainBehaviour->m_csText=fn_csReplaceString(csBehaviourText,"\""+csBehaviourName+"\"","\""+m_fn_csGetModelName()+"_"+csBehaviourName+"\"");
|
||
}
|
||
|
||
pos=m_clListOfReflexBehaviours.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfReflexBehaviours.GetNext(pos);
|
||
CString csBehaviourText=pclMainBehaviour->m_csText;
|
||
|
||
pclMainBehaviour->m_csText=fn_csReplaceString(csBehaviourText,"\""+csBehaviourName+"\"","\""+m_fn_csGetModelName()+"_"+csBehaviourName+"\"");
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vUpdateBehavioursList(CPA_EdIR_DiagView *pclDiagView,tdeEditState tdeSate)
|
||
{
|
||
CPA_EdIR_MainBehaviourList *pclBehavioursList;
|
||
BOOL bDeclarationMode;
|
||
|
||
switch(tdeSate)
|
||
{
|
||
case EditIntell:
|
||
pclBehavioursList=&m_clListOfIntelligenceBehaviours;
|
||
bDeclarationMode=FALSE;
|
||
break;
|
||
|
||
case EditReflex:
|
||
pclBehavioursList=&m_clListOfReflexBehaviours;
|
||
bDeclarationMode=FALSE;
|
||
break;
|
||
|
||
case EditDecl:
|
||
pclBehavioursList=&m_clListOfDeclarations;
|
||
bDeclarationMode=TRUE;
|
||
break;
|
||
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
case EditMacro:
|
||
pclBehavioursList=&m_clListOfMacros;
|
||
bDeclarationMode=TRUE;
|
||
break;
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
|
||
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
case EditSubr:
|
||
pclBehavioursList=&m_clListOfSubrs;
|
||
bDeclarationMode=FALSE;
|
||
break;
|
||
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
|
||
default:
|
||
pclBehavioursList=NULL;
|
||
break;
|
||
}
|
||
|
||
if(pclBehavioursList)
|
||
{
|
||
POSITION pos=pclBehavioursList->GetHeadPosition();
|
||
//ANNECY CB
|
||
pclDiagView->m_bSpecialCB = TRUE;
|
||
//END
|
||
while(pos!=NULL)
|
||
pclBehavioursList->GetNext(pos)->m_fn_vUpdateBehaviour(pclDiagView,bDeclarationMode);
|
||
//ANNECY CB
|
||
pclDiagView->m_bSpecialCB = FALSE;
|
||
//END
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
CString CPA_EdIR_Brain::m_fn_csGetModelName()
|
||
{
|
||
return m_pclModel->GetName();
|
||
}
|
||
|
||
/****************************************************************************/
|
||
CPA_Actor *CPA_EdIR_Brain::m_fn_pclGetModel()
|
||
{
|
||
return m_pclModel;
|
||
}
|
||
|
||
/*************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vCreateInitControlsForBehaviour(AI_tdstAIModel *pstAIModel)
|
||
{
|
||
CTL_Editor_ControlList *pclListOfDesignerVariableControl=&(((EdActors_EditorActorModel *)m_pclModel->m_fn_pclGetEditorActor())->m_clListOfDesignerVariableControl);
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
|
||
//For Intelligence
|
||
if(m_clListOfIntelligenceBehaviours.GetCount()!=0)
|
||
{
|
||
tdstScriptAI *pstScriptAIIntell=AI_M_p_stGetIntelligenceScriptAIModel(pstAIModel);
|
||
|
||
//Are editor data and engine data coherent ?
|
||
if(pstScriptAIIntell!=NULL)
|
||
{
|
||
//Adds entry in control (IA Behaviour Name)
|
||
CTL_Editor_EnumDescriptor *pclEnumList=new CTL_Editor_EnumDescriptor(g_c_csInitialIABehaviour,4);
|
||
POSITION pos=m_clListOfIntelligenceBehaviours.GetHeadPosition();
|
||
long lIndex=0;
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfIntelligenceBehaviours.GetNext(pos);
|
||
|
||
pclEnumList->m_fn_pclAddElement(pclMainBehaviour->GetName(),lIndex);
|
||
|
||
lIndex++;
|
||
}
|
||
|
||
//Adds a control for initial intelligence
|
||
CTL_Editor_EnumControl *pclEnum;
|
||
pclEnum=new CTL_Editor_EnumControl(READ_WRITE,pclListOfDesignerVariableControl,m_pclModel->GetName()+" "+g_c_csInitialIABehaviour, TRUE, /*Stefan Dumitrean 20-07(OAC buttons)*/1 ); //ANNECY BBB
|
||
pclEnum->m_pub_fn_vSetControlCanBeDisplayedCallBack(fn_bMustDisplay);
|
||
fn_vAddOwnerData(pclEnum,OAC_DATA_LEVEL_1,EDCAR_DATA_VISI_DUAL);
|
||
pclListOfDesignerVariableControl->AddTail(pclEnum);
|
||
|
||
pclDsgVarView->m_fn_vUpdateControls(pclListOfDesignerVariableControl);
|
||
|
||
//Adds data for initial intelligence control for the model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
CTL_Editor_EnumData *pclData=new CTL_Editor_EnumData(pclEnumList,g_c_csInitialIABehaviour,pclListOfDesignerVariableType);
|
||
fn_vAddOwnerData(pclData,m_pclModel->m_fn_pclGetEditorActor());
|
||
pclData->m_pub_fn_vSetDataChangedCallBackFunction(fn_vNotifyInitialValue);
|
||
pclData->m_pub_fn_vSetDataChangedSpecialCallBackFunction(fn_vUpdateWatchData); \
|
||
|
||
//Sets initial value
|
||
CString csValue=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialIABehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetScriptAINoComportInitDefault(pstScriptAIIntell)=atol(M_MAKECHAR(csValue));
|
||
else
|
||
M_GetScriptAINoComportInitDefault(pstScriptAIIntell)=0;
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetScriptAINoComportInitDefault(pstScriptAIIntell)));
|
||
|
||
pclListOfDesignerVariableType->AddTail(pclData);
|
||
pclEnum->m_fn_vSetEditedData(pclData);
|
||
pclData->m_fn_vGetMotorData();
|
||
|
||
//Adds data for initial intelligence control for the instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
CTL_Editor_EnumData *pclData=new CTL_Editor_EnumData(pclEnumList,g_c_csInitialIABehaviour,pclListOfDesignerVariableType);
|
||
fn_vAddOwnerData(pclData,pclInstance->m_fn_pclGetEditorActor());
|
||
pclData->m_pub_fn_vSetDataChangedCallBackFunction(fn_vNotifyInitialValue);
|
||
pclData->m_pub_fn_vSetDataChangedSpecialCallBackFunction(fn_vUpdateWatchData); \
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
//Sets initial value
|
||
CString csValue=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialIABehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetNoComportInit(AI_M_p_stGetIntelligence(pstMind))=atol(M_MAKECHAR(csValue));
|
||
else
|
||
{
|
||
csValue=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialIABehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetNoComportInit(AI_M_p_stGetIntelligence(pstMind))=atol(M_MAKECHAR(csValue));
|
||
else
|
||
M_GetNoComportInit(AI_M_p_stGetIntelligence(pstMind))=0;
|
||
}
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetNoComportInit(AI_M_p_stGetIntelligence(pstMind))));
|
||
}
|
||
else
|
||
//For a new instance without hBrain
|
||
{
|
||
pclData->m_fn_vSetMotorDataPtr(&gs_lDummyData);
|
||
}
|
||
|
||
pclListOfDesignerVariableType->AddTail(pclData);
|
||
pclEnum->m_fn_vSetEditedData(pclData);
|
||
pclData->m_fn_vGetMotorData();
|
||
}
|
||
}
|
||
//Editor data and engine data aren't coherent !!
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't create control ("+g_c_csInitialIABehaviour+") : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
}
|
||
|
||
//For Reflex
|
||
if(m_clListOfReflexBehaviours.GetCount()!=0)
|
||
{
|
||
tdstScriptAI *pstScriptAIReflex=AI_M_p_stGetReflexScriptAIModel(pstAIModel);
|
||
|
||
//Are editor data and engine data coherent ?
|
||
if(pstScriptAIReflex!=NULL)
|
||
{
|
||
//Adds entry in control (Reflex Behaviour Name)
|
||
CTL_Editor_EnumDescriptor *pclEnumList=new CTL_Editor_EnumDescriptor(g_c_csInitialRfxBehaviour,4);
|
||
POSITION pos=m_clListOfReflexBehaviours.GetHeadPosition();
|
||
long lIndex=0;
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfReflexBehaviours.GetNext(pos);
|
||
|
||
pclEnumList->m_fn_pclAddElement(pclMainBehaviour->GetName(),lIndex);
|
||
|
||
lIndex++;
|
||
}
|
||
|
||
//Adds a control for initial reflex
|
||
CTL_Editor_EnumControl *pclEnum;
|
||
pclEnum=new CTL_Editor_EnumControl(READ_WRITE,pclListOfDesignerVariableControl,m_pclModel->GetName()+" "+g_c_csInitialRfxBehaviour, TRUE, /*Stefan Dumitrean 20-07(OAC buttons)*/1 ); //ANNECY BBB
|
||
pclEnum->m_pub_fn_vSetControlCanBeDisplayedCallBack(fn_bMustDisplay);
|
||
fn_vAddOwnerData(pclEnum,OAC_DATA_LEVEL_1,EDCAR_DATA_VISI_DUAL);
|
||
pclListOfDesignerVariableControl->AddTail(pclEnum);
|
||
|
||
pclDsgVarView->m_fn_vUpdateControls(pclListOfDesignerVariableControl);
|
||
|
||
//Adds data for initial reflex control for the model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
CTL_Editor_EnumData *pclData=new CTL_Editor_EnumData(pclEnumList,g_c_csInitialRfxBehaviour,pclListOfDesignerVariableType);
|
||
fn_vAddOwnerData(pclData,m_pclModel->m_fn_pclGetEditorActor());
|
||
pclData->m_pub_fn_vSetDataChangedCallBackFunction(fn_vNotifyInitialValue);
|
||
pclData->m_pub_fn_vSetDataChangedSpecialCallBackFunction(fn_vUpdateWatchData); \
|
||
|
||
//Sets initial value
|
||
CString csValue=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialRfxBehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetScriptAINoComportInitDefault(pstScriptAIReflex)=atol(M_MAKECHAR(csValue));
|
||
else
|
||
M_GetScriptAINoComportInitDefault(pstScriptAIReflex)=0;
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetScriptAINoComportInitDefault(pstScriptAIReflex)));
|
||
|
||
pclListOfDesignerVariableType->AddTail(pclData);
|
||
pclEnum->m_fn_vSetEditedData(pclData);
|
||
pclData->m_fn_vGetMotorData();
|
||
|
||
//Adds data for initial reflex control for the instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
CTL_Editor_EnumData *pclData=new CTL_Editor_EnumData(pclEnumList,g_c_csInitialRfxBehaviour,pclListOfDesignerVariableType);
|
||
fn_vAddOwnerData(pclData,pclInstance->m_fn_pclGetEditorActor());
|
||
pclData->m_pub_fn_vSetDataChangedCallBackFunction(fn_vNotifyInitialValue);
|
||
pclData->m_pub_fn_vSetDataChangedSpecialCallBackFunction(fn_vUpdateWatchData); \
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
//Sets initial value
|
||
CString csValue=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialRfxBehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetNoComportInit(AI_M_p_stGetReflex(pstMind))=atol(M_MAKECHAR(csValue));
|
||
else
|
||
{
|
||
csValue=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialRfxBehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetNoComportInit(AI_M_p_stGetReflex(pstMind))=atol(M_MAKECHAR(csValue));
|
||
else
|
||
M_GetNoComportInit(AI_M_p_stGetReflex(pstMind))=0;
|
||
}
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetNoComportInit(AI_M_p_stGetReflex(pstMind))));
|
||
}
|
||
else
|
||
//For a new instance without hBrain
|
||
{
|
||
pclData->m_fn_vSetMotorDataPtr(&gs_lDummyData);
|
||
}
|
||
|
||
pclListOfDesignerVariableType->AddTail(pclData);
|
||
pclEnum->m_fn_vSetEditedData(pclData);
|
||
pclData->m_fn_vGetMotorData();
|
||
}
|
||
}
|
||
//Editor data and engine data aren't coherent !!
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't create control ("+g_c_csInitialRfxBehaviour+") : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vUpdateInitControlsForBehaviour(AI_tdstAIModel *pstAIModel)
|
||
{
|
||
CTL_Editor_ControlList *pclListOfDesignerVariableControl=&(((EdActors_EditorActorModel *)m_pclModel->m_fn_pclGetEditorActor())->m_clListOfDesignerVariableControl);
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
|
||
//For Intelligence
|
||
if(m_clListOfIntelligenceBehaviours.GetCount()!=0)
|
||
{
|
||
tdstScriptAI *pstScriptAIIntell=AI_M_p_stGetIntelligenceScriptAIModel(pstAIModel);
|
||
|
||
//Are editor data and engine data coherent ?
|
||
if(pstScriptAIIntell!=NULL)
|
||
{
|
||
//Updates data for initial intelligence control for the model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csInitialIABehaviour);
|
||
if(pclData!=NULL)
|
||
{
|
||
//Sets initial value
|
||
CString csValue=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialIABehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetScriptAINoComportInitDefault(pstScriptAIIntell)=atol(M_MAKECHAR(csValue));
|
||
else
|
||
M_GetScriptAINoComportInitDefault(pstScriptAIIntell)=0;
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetScriptAINoComportInitDefault(pstScriptAIIntell)));
|
||
}
|
||
|
||
//Updates data for initial intelligence control for the instances
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csInitialIABehaviour);
|
||
if(pclData!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
//Sets initial value
|
||
CString csValue=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialIABehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetNoComportInit(AI_M_p_stGetIntelligence(pstMind))=atol(M_MAKECHAR(csValue));
|
||
else
|
||
{
|
||
csValue=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialIABehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetNoComportInit(AI_M_p_stGetIntelligence(pstMind))=atol(M_MAKECHAR(csValue));
|
||
else
|
||
M_GetNoComportInit(AI_M_p_stGetIntelligence(pstMind))=0;
|
||
}
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetNoComportInit(AI_M_p_stGetIntelligence(pstMind))));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//Editor data and engine data aren't coherent !!
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't update control ("+g_c_csInitialIABehaviour+") : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
}
|
||
|
||
//For Reflex
|
||
if(m_clListOfReflexBehaviours.GetCount()!=0)
|
||
{
|
||
tdstScriptAI *pstScriptAIReflex=AI_M_p_stGetReflexScriptAIModel(pstAIModel);
|
||
|
||
//Are editor data and engine data coherent ?
|
||
if(pstScriptAIReflex!=NULL)
|
||
{
|
||
//Updates data for initial reflex control for the model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csInitialRfxBehaviour);
|
||
if(pclData!=NULL)
|
||
{
|
||
//Sets initial value
|
||
CString csValue=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialRfxBehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetScriptAINoComportInitDefault(pstScriptAIReflex)=atol(M_MAKECHAR(csValue));
|
||
else
|
||
M_GetScriptAINoComportInitDefault(pstScriptAIReflex)=0;
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetScriptAINoComportInitDefault(pstScriptAIReflex)));
|
||
}
|
||
|
||
//Updates data for initial reflex control for the instances
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csInitialRfxBehaviour);
|
||
if(pclData!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
//Sets initial value
|
||
CString csValue=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialRfxBehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetNoComportInit(AI_M_p_stGetReflex(pstMind))=atol(M_MAKECHAR(csValue));
|
||
else
|
||
{
|
||
csValue=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_csGetFirstValueOfADesignerVariable(g_c_csInitialRfxBehaviour);
|
||
if(!csValue.IsEmpty())
|
||
M_GetNoComportInit(AI_M_p_stGetReflex(pstMind))=atol(M_MAKECHAR(csValue));
|
||
else
|
||
M_GetNoComportInit(AI_M_p_stGetReflex(pstMind))=0;
|
||
}
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetNoComportInit(AI_M_p_stGetReflex(pstMind))));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//Editor data and engine data aren't coherent !!
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't update control ("+g_c_csInitialRfxBehaviour+") : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vCreateControlsForBehaviour()
|
||
{
|
||
CTL_Editor_ControlList *pclListOfDesignerVariableControl=&(((EdActors_EditorActorModel *)m_pclModel->m_fn_pclGetEditorActor())->m_clListOfDesignerVariableControl);
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
|
||
//For Intelligence
|
||
if(!m_clListOfIntelligenceBehaviours.IsEmpty() && !clInstancesList.IsEmpty())
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetHead();
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
AI_tdstAIModel *pstAIModel=AI_M_p_stGetAIModel(pstMind);
|
||
tdstScriptAI *pstScriptAIIntell=AI_M_p_stGetIntelligenceScriptAIModel(pstAIModel);
|
||
|
||
//Are editor data and engine data coherent ?
|
||
if(pstScriptAIIntell!=NULL)
|
||
{
|
||
//Adds entry in control (IA Behaviour Name)
|
||
CTL_Editor_EnumDescriptor *pclEnumList=new CTL_Editor_EnumDescriptor(g_c_csCurrentIABehaviour,4);
|
||
POSITION pos=m_clListOfIntelligenceBehaviours.GetHeadPosition();
|
||
unsigned long ulIndex=0;
|
||
while(pos!=NULL && ulIndex<M_GetScriptAINbComport(pstScriptAIIntell))
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfIntelligenceBehaviours.GetNext(pos);
|
||
|
||
pclEnumList->m_fn_pclAddElement(pclMainBehaviour->GetName(),
|
||
(long)(M_GetScriptAIComportN(pstScriptAIIntell,ulIndex)));
|
||
|
||
ulIndex++;
|
||
}
|
||
|
||
//Adds a control for current intelligence
|
||
CTL_Editor_EnumControl *pclEnum;
|
||
pclEnum=new CTL_Editor_EnumControl(READ_ONLY,pclListOfDesignerVariableControl,m_pclModel->GetName()+" "+g_c_csCurrentIABehaviour, TRUE, /*Stefan Dumitrean 20-07(OAC buttons)*/2 ); //ANNECY BBB
|
||
pclEnum->m_pub_fn_vSetControlCanBeDisplayedCallBack(fn_bMustDisplay);
|
||
fn_vAddOwnerData(pclEnum,OAC_DATA_LEVEL_1,EDCAR_DATA_VISI_ONLY_INSTANCES);
|
||
pclListOfDesignerVariableControl->AddTail(pclEnum);
|
||
|
||
pclDsgVarView->m_fn_vUpdateControls(pclListOfDesignerVariableControl);
|
||
|
||
//Adds a dummy data for current intelligence control for the model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
CTL_Editor_EnumData *pclData=new CTL_Editor_EnumData(pclEnumList,g_c_csCurrentIABehaviour,pclListOfDesignerVariableType);
|
||
fn_vAddOwnerData(pclData,m_pclModel->m_fn_pclGetEditorActor());
|
||
pclData->m_pub_fn_vSetDataChangedSpecialCallBackFunction(fn_vUpdateWatchData); \
|
||
|
||
tdstIntelligence *pstIntelligence=AI_M_p_stGetIntelligence(pstMind);
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetCurrentComport(pstIntelligence)));
|
||
pclListOfDesignerVariableType->AddTail(pclData);
|
||
pclEnum->m_fn_vSetEditedData(pclData);
|
||
pclData->m_fn_vGetMotorData();
|
||
|
||
//Adds data for current intelligence control for the instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
CTL_Editor_EnumData *pclData=new CTL_Editor_EnumData(pclEnumList,g_c_csCurrentIABehaviour,pclListOfDesignerVariableType);
|
||
fn_vAddOwnerData(pclData,pclInstance->m_fn_pclGetEditorActor());
|
||
pclData->m_pub_fn_vSetDataChangedSpecialCallBackFunction(fn_vUpdateWatchData); \
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
tdstIntelligence *pstIntelligence=AI_M_p_stGetIntelligence(pstMind);
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetCurrentComport(pstIntelligence)));
|
||
}
|
||
else
|
||
//For a new instance without hBrain
|
||
{
|
||
pclData->m_fn_vSetMotorDataPtr(&gs_lDummyData);
|
||
}
|
||
|
||
pclListOfDesignerVariableType->AddTail(pclData);
|
||
pclEnum->m_fn_vSetEditedData(pclData);
|
||
pclData->m_fn_vGetMotorData();
|
||
}
|
||
}
|
||
//Editor data and engine data aren't coherent !!
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't create control ("+g_c_csCurrentIABehaviour+") : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
}
|
||
|
||
//For Reflex
|
||
if(!m_clListOfReflexBehaviours.IsEmpty() && !clInstancesList.IsEmpty())
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetHead();
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
AI_tdstAIModel *pstAIModel=AI_M_p_stGetAIModel(pstMind);
|
||
tdstScriptAI *pstScriptAIReflex=AI_M_p_stGetReflexScriptAIModel(pstAIModel);
|
||
|
||
//Are editor data and engine data coherent ?
|
||
if(pstScriptAIReflex!=NULL)
|
||
{
|
||
//Adds entry in control (Reflex Behaviour Name)
|
||
CTL_Editor_EnumDescriptor *pclEnumList=new CTL_Editor_EnumDescriptor(g_c_csCurrentRfxBehaviour,4);
|
||
POSITION pos=m_clListOfReflexBehaviours.GetHeadPosition();
|
||
unsigned long ulIndex=0;
|
||
while(pos!=NULL && ulIndex<M_GetScriptAINbComport(pstScriptAIReflex))
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfReflexBehaviours.GetNext(pos);
|
||
|
||
pclEnumList->m_fn_pclAddElement(pclMainBehaviour->GetName(),
|
||
(long)(M_GetScriptAIComportN(pstScriptAIReflex,ulIndex)));
|
||
|
||
ulIndex++;
|
||
}
|
||
|
||
//Adds a control for current reflex
|
||
CTL_Editor_EnumControl *pclEnum;
|
||
pclEnum=new CTL_Editor_EnumControl(READ_ONLY,pclListOfDesignerVariableControl,m_pclModel->GetName()+" "+g_c_csCurrentRfxBehaviour, TRUE, /*Stefan Dumitrean 20-07(OAC buttons)*/2 ); //ANNECY BBB
|
||
pclEnum->m_pub_fn_vSetControlCanBeDisplayedCallBack(fn_bMustDisplay);
|
||
fn_vAddOwnerData(pclEnum,OAC_DATA_LEVEL_1,EDCAR_DATA_VISI_ONLY_INSTANCES);
|
||
pclListOfDesignerVariableControl->AddTail(pclEnum);
|
||
|
||
pclDsgVarView->m_fn_vUpdateControls(pclListOfDesignerVariableControl);
|
||
|
||
//Adds a dummy data for reflex init control for the model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
CTL_Editor_EnumData *pclData=new CTL_Editor_EnumData(pclEnumList,g_c_csCurrentRfxBehaviour,pclListOfDesignerVariableType);
|
||
fn_vAddOwnerData(pclData,m_pclModel->m_fn_pclGetEditorActor());
|
||
pclData->m_pub_fn_vSetDataChangedSpecialCallBackFunction(fn_vUpdateWatchData); \
|
||
|
||
tdstIntelligence *pstReflex=AI_M_p_stGetReflex(pstMind);
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetCurrentComport(pstReflex)));
|
||
pclListOfDesignerVariableType->AddTail(pclData);
|
||
pclEnum->m_fn_vSetEditedData(pclData);
|
||
pclData->m_fn_vGetMotorData();
|
||
|
||
//Adds data for reflex init control for the instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
CTL_Editor_EnumData *pclData=new CTL_Editor_EnumData(pclEnumList,g_c_csCurrentRfxBehaviour,pclListOfDesignerVariableType);
|
||
fn_vAddOwnerData(pclData,pclInstance->m_fn_pclGetEditorActor());
|
||
pclData->m_pub_fn_vSetDataChangedSpecialCallBackFunction(fn_vUpdateWatchData); \
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
tdstIntelligence *pstReflex=AI_M_p_stGetReflex(pstMind);
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetCurrentComport(pstReflex)));
|
||
}
|
||
else
|
||
//For a new instance without hBrain
|
||
{
|
||
pclData->m_fn_vSetMotorDataPtr(&gs_lDummyData);
|
||
}
|
||
|
||
pclListOfDesignerVariableType->AddTail(pclData);
|
||
pclEnum->m_fn_vSetEditedData(pclData);
|
||
pclData->m_fn_vGetMotorData();
|
||
}
|
||
}
|
||
//Editor data and engine data aren't coherent !!
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't create control ("+g_c_csCurrentRfxBehaviour+") : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vUpdateControlsForBehaviour()
|
||
{
|
||
CTL_Editor_ControlList *pclListOfDesignerVariableControl=&(((EdActors_EditorActorModel *)m_pclModel->m_fn_pclGetEditorActor())->m_clListOfDesignerVariableControl);
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
|
||
//For Intelligence
|
||
if(!m_clListOfIntelligenceBehaviours.IsEmpty() && !clInstancesList.IsEmpty())
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetHead();
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
AI_tdstAIModel *pstAIModel=AI_M_p_stGetAIModel(pstMind);
|
||
tdstScriptAI *pstScriptAIIntell=AI_M_p_stGetIntelligenceScriptAIModel(pstAIModel);
|
||
|
||
//Are editor data and engine data coherent ?
|
||
if(pstScriptAIIntell!=NULL)
|
||
{
|
||
//Updates data for current intelligence control for the model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csCurrentIABehaviour);
|
||
if(pclData!=NULL)
|
||
{
|
||
tdstIntelligence *pstIntelligence=AI_M_p_stGetIntelligence(pstMind);
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetCurrentComport(pstIntelligence)));
|
||
}
|
||
|
||
//Updates data for current intelligence control for the instances
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csCurrentIABehaviour);
|
||
if(pclData!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
tdstIntelligence *pstIntelligence=AI_M_p_stGetIntelligence(pstMind);
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetCurrentComport(pstIntelligence)));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//Editor data and engine data aren't coherent !!
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't update control ("+g_c_csCurrentIABehaviour+") : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
}
|
||
|
||
//For Reflex
|
||
if(!m_clListOfReflexBehaviours.IsEmpty() && !clInstancesList.IsEmpty())
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetHead();
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
AI_tdstAIModel *pstAIModel=AI_M_p_stGetAIModel(pstMind);
|
||
tdstScriptAI *pstScriptAIReflex=AI_M_p_stGetReflexScriptAIModel(pstAIModel);
|
||
|
||
//Are editor data and engine data coherent ?
|
||
if(pstScriptAIReflex!=NULL)
|
||
{
|
||
//Updates data for reflex init control for the model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csCurrentRfxBehaviour);
|
||
if(pclData!=NULL)
|
||
{
|
||
tdstIntelligence *pstReflex=AI_M_p_stGetReflex(pstMind);
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetCurrentComport(pstReflex)));
|
||
}
|
||
|
||
//Updates data for reflex init control for the instances
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csCurrentRfxBehaviour);
|
||
if(pclData!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
tdstIntelligence *pstReflex=AI_M_p_stGetReflex(pstMind);
|
||
|
||
pclData->m_fn_vSetMotorDataPtr(&(M_GetCurrentComport(pstReflex)));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//Editor data and engine data aren't coherent !!
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't update control ("+g_c_csCurrentRfxBehaviour+") : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vRememberOldDsgVarValues()
|
||
{
|
||
if(m_bOldApplicationIsOK)
|
||
{
|
||
//First part : empties list of old values
|
||
//Model
|
||
m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_vDestroyAndRemoveAllEntries();
|
||
//Instances
|
||
CPA_List<EdActors_EditorActorInstance> *pclInstancesList=&(m_pclModel->m_fn_pclGetEditorModel()->m_clInstancesList);
|
||
POSITION pos=pclInstancesList->GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
EdActors_EditorActorInstance *pclInstance=pclInstancesList->GetNext(pos);
|
||
pclInstance->m_pclListOfDesignerVariables->m_fn_vDestroyAndRemoveAllEntries();
|
||
}
|
||
|
||
//Second part : fills list of old values
|
||
CTL_Editor_ControlList *pclListOfDesignerVariableControl=&(((EdActors_EditorActorModel *)m_pclModel->m_fn_pclGetEditorActor())->m_clListOfDesignerVariableControl);
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
|
||
//Model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
pos=pclListOfDesignerVariableType->GetHeadPosition();
|
||
|
||
if(pos == NULL)
|
||
{
|
||
m_fn_vCreateOrUpdateDsgVarControlsWithEngineValues();
|
||
pos=pclListOfDesignerVariableType->GetHeadPosition();
|
||
}
|
||
|
||
while(pos!=NULL)
|
||
{
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->GetNext(pos);
|
||
|
||
//Remembers old values
|
||
CString csName;
|
||
CString csType;
|
||
CStringList cslValues;
|
||
fn_vGetLowInfoAboutDsgVar(pclData,csName,csType,&cslValues);
|
||
|
||
CPA_EdIR_DesignerVariable *pclDsgVar;
|
||
pclDsgVar=new CPA_EdIR_DesignerVariable(csName,csType,&cslValues);
|
||
pclDsgVar->m_fn_vSetInWatchWindow(fn_bIsInWatch(pclData));
|
||
m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->AddTail(pclDsgVar);
|
||
}
|
||
|
||
//Instances
|
||
pos=pclInstancesList->GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
EdActors_EditorActorInstance *pclInstance=pclInstancesList->GetNext(pos);
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=pclInstance->m_pclListOfDesignerVariableType;
|
||
|
||
//For new instance without old value
|
||
CPA_Actor *pclActor=pclInstance->m_pclActor;
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclActor->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
POSITION p=pclListOfDesignerVariableType->GetHeadPosition();
|
||
while(p!=NULL)
|
||
{
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->GetNext(p);
|
||
|
||
//Remembers old values
|
||
CString csName;
|
||
CString csType;
|
||
CStringList cslValues;
|
||
fn_vGetLowInfoAboutDsgVar(pclData,csName,csType,&cslValues);
|
||
|
||
CPA_EdIR_DesignerVariable *pclDsgVar;
|
||
pclDsgVar=new CPA_EdIR_DesignerVariable(csName,csType,&cslValues);
|
||
pclDsgVar->m_fn_vSetInWatchWindow(fn_bIsInWatch(pclData));
|
||
pclInstance->m_pclListOfDesignerVariables->AddTail(pclDsgVar);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vDeleteOldDsgVarControl()
|
||
{
|
||
CTL_Editor_ControlList *pclListOfDesignerVariableControl=&(((EdActors_EditorActorModel *)m_pclModel->m_fn_pclGetEditorActor())->m_clListOfDesignerVariableControl);
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
|
||
//Deletes old datas
|
||
//Model
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
POSITION pos=pclListOfDesignerVariableType->GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
//Deletes data
|
||
fn_vDelete(pclListOfDesignerVariableType->GetNext(pos));
|
||
}
|
||
pclListOfDesignerVariableType->RemoveAll();
|
||
|
||
//Instances
|
||
CPA_List<EdActors_EditorActorInstance> *pclInstancesList=&(m_pclModel->m_fn_pclGetEditorModel()->m_clInstancesList);
|
||
pos=pclInstancesList->GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
EdActors_EditorActorInstance *pclInstance=pclInstancesList->GetNext(pos);
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=pclInstance->m_pclListOfDesignerVariableType;
|
||
|
||
POSITION p=pclListOfDesignerVariableType->GetHeadPosition();
|
||
while(p!=NULL)
|
||
{
|
||
//Deletes data
|
||
fn_vDelete(pclListOfDesignerVariableType->GetNext(p));
|
||
}
|
||
pclListOfDesignerVariableType->RemoveAll();
|
||
}
|
||
|
||
//Deletes old controls
|
||
pclDsgVarView->m_fn_vAModelHasBeenRemoved(pclListOfDesignerVariableControl);
|
||
|
||
pos=pclListOfDesignerVariableControl->GetHeadPosition();
|
||
while(pos!=NULL)
|
||
delete pclListOfDesignerVariableControl->GetNext(pos);
|
||
pclListOfDesignerVariableControl->RemoveAll();
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vUpdateDatasWithOldValues()
|
||
{
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
|
||
//Updates Data with old values for models
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
if(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetAt(pos));
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetStruct();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
if(pstMind!=NULL)
|
||
{
|
||
if(M_GetDsgMem(pstMind)!=NULL)
|
||
{
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
POSITION p=pclListOfDesignerVariableType->GetHeadPosition();
|
||
unsigned long ulIndexOfSaveTypeDsgVar=0;
|
||
unsigned long ulIndexOfInitTypeDsgVar=0;
|
||
unsigned long ulIndexOfDsgVarInit=0;
|
||
while(p!=NULL)
|
||
{
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->GetNext(p);
|
||
|
||
//Gets address of the engine data
|
||
//Only for Save Type and Init Type and initial value for array
|
||
if(pclData->m_pub_fn_csGetDataName().Find(g_c_csDsgVarIndexText)==-1) //exclude index
|
||
{
|
||
void *pvEngineData=NULL;
|
||
if((fn_pvGetBaseAddress(pclData)!=NULL) && //is it an array ?
|
||
(pclData->m_pub_fn_csGetDataName().Find(g_c_csDsgVarInitText)!=-1) && //is it an initial value ?
|
||
(ulIndexOfDsgVarInit<M_GetNbDsgVar(pstMind)))
|
||
{
|
||
pvEngineData=M_GetDsgVarAddrDefault(pstMind,ulIndexOfDsgVarInit);
|
||
ulIndexOfDsgVarInit++;
|
||
}
|
||
else
|
||
if((pclData->m_pub_fn_csGetDataName().Find(g_c_csDsgVarSaveTypeText)!=-1) &&
|
||
(ulIndexOfSaveTypeDsgVar<M_GetNbDsgVar(pstMind)))
|
||
{
|
||
pvEngineData=&M_GetDsgVarSaveType(pstMind,ulIndexOfSaveTypeDsgVar);
|
||
ulIndexOfSaveTypeDsgVar++;
|
||
}
|
||
else
|
||
if((pclData->m_pub_fn_csGetDataName().Find(g_c_csDsgVarInitTypeText)!=-1) &&
|
||
(ulIndexOfInitTypeDsgVar<M_GetNbDsgVar(pstMind)))
|
||
{
|
||
pvEngineData=&M_GetDsgVarInitType(pstMind,ulIndexOfInitTypeDsgVar);
|
||
ulIndexOfInitTypeDsgVar++;
|
||
}
|
||
|
||
//Gets old value
|
||
CStringList *pcslValues=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_pcslGetValuesOfADesignerVariable(pclData->m_pub_fn_csGetDataName());
|
||
|
||
//Sets old value into the dsg var
|
||
if((pcslValues!=NULL) &&
|
||
(pvEngineData!=NULL))
|
||
fn_vSetValueInDsgVar(pclData,pcslValues,pvEngineData);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//Updates Data with old values for instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetNext(pos));
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetStruct();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
if(pstMind!=NULL)
|
||
{
|
||
if(M_GetDsgMem(pstMind)!=NULL)
|
||
{
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType;
|
||
pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
|
||
POSITION p=pclListOfDesignerVariableType->GetHeadPosition();
|
||
unsigned long ulIndexOfDsgVar=0;
|
||
unsigned long ulIndexOfDsgVarInit=0;
|
||
while(p!=NULL)
|
||
{
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->GetNext(p);
|
||
|
||
//Gets address of the engine data
|
||
//Only for current and initial value
|
||
if(pclData->m_pub_fn_csGetDataName().Find(g_c_csDsgVarIndexText)==-1)
|
||
{
|
||
void *pvEngineData=NULL;
|
||
if((pclData->m_pub_fn_csGetDataName().Find(g_c_csDsgVarInitText)!=-1) &&
|
||
(ulIndexOfDsgVarInit<M_GetNbDsgVar(pstMind)))
|
||
{
|
||
pvEngineData=M_GetDsgVarAddrInit(pstMind,ulIndexOfDsgVarInit);
|
||
ulIndexOfDsgVarInit++;
|
||
}
|
||
else
|
||
if((pclData->m_pub_fn_csGetDataName().Find(g_c_csDsgVarSaveTypeText)==-1) &&
|
||
(pclData->m_pub_fn_csGetDataName().Find(g_c_csDsgVarInitTypeText)==-1) &&
|
||
(ulIndexOfDsgVar<M_GetNbDsgVar(pstMind)))
|
||
{
|
||
pvEngineData=M_GetDsgVarAddr(pstMind,ulIndexOfDsgVar);
|
||
ulIndexOfDsgVar++;
|
||
}
|
||
|
||
//Gets old value
|
||
CStringList *pcslValues=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_pcslGetValuesOfADesignerVariable(pclData->m_pub_fn_csGetDataName());
|
||
|
||
//Sets old value into the dsg var
|
||
if((pcslValues!=NULL) &&
|
||
(pvEngineData!=NULL))
|
||
fn_vSetValueInDsgVar(pclData,pcslValues,pvEngineData);
|
||
|
||
//Sets the dsg var in watch window if needed
|
||
if(pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->m_fn_bDesignerVariableIsInWatchWindow(pclData->m_pub_fn_csGetDataName()))
|
||
{
|
||
fn_vAddValueInWatch(pclData);
|
||
fn_vSetInWatch(pclData,TRUE);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vCreateOrUpdateDsgVarControlsWithEngineValues()
|
||
{
|
||
if(m_bDsgVarControlsAreCreated==FALSE)
|
||
{
|
||
//ANNECY CB
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
pclDsgVarView->m_bCanUpdateControls = FALSE;
|
||
//END
|
||
if(m_bOldApplicationIsOK==TRUE)
|
||
{
|
||
AfxGetApp()->DoWaitCursor(1);
|
||
SetCapture(g_pclAIInterface->m_pclIRMainFrame->m_hWnd);
|
||
|
||
CString csFamilyName=(m_pclModel->m_pub_fn_pclGetFamily()==NULL) ? "" : m_pclModel->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=m_pclModel->GetName();
|
||
|
||
CString csMsg;
|
||
CString csMsgBase="Creating controls for "+csFamilyName+"@"+csModelName+" ... ";
|
||
fn_vDisplayInfoInStatusBar(csMsgBase,C_STATUS_NORMAL);
|
||
|
||
//Creates dsg var controls
|
||
if(!m_clListOfDeclarations.IsEmpty())
|
||
{
|
||
g_pclCurrentModel=m_pclModel;
|
||
|
||
//Gets current state
|
||
CPA_EdIR_Frame *pclIRMainFrame=g_pclAIInterface->m_pclIRMainFrame;
|
||
tdeEditState tdeOldState=pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_tdeGetEditState();
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditDecl, FALSE);
|
||
|
||
//Gets declaration text without any comments
|
||
CString csIn;
|
||
|
||
//Gets Designer Variable MainBehaviour (first element in the list)
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfDeclarations.GetHead();
|
||
|
||
//Gets text declaration
|
||
if(pclMainBehaviour->m_pclBehaviour!=NULL)
|
||
csIn=pclMainBehaviour->m_pclBehaviour->m_fn_csGetRules();
|
||
else
|
||
csIn=pclMainBehaviour->m_csText;
|
||
|
||
csIn=fn_csGetCodeWithoutComments(csIn);
|
||
|
||
//Checks dsg var declarations
|
||
//ANNECY CB
|
||
// if(m_clListOfDeclarations.m_fn_bCheckIA(DsgVarText))
|
||
//END ANNECY
|
||
{
|
||
//Allocates and fills initial buffer for instances if needed
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetNext(pos));
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetStruct();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
if((pstMind!=NULL) &&
|
||
(AI_M_p_stGetDsgVar(pstMind)!=NULL) &&
|
||
(M_GetDsgMemBufferInit(pstMind)==NULL))
|
||
{
|
||
M_GetDsgMemBufferInit(pstMind)=fn_p_cAllocDsgMemBuffer(M_GetDsgVarSize(pstMind));
|
||
// copy it from the model
|
||
memcpy(M_GetDsgMemBufferInit(pstMind),M_GetDsgMemDefaultInit(pstMind),M_GetDsgVarSize(pstMind));
|
||
}
|
||
}
|
||
}
|
||
|
||
//Creates controls and datas
|
||
long lCurrentIndex=0;
|
||
CString csWord=fn_csGetNextWord(csIn,lCurrentIndex);
|
||
long lNoDsgVar=0;
|
||
while(!csWord.IsEmpty())
|
||
{
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-06-
|
||
// Check for qualifier
|
||
BOOL bIsPrivate = FALSE;
|
||
if (fn_bIsDsgVarQualifier (csWord))
|
||
{
|
||
if (!csWord.CompareNoCase("private"))
|
||
bIsPrivate = TRUE;
|
||
csWord=fn_csGetNextWord(csIn,lCurrentIndex);
|
||
}
|
||
//END ROMTEAM Cristi Petrescu 98-06-
|
||
|
||
//Gets Type
|
||
tdeDsgVarTypeId eDsgVarTypeId=(tdeDsgVarTypeId)fn_lGetDsgVarTypeIdFromEditorName(csWord);
|
||
CString csDsgVarType=szFindDsgVarTypeScriptNameFromId(eDsgVarTypeId);
|
||
|
||
//Gets Name
|
||
CString csDsgVarName=fn_csGetNextWord(csIn,lCurrentIndex);
|
||
|
||
//Gets Init Value
|
||
CString csDsgVarValue=fn_csGetNextWord(csIn,lCurrentIndex);
|
||
|
||
//Creates a dsg var control
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-06-
|
||
fn_vCreateDsgVarControl(csDsgVarType,csDsgVarName,lNoDsgVar,bIsPrivate);
|
||
//END ROMTEAM Cristi Petrescu 98-06-
|
||
|
||
if(eDsgVarTypeId==eDsgVarType_Vector)
|
||
{
|
||
//Skips x,y,z components
|
||
fn_csGetNextWord(csIn,lCurrentIndex);
|
||
fn_csGetNextWord(csIn,lCurrentIndex);
|
||
fn_csGetNextWord(csIn,lCurrentIndex);
|
||
}
|
||
|
||
//Skips Type
|
||
csWord=fn_csGetNextWord(csIn,lCurrentIndex);
|
||
|
||
lNoDsgVar++;
|
||
}
|
||
|
||
//Sets current state
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(tdeOldState, FALSE);
|
||
}
|
||
//ANNECY CB
|
||
// else
|
||
// {
|
||
// AfxMessageBox("dsg var declaration is not good !!!\nCan't create windows controls for the dsg var");
|
||
// }
|
||
//END ANNECY
|
||
}
|
||
|
||
//Fills initial value for behaviour
|
||
//Model
|
||
CPA_EdIR_DesignerVariable *pclDsgVar;
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
if(!clInstancesList.IsEmpty())
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetHead();
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
if(pstMind!=NULL)
|
||
{
|
||
AI_tdstAIModel *p_stAIModel=AI_M_p_stGetAIModel(pstMind);
|
||
|
||
if(p_stAIModel!=NULL)
|
||
{
|
||
//Sets initial behaviour for intelligence
|
||
tdstScriptAI *pstIAScriptIA=AI_M_p_stGetIntelligenceScriptAIModel(p_stAIModel);
|
||
if(pstIAScriptIA!=NULL)
|
||
{
|
||
long lInitialIABehaviourIndex=M_GetScriptAINoComportInitDefault(pstIAScriptIA);
|
||
CString csInitialIABehaviour;
|
||
csInitialIABehaviour.Format("%ld",lInitialIABehaviourIndex);
|
||
CStringList cslValues;
|
||
cslValues.AddTail(csInitialIABehaviour);
|
||
pclDsgVar=new CPA_EdIR_DesignerVariable(g_c_csInitialIABehaviour,g_c_csEnum,&cslValues);
|
||
m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->AddTail(pclDsgVar);
|
||
}
|
||
|
||
//Sets initial behaviour for reflex
|
||
tdstScriptAI *pstRfxScriptIA=AI_M_p_stGetReflexScriptAIModel(p_stAIModel);
|
||
if(pstRfxScriptIA!=NULL)
|
||
{
|
||
long lInitialRfxBehaviourIndex=M_GetScriptAINoComportInitDefault(pstRfxScriptIA);
|
||
CString csInitialRfxBehaviour;
|
||
csInitialRfxBehaviour.Format("%ld",lInitialRfxBehaviourIndex);
|
||
CStringList cslValues;
|
||
cslValues.AddTail(csInitialRfxBehaviour);
|
||
pclDsgVar=new CPA_EdIR_DesignerVariable(g_c_csInitialRfxBehaviour,g_c_csEnum,&cslValues);
|
||
m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->AddTail(pclDsgVar);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//Instances
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
if(pstMind!=NULL)
|
||
{
|
||
//Sets initial behaviour for intelligence
|
||
tdstIntelligence *pstIAIntelligence=AI_M_p_stGetIntelligence(pstMind);
|
||
if(pstIAIntelligence!=NULL)
|
||
{
|
||
long lInitialIABehaviourIndex=M_GetNoComportInit(pstIAIntelligence);
|
||
CString csInitialIABehaviour;
|
||
csInitialIABehaviour.Format("%ld",lInitialIABehaviourIndex);
|
||
CStringList cslValues;
|
||
cslValues.AddTail(csInitialIABehaviour);
|
||
pclDsgVar=new CPA_EdIR_DesignerVariable(g_c_csInitialIABehaviour,g_c_csEnum,&cslValues);
|
||
pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->AddTail(pclDsgVar);
|
||
}
|
||
|
||
//Sets initial behaviour fr reflex
|
||
tdstIntelligence *pstRfxIntelligence=AI_M_p_stGetReflex(pstMind);
|
||
if(pstRfxIntelligence!=NULL)
|
||
{
|
||
long lInitialRfxBehaviourIndex=M_GetNoComportInit(pstRfxIntelligence);
|
||
CString csInitialRfxBehaviour;
|
||
csInitialRfxBehaviour.Format("%ld",lInitialRfxBehaviourIndex);
|
||
CStringList cslValues;
|
||
cslValues.AddTail(csInitialRfxBehaviour);
|
||
pclDsgVar=new CPA_EdIR_DesignerVariable(g_c_csInitialRfxBehaviour,g_c_csEnum,&cslValues);
|
||
pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariables->AddTail(pclDsgVar);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//Creates controls for initial and current behaviour
|
||
if(!clInstancesList.IsEmpty())
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetHead();
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
if(pstMind!=NULL)
|
||
{
|
||
AI_tdstAIModel *p_stAIModel=AI_M_p_stGetAIModel(pstMind);
|
||
|
||
if(p_stAIModel!=NULL)
|
||
{
|
||
//Creates controls for current behaviour
|
||
m_fn_vCreateInitControlsForBehaviour(p_stAIModel);
|
||
|
||
//Creates controls for current behaviour
|
||
m_fn_vCreateControlsForBehaviour();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
csMsg=csMsgBase+"OK";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
//ANNECY CB
|
||
AfxGetApp()->DoWaitCursor(-1);
|
||
ReleaseCapture();
|
||
// AfxGetApp()->DoWaitCursor(0);
|
||
//END ANNECY
|
||
m_bDsgVarControlsAreCreated=(!clInstancesList.IsEmpty());
|
||
}
|
||
else
|
||
{
|
||
CPA_Actor *pclActor=m_fn_pclGetModel();
|
||
CString csFamilyName=pclActor->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=pclActor->GetName();
|
||
CString csMsg="Can't create windows controls : check IA of "+csFamilyName+"@"+csModelName;
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
//ANNECY CB
|
||
pclDsgVarView->m_bCanUpdateControls = TRUE;
|
||
CTL_Editor_ControlList *pclListOfDesignerVariableControl=&(((EdActors_EditorActorModel *)m_pclModel->m_fn_pclGetEditorActor())->m_clListOfDesignerVariableControl);
|
||
pclDsgVarView->m_fn_vUpdateControls(pclListOfDesignerVariableControl);
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
//END
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
BOOL CPA_EdIR_Brain::m_fn_bCheckIA()
|
||
{
|
||
//TRUE if no modification has been done
|
||
if(m_fn_bHasBeenModified()==FALSE)
|
||
return TRUE;
|
||
|
||
AfxGetApp()->DoWaitCursor(1);
|
||
SetCapture(g_pclAIInterface->m_pclIRMainFrame->m_hWnd);
|
||
|
||
CPA_EdIR_Frame *pclIRMainFrame=g_pclAIInterface->m_pclIRMainFrame;
|
||
BOOL bOldButtonsState=pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_bGetButtonsSate();
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vEnableButtons(FALSE);
|
||
|
||
CString csFamilyName=(m_pclModel->m_pub_fn_pclGetFamily()==NULL) ? "" : m_pclModel->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=m_pclModel->GetName();
|
||
|
||
CString csMsg;
|
||
CString csMsgBase="Checking IA of "+csFamilyName+"@"+csModelName+" ... ";
|
||
fn_vDisplayInfoInStatusBar(csMsgBase,C_STATUS_NORMAL);
|
||
|
||
BOOL bNoError;
|
||
|
||
//Gets current state
|
||
tdeEditState tdeOldState=pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_tdeGetEditState();
|
||
|
||
g_pclCurrentModel=m_pclModel;
|
||
|
||
//Gets current brain
|
||
CPA_EdIR_Brain *pclOldBrain=pclIRMainFrame->m_fn_pclUpdateBrain(this,FALSE,FALSE);
|
||
|
||
csMsg=csMsgBase+"(Declaration)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditDecl, FALSE);
|
||
bNoError=m_clListOfDeclarations.m_fn_bCheckIA(DsgVarText);
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
if(bNoError)
|
||
{
|
||
csMsg=csMsgBase+"(Macro)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditMacro);
|
||
bNoError=m_clListOfMacros.m_fn_bCheckIA(Macro_2_Text);
|
||
}
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-04-
|
||
if(bNoError)
|
||
{
|
||
csMsg=csMsgBase+"(Subr)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditSubr);
|
||
bNoError=m_clListOfSubrs.m_fn_bCheckIA(SubrText);
|
||
}
|
||
//END ROMTEAM Cristi Petrescu 98-04-
|
||
if(bNoError)
|
||
{
|
||
csMsg=csMsgBase+"(Reflex)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditReflex, FALSE);
|
||
bNoError=m_clListOfReflexBehaviours.m_fn_bCheckIA(ReflexText);
|
||
}
|
||
if(bNoError)
|
||
{
|
||
csMsg=csMsgBase+"(Intelligence)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditIntell, FALSE);
|
||
bNoError=m_clListOfIntelligenceBehaviours.m_fn_bCheckIA(IntelligenceText);
|
||
|
||
if(bNoError)
|
||
{
|
||
//Sets current state
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(tdeOldState, FALSE);
|
||
|
||
//Sets current brain
|
||
pclIRMainFrame->m_fn_pclUpdateBrain(pclOldBrain,FALSE,FALSE);
|
||
}
|
||
}
|
||
|
||
if(bNoError)
|
||
{
|
||
//csMsg=csMsgBase+"OK (Good Work !!)";
|
||
csMsg=csMsgBase+"OK (<28>a vaaaaa 3lik !!)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
}
|
||
else
|
||
{
|
||
csMsg=csMsgBase+"KO :-( (Bad Boy)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vEnableButtons(bOldButtonsState);
|
||
|
||
//ANNECY CB
|
||
AfxGetApp()->DoWaitCursor(-1);
|
||
ReleaseCapture();
|
||
// AfxGetApp()->DoWaitCursor(0);
|
||
//END ANNECY
|
||
return bNoError;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
BOOL CPA_EdIR_Brain::m_fn_bProcessIA(BOOL bProcessAll,CPA_Actor *pclActor)
|
||
{
|
||
AfxGetApp()->DoWaitCursor(1);
|
||
SetCapture(g_pclAIInterface->m_pclIRMainFrame->m_hWnd);
|
||
g_pclAIInterface->m_bIsProcessing = TRUE;
|
||
|
||
CPA_EdIR_Frame *pclIRMainFrame=g_pclAIInterface->m_pclIRMainFrame;
|
||
BOOL bOldButtonsState=pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_bGetButtonsSate();
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vEnableButtons(FALSE);
|
||
|
||
CString csFamilyName=(m_pclModel->m_pub_fn_pclGetFamily()==NULL) ? "" : m_pclModel->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=m_pclModel->GetName();
|
||
|
||
CString csMsg;
|
||
CString csMsgBase="Processing IA of "+csFamilyName+"@"+csModelName+" ... ";
|
||
fn_vDisplayInfoInStatusBar(csMsgBase,C_STATUS_NORMAL);
|
||
|
||
//Applies IA
|
||
BOOL bNoError=TRUE;
|
||
|
||
//For Debugger
|
||
CList<BOOL,BOOL> clDebugIsEnableList;
|
||
|
||
//Gets current state
|
||
tdeEditState tdeOldState=pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_tdeGetEditState();
|
||
|
||
//Gets current brain
|
||
//Do not create dsg var when a new instance is inserted
|
||
CPA_EdIR_Brain *pclOldBrain=pclIRMainFrame->m_fn_pclUpdateBrain(this,(pclActor==NULL),FALSE);
|
||
|
||
// BEGIN ROMTEAM Cristi Petrescu 98-06-
|
||
// safety, safety
|
||
if (bProcessAll)
|
||
{
|
||
pclIRMainFrame -> m_fn_pclGetButtonView () -> m_fn_vSetEditState (EditIntell);
|
||
pclIRMainFrame -> m_fn_vUpdateBehaviours(FALSE);
|
||
pclIRMainFrame -> m_fn_pclGetButtonView () -> m_fn_vSetEditState (EditReflex);
|
||
pclIRMainFrame -> m_fn_vUpdateBehaviours(FALSE);
|
||
pclIRMainFrame -> m_fn_pclGetButtonView () -> m_fn_vSetEditState (EditDecl);
|
||
pclIRMainFrame -> m_fn_vUpdateBehaviours(FALSE);
|
||
pclIRMainFrame -> m_fn_pclGetButtonView () -> m_fn_vSetEditState (EditMacro);
|
||
pclIRMainFrame -> m_fn_vUpdateBehaviours(FALSE);
|
||
pclIRMainFrame -> m_fn_pclGetButtonView () -> m_fn_vSetEditState (EditSubr);
|
||
pclIRMainFrame -> m_fn_vUpdateBehaviours(FALSE);
|
||
}
|
||
|
||
pclIRMainFrame -> m_fn_pclGetButtonView () -> m_fn_vSetEditState (tdeOldState);
|
||
// END ROMTEAM Cristi Petrescu 98-06-
|
||
|
||
g_pclCurrentModel=m_pclModel;
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditDecl, FALSE);
|
||
|
||
//Translates declaration
|
||
csMsg=csMsgBase+"(Declaration)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
//Dsg Var declaration has changed (dsg var declaration is the first element of the list)?
|
||
BOOL bDeclDsgVarMustBeProcessed=(m_clListOfDeclarations.GetHead()->m_pclBehaviour->m_fn_bIntermediateCodeListIsGood()==FALSE);
|
||
|
||
//Remembers old dsg var values end removes it
|
||
if(m_bOldApplicationIsOK)
|
||
m_fn_vRememberOldDsgVarValues();
|
||
|
||
// if(bProcessAll || bDeclDsgVarMustBeProcessed)
|
||
// BEGIN ROMTEAM Cristi Petrescu 98-06-
|
||
// somebody eliminated the test, so keep it so
|
||
//{
|
||
bNoError=m_clListOfDeclarations.m_fn_bCheckIA(DsgVarText, TRUE);
|
||
|
||
// process ALL macros
|
||
if (bNoError)
|
||
{
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditMacro, FALSE);
|
||
bNoError=m_clListOfMacros.m_fn_bCheckIA(Macro_2_Text, TRUE);
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(tdeOldState, FALSE);
|
||
}
|
||
//}
|
||
// END ROMTEAM Cristi Petrescu 98-06-
|
||
|
||
if(bNoError)
|
||
{
|
||
//Remembers old dsg var values end removes it
|
||
m_fn_vRememberOldDsgVarValues();
|
||
if(bProcessAll || bDeclDsgVarMustBeProcessed)
|
||
m_fn_vDeleteOldDsgVarControl();
|
||
|
||
//Removes debug info
|
||
if(m_bOldApplicationIsOK)
|
||
{
|
||
m_clDebugInfoList.m_fn_vDestroyAndRemoveAllEntries();
|
||
}
|
||
|
||
//Removes ia MS for all instances
|
||
AI_tdstAIModel *p_stAIModel=NULL;
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
// CG PB DEBUGGER 23/06/98
|
||
#ifdef ACTIVE_AIDEBUG
|
||
//For Debugger
|
||
clDebugIsEnableList.AddTail(AIDebug_fn_bGetEnable(pstMind));
|
||
#endif
|
||
|
||
//Gets Model in order to free it after
|
||
if(p_stAIModel==NULL)
|
||
p_stAIModel=AI_M_p_stGetAIModel(pstMind);
|
||
|
||
//Removes ia MS
|
||
fn_vFreeMindAll(&pstMind);
|
||
fn_vBrainFree(pstEngineObject);
|
||
}
|
||
}
|
||
|
||
//Frees Model
|
||
fn_vFreeAIModelAll(&p_stAIModel);
|
||
|
||
// bNoError=m_clListOfDeclarations.m_fn_bCheckIA(DsgVarText, TRUE);
|
||
|
||
//Alloc IA
|
||
long lNbReflexComport=m_clListOfReflexBehaviours.GetCount();
|
||
long lNbIntellComport=m_clListOfIntelligenceBehaviours.GetCount();
|
||
long lNbDesignerVariables=g_clDsgVarList.GetCount();
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-04-
|
||
long lNbSubrs = m_clListOfSubrs . GetCount ();
|
||
//END ROMTEAM Cristi Petrescu 98-04-
|
||
|
||
if(lNbReflexComport!=0 || lNbIntellComport!=0 || lNbDesignerVariables!=0 || lNbSubrs!=0)
|
||
{
|
||
//Alloc one AI Model
|
||
p_stAIModel=fn_p_stAllocAIModel();
|
||
|
||
if(lNbReflexComport!=0)
|
||
{
|
||
//Alloc Reflex Script IA
|
||
AI_M_p_stGetReflexScriptAIModel(p_stAIModel)=fn_p_stAllocScriptAI(fn_ucGetDefaultActionTableNbEntries());
|
||
}
|
||
|
||
if(lNbIntellComport!=0)
|
||
{
|
||
//Alloc Intel Script IA
|
||
AI_M_p_stGetIntelligenceScriptAIModel(p_stAIModel)=fn_p_stAllocScriptAI(fn_ucGetDefaultActionTableNbEntries());
|
||
}
|
||
|
||
if(lNbDesignerVariables!=0)
|
||
{
|
||
//Alloc Dsg Var
|
||
//A CHANGER passer par une macro
|
||
unsigned long ulSizeOfAllDsgVar=g_clDsgVarList.m_fn_lGetSizeOfAllDesignerVariables();
|
||
if(ulSizeOfAllDsgVar!=0)
|
||
p_stAIModel->p_stDsgVar=fn_p_stAllocDsgVar(ulSizeOfAllDsgVar,(unsigned char)lNbDesignerVariables);
|
||
else
|
||
p_stAIModel->p_stDsgVar=NULL;
|
||
}
|
||
|
||
//SHAITAN
|
||
m_pclModel->mfn_vUpdateAIModel(p_stAIModel);
|
||
//SHAITAN
|
||
|
||
//Alloc ia MS for all instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
POSITION p=clDebugIsEnableList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
|
||
//Alloc ia MS and Mind structure
|
||
fn_vBrainAlloc(pstEngineObject);
|
||
|
||
//Sets AI Model pointer
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
AI_M_p_stGetAIModel(pstMind)=p_stAIModel;
|
||
|
||
//SHAITAN
|
||
pclInstance->mfn_vUpdateAIModel(p_stAIModel);
|
||
//SHAITAN
|
||
|
||
// CG PB DEBUGGER 23/06/98
|
||
#ifdef ACTIVE_AIDEBUG
|
||
//For Debugger
|
||
if(p!=NULL)
|
||
AIDebug_fn_vSetEnable(pstMind,clDebugIsEnableList.GetNext(p));
|
||
#endif
|
||
|
||
//Sets AI character name
|
||
char *szCharacterName=fn_szFindPersonalTypeNameOfPersonalType(M_ObjectGetPersonalType(pstEngineObject));
|
||
if(szCharacterName!=NULL)
|
||
AI_M_SetPersoName(pstMind,szCharacterName);
|
||
|
||
//Alloc Dsg Mem
|
||
unsigned long ulSizeOfAllDsgVar=g_clDsgVarList.m_fn_lGetSizeOfAllDesignerVariables();
|
||
if(ulSizeOfAllDsgVar!=0)
|
||
{
|
||
AI_M_p_stGetDsgMem(pstMind)=fn_p_stAllocDsgMem(&AI_M_p_stGetDsgVar(pstMind),ulSizeOfAllDsgVar);
|
||
M_GetDsgMemBufferInit(pstMind)=fn_p_cAllocDsgMemBuffer(ulSizeOfAllDsgVar);
|
||
}
|
||
else
|
||
AI_M_p_stGetDsgMem(pstMind)=NULL;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//Sets h_Brain to null
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
|
||
pstEngineObject->h_Brain=NULL;
|
||
}
|
||
}
|
||
|
||
//Translates declaration
|
||
if(lNbDesignerVariables!=0)
|
||
{
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditDecl, FALSE);
|
||
|
||
//For model
|
||
if(!m_pclModel->m_fn_pclGetEditorModel()->m_clInstancesList.IsEmpty())
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetHead();
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
bNoError=m_clListOfDeclarations.m_fn_bProcessIA(bProcessAll|bDeclDsgVarMustBeProcessed,TRUE,pstMind,NULL,DsgVarText,&m_clDebugInfoList);
|
||
}
|
||
|
||
if(bNoError)
|
||
{
|
||
//For instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
|
||
if(bNoError)
|
||
{
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
memcpy(M_GetDsgMemBufferInit(pstMind),M_GetDsgMemDefaultInit(pstMind),M_GetDsgVarSize(pstMind));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-04-
|
||
if (bNoError)
|
||
{
|
||
//Translates (acknowledge) macros
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditMacro, FALSE);
|
||
// this should be same as for declarations
|
||
// since i don't wanna change macro behaviour
|
||
|
||
// For model
|
||
// translates (ack) macros anyway, don't need instances for that...
|
||
if(! m_pclModel->m_fn_pclGetEditorModel () -> m_clInstancesList.IsEmpty ())
|
||
{
|
||
CPA_Actor *pclInstance = (CPA_Actor *) clInstancesList . GetHead ();
|
||
tdstEngineObject *pstEngineObject = (tdstEngineObject *) pclInstance -> GetData ();
|
||
MS_tdxHandleToBrain hBrain = pstEngineObject -> h_Brain;
|
||
if ( hBrain != NULL ) {
|
||
AI_tdstMind *pstMind = M_pstGetMindOfBrain (hBrain);
|
||
|
||
bNoError=m_clListOfMacros.m_fn_bProcessIA(bProcessAll,TRUE,pstMind,NULL,Macro_2_Text,&m_clDebugInfoList);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (bNoError)
|
||
{
|
||
csMsg=csMsgBase+"(Subr)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
if(lNbSubrs != 0)
|
||
{
|
||
tdstListOfMacro *pstListOfSubrs;
|
||
|
||
if(bNoError)
|
||
{
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditSubr, FALSE);
|
||
|
||
//Alloc list of subrs
|
||
pstListOfSubrs = fn_p_stAllocListOfMacro ((unsigned char) lNbSubrs);
|
||
|
||
//Links subrs with model
|
||
AI_M_SetListOfMacroAIModel (p_stAIModel, pstListOfSubrs);
|
||
|
||
//Generates subrs data
|
||
bNoError = m_clListOfSubrs . m_fn_bProcessIA (bProcessAll,
|
||
FALSE,
|
||
NULL,
|
||
(tdstComport *) pstListOfSubrs,
|
||
SubrText,
|
||
&m_clDebugInfoList);
|
||
}
|
||
}
|
||
}
|
||
//END ROMTEAM Cristi Petrescu 98-04-
|
||
|
||
if(bNoError)
|
||
{
|
||
//Translates reflex
|
||
csMsg=csMsgBase+"(Reflex)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
if(lNbReflexComport!=0)
|
||
{
|
||
tdstComport *pstReflexComport;
|
||
|
||
if(bNoError)
|
||
{
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditReflex, FALSE);
|
||
|
||
lNbReflexComport=m_clListOfReflexBehaviours.GetCount();
|
||
if(lNbReflexComport!=0)
|
||
{
|
||
//Alloc behaviours of reflex
|
||
pstReflexComport=fn_p_stAllocComport((unsigned char)lNbReflexComport);
|
||
|
||
//Links reflex with model
|
||
M_GetScriptAIComport(AI_M_p_stGetReflexScriptAIModel(p_stAIModel))=pstReflexComport;
|
||
|
||
//Generates reflex data
|
||
bNoError=m_clListOfReflexBehaviours.m_fn_bProcessIA(bProcessAll,FALSE,NULL,pstReflexComport,ReflexText,&m_clDebugInfoList);
|
||
}
|
||
}
|
||
|
||
//Links reflex with reflex script and alloc/init actions table for all instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL && bNoError)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
|
||
if(lNbReflexComport!=0 && bNoError)
|
||
{
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
AI_tdstAIModel *pstModel=AI_M_p_stGetAIModel(pstMind);
|
||
tdstScriptAI **ppstReflex=&(AI_M_p_stGetReflexScriptAIModel(pstModel));
|
||
|
||
//Gets reflex pointer
|
||
tdstScriptAI *pstReflex=AI_M_p_stGetReflexScriptAIModel(pstModel);
|
||
|
||
//Sets Reflex ScriptAI pointer
|
||
M_GetScriptAIComport(pstReflex)=pstReflexComport;
|
||
M_GetScriptAINbComport(pstReflex)=(unsigned char)lNbReflexComport;
|
||
|
||
//Links reflex with reflex script
|
||
AI_M_SetReflex(
|
||
pstMind,
|
||
fn_p_stAllocIntelligence(
|
||
ppstReflex,
|
||
M_GetScriptAIActionTableNbEntry(*ppstReflex)
|
||
)
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//Translates intelligence
|
||
if(bNoError)
|
||
{
|
||
csMsg=csMsgBase+"(Intelligence)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
if(lNbIntellComport!=0)
|
||
{
|
||
tdstComport *pstIntellComport;
|
||
|
||
if(bNoError)
|
||
{
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditIntell, FALSE);
|
||
|
||
lNbIntellComport=m_clListOfIntelligenceBehaviours.GetCount();
|
||
if(lNbIntellComport!=0)
|
||
{
|
||
//Alloc behaviours of intelligence
|
||
pstIntellComport=fn_p_stAllocComport((unsigned char)lNbIntellComport);
|
||
|
||
//Links intelligence with model
|
||
M_GetScriptAIComport(AI_M_p_stGetIntelligenceScriptAIModel(p_stAIModel))=pstIntellComport;
|
||
|
||
//Generates intelligence data
|
||
bNoError=m_clListOfIntelligenceBehaviours.m_fn_bProcessIA(bProcessAll,FALSE,NULL,pstIntellComport,IntelligenceText,&m_clDebugInfoList);
|
||
}
|
||
}
|
||
|
||
//Links intelligence with intelligence script and alloc/init actions table for all instances
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL && bNoError)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
|
||
if(lNbIntellComport!=0 && bNoError)
|
||
{
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
AI_tdstAIModel *pstModel=AI_M_p_stGetAIModel(pstMind);
|
||
tdstScriptAI **ppstIntelligence=&(AI_M_p_stGetIntelligenceScriptAIModel(pstModel));
|
||
|
||
//Gets intelligence pointer
|
||
tdstScriptAI *pstIntelligence=AI_M_p_stGetIntelligenceScriptAIModel(pstModel);
|
||
|
||
//Sets instellience ScriptAI pointer
|
||
M_GetScriptAIComport(pstIntelligence)=pstIntellComport;
|
||
M_GetScriptAINbComport(pstIntelligence)=(unsigned char)lNbIntellComport;
|
||
|
||
//Links intelligence with intelligence script
|
||
AI_M_SetIntelligence(
|
||
pstMind,
|
||
fn_p_stAllocIntelligence(
|
||
ppstIntelligence,
|
||
M_GetScriptAIActionTableNbEntry(*ppstIntelligence)
|
||
)
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if(bNoError)
|
||
{
|
||
m_fn_vSetModified(FALSE);
|
||
|
||
//For Reinit comport in "CPA_EdIR_Frame::m_fn_vBeforeEngine"
|
||
m_fn_vSetReInitBehaviourFlag(TRUE);
|
||
|
||
if((lNbReflexComport!=0) ||
|
||
(lNbIntellComport!=0) ||
|
||
((lNbDesignerVariables!=0) && (!clInstancesList.IsEmpty())))
|
||
{
|
||
if(bProcessAll || bDeclDsgVarMustBeProcessed)
|
||
{
|
||
m_fn_vCreateInitControlsForBehaviour(p_stAIModel);
|
||
m_fn_vCreateControlsForBehaviour();
|
||
}
|
||
else
|
||
{
|
||
// CPA2 ASilvescu 98-05-28
|
||
// m_fn_vUpdateInitControlsForBehaviour(p_stAIModel);
|
||
// m_fn_vUpdateControlsForBehaviour();
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=m_pclModel->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
CTL_Editor_Data *pclData=pclListOfDesignerVariableType->m_fn_pclGetDataFromName(g_c_csInitialIABehaviour);
|
||
if(pclData==NULL)
|
||
{
|
||
m_fn_vCreateInitControlsForBehaviour(p_stAIModel);
|
||
m_fn_vCreateControlsForBehaviour();
|
||
}
|
||
else
|
||
{
|
||
m_fn_vUpdateInitControlsForBehaviour(p_stAIModel);
|
||
m_fn_vUpdateControlsForBehaviour();
|
||
}
|
||
// End CPA2 ASilvescu 98-05-28
|
||
}
|
||
|
||
if(lNbDesignerVariables!=0)
|
||
{
|
||
//Init current dsg var values with init dsg var values (For all instances)
|
||
pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetData();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
// ANNECY MT - 11/09/98 {
|
||
fn_vSecondPassOfDsgMem(pstMind,FALSE,OTI_MapLoaded/* ??? */);
|
||
// END ANNECY MT }
|
||
AI_M_SetSecondPassDone(AI_M_p_stGetAIModel(pstMind),1);
|
||
|
||
//Update data in control
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=pclInstance->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
pclDsgVarView->m_fn_vUpdateValues(pclListOfDesignerVariableType);
|
||
}
|
||
}
|
||
|
||
m_fn_vUpdateDatasWithOldValues();
|
||
|
||
//Updates designer variable view
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
CPA_EdIR_DesignerVariablesView *pclDsgVarView=(CPA_EdIR_DesignerVariablesView *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetDesignerVariablesView,0);
|
||
EdActors_EditorActor *pclSelectedActor;
|
||
|
||
if(pclActor!=NULL)
|
||
{
|
||
pclSelectedActor=pclActor->m_fn_pclGetEditorActor();
|
||
CTL_Editor_DataList *pclListOfDesignerVariableType=pclSelectedActor->m_pclListOfDesignerVariableType;
|
||
pclDsgVarView->m_fn_vUpdateDisplayWithValues(pclListOfDesignerVariableType);
|
||
}
|
||
}
|
||
//Sets current state
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(tdeOldState, FALSE);
|
||
|
||
//Sets current brain
|
||
pclIRMainFrame->m_fn_pclUpdateBrain(pclOldBrain,TRUE,FALSE);
|
||
|
||
if(!m_bDsgVarControlsAreCreated)
|
||
m_bDsgVarControlsAreCreated=(!clInstancesList.IsEmpty());
|
||
}
|
||
}
|
||
|
||
m_bOldApplicationIsOK=bNoError;
|
||
if(bNoError)
|
||
{
|
||
//csMsg=csMsgBase+"OK (Good Work !!)";
|
||
csMsg=csMsgBase+"OK (<28>a vaaaaa 3lik !!)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
|
||
|
||
m_bAlreadyProcessed=TRUE;
|
||
}
|
||
else
|
||
{
|
||
csMsg=csMsgBase+"KO :-( (Bad Boy)";
|
||
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
|
||
}
|
||
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vEnableButtons(bOldButtonsState);
|
||
|
||
//ANNECY CB
|
||
AfxGetApp()->DoWaitCursor(-1);
|
||
g_pclAIInterface->m_bIsProcessing = FALSE;
|
||
|
||
ReleaseCapture();
|
||
// AfxGetApp()->DoWaitCursor(0);
|
||
//END ANNECY
|
||
return bNoError;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void *CPA_EdIR_Brain::m_fn_pvGetStateHandle(CString csActionName)
|
||
{
|
||
CPA_List<CPA_Action> *pclActionList=&(m_pclModel->m_pub_fn_pclGetFamily()->m_oListOfActions);
|
||
//ANNECY CB
|
||
LPCSTR lpcs = (LPCSTR) csActionName;
|
||
//END
|
||
POSITION pos=pclActionList->GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Action *pclAction=pclActionList->GetNext(pos);
|
||
|
||
//ANNECY CB
|
||
if(!strcmpi(lpcs, pclAction->GetName()))
|
||
// if(csActionName.CompareNoCase(CString(pclAction->GetName()))==0)
|
||
//END
|
||
{
|
||
if(pclAction->mfn_p_oGetDefaultState()!=NULL)
|
||
{
|
||
return pclAction->mfn_p_oGetDefaultState()->GetData();
|
||
}
|
||
else
|
||
{
|
||
AfxMessageBox("The action \""+pclAction->GetName()+"\" has no Initial State !!!!");
|
||
|
||
return NULL;
|
||
}
|
||
}
|
||
}
|
||
|
||
return NULL;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vGetActionList(CStringList *p_cslActionList)
|
||
{
|
||
CPA_List<CPA_Action> *pclActionList=&(m_pclModel->m_pub_fn_pclGetFamily()->m_oListOfActions);
|
||
|
||
POSITION pos=pclActionList->GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Action *pclAction=pclActionList->GetNext(pos);
|
||
|
||
p_cslActionList->AddTail(CString(pclAction->GetName()));
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
BOOL CPA_EdIR_Brain::m_fn_bOldApplicationIsOK()
|
||
{
|
||
return m_bOldApplicationIsOK;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
BOOL CPA_EdIR_Brain::m_fn_bReInitBehaviourIsNeeded()
|
||
{
|
||
return m_bMustReInitBehaviour;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vSetReInitBehaviourFlag(BOOL bMustReInitBehaviour)
|
||
{
|
||
m_bMustReInitBehaviour=bMustReInitBehaviour;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
BOOL CPA_EdIR_Brain::m_fn_bHasBeenModified()
|
||
{
|
||
BOOL bHasBeenModified=FALSE;
|
||
|
||
bHasBeenModified=bHasBeenModified || m_clListOfIntelligenceBehaviours.m_fn_bHasBeenModified();
|
||
bHasBeenModified=bHasBeenModified || m_clListOfReflexBehaviours.m_fn_bHasBeenModified();
|
||
bHasBeenModified=bHasBeenModified || m_clListOfDeclarations.m_fn_bHasBeenModified();
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
bHasBeenModified=bHasBeenModified || m_clListOfMacros.m_fn_bHasBeenModified();
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
bHasBeenModified=bHasBeenModified || m_clListOfSubrs.m_fn_bHasBeenModified();
|
||
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
|
||
return (m_bHasBeenModified||bHasBeenModified);
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vSetModified(BOOL bIsModified)
|
||
{
|
||
m_clListOfIntelligenceBehaviours.m_fn_vSetModified(bIsModified);
|
||
m_clListOfReflexBehaviours.m_fn_vSetModified(bIsModified);
|
||
m_clListOfDeclarations.m_fn_vSetModified(bIsModified);
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
m_clListOfMacros.m_fn_vSetModified(bIsModified);
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
m_clListOfSubrs.m_fn_vSetModified(bIsModified);
|
||
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
m_bHasBeenModified=bIsModified;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
BOOL CPA_EdIR_Brain::m_fn_bIAIsAlreadyProcessed()
|
||
{
|
||
return m_bAlreadyProcessed;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vNotify()
|
||
{
|
||
//Notifications
|
||
CString csFamilyName=m_fn_pclGetModel()->m_pub_fn_pclGetFamily()->GetName();
|
||
CString csModelName=m_fn_pclGetModel()->GetName();
|
||
CString csPathName=CString(fn_szGetFamiliesDataPath())+"\\"+csFamilyName+"\\"+csModelName+"\\";
|
||
CString csEngineSectionName;
|
||
CString csEditorSectionName;
|
||
|
||
//Notifies Engine script (.car) for all instances
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_fn_pclGetModel());
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)clInstancesList.GetNext(pos);
|
||
|
||
pclInstance->fn_vNotifySave();
|
||
}
|
||
|
||
//Notifies Editor model script
|
||
m_fn_pclGetModel()->fn_vNotifySave();
|
||
|
||
//Notifies Engine AI script
|
||
csEngineSectionName=csPathName+csModelName+g_c_csAIFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEngineSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEngineAI,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
|
||
//Notifies Engine AI declaration script
|
||
csEngineSectionName=csPathName+csModelName+g_c_csAIDecFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEngineSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEngineAIDeclaration,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
|
||
//Notifies Engine AI rule script
|
||
csEngineSectionName=csPathName+csModelName+g_c_csAIRulFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEngineSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEngineAIRules,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
|
||
//Notifies Engine AI reflex script
|
||
csEngineSectionName=csPathName+csModelName+g_c_csAIRfxFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEngineSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEngineAIReflexes,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-04-
|
||
//Notifies Engine AI reflex script
|
||
csEngineSectionName=csPathName+csModelName+g_c_csAISubrFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEngineSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEngineAISubrs,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
//END ROMTEAM Cristi Petrescu 98-04-
|
||
|
||
//Notifies Editor AI declaration script
|
||
csEditorSectionName=csPathName+csModelName+g_c_csDeclarationFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEditorSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEditorAIDeclaration,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
|
||
// BEGIN CPA2 Cristi Petrescu 98-03-
|
||
//Notifies Editor AI macro script
|
||
csEditorSectionName=csPathName+csModelName+g_c_csMacroFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEditorSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEditorAIMacros,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
// END CPA2 Cristi Petrescu 98-03-
|
||
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
//Notifies Editor AI Subr script
|
||
csEditorSectionName=csPathName+csModelName+g_c_csSubrFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEditorSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEditorAISubrs,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
|
||
//Notifies Editor AI rule script
|
||
csEditorSectionName=csPathName+csModelName+g_c_csIntelligenceFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEditorSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEditorAIRules,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
|
||
//Notifies Editor AI reflex script
|
||
csEditorSectionName=csPathName+csModelName+g_c_csReflexFileExtension;
|
||
SCR_fn_v_SvL1_RegisterNotify(M_MAKECHAR(csEditorSectionName),
|
||
CPA_EdIR_Brain::m_fn_vSaveEditorAIReflexes,
|
||
this,
|
||
SCR_EA_Ntfy_RebuildSection);
|
||
|
||
//Adds this brain into the list of modified brain
|
||
CPA_EdIR_Frame *pclMainFrame=g_pclAIInterface->m_pclIRMainFrame;
|
||
pclMainFrame->m_fn_vAddOneModifiedBrain(this);
|
||
}
|
||
|
||
/****************************************************************************/
|
||
CString CPA_EdIR_Brain::m_fn_csGetDsgVarName(long lDsgVarIndex)
|
||
{
|
||
CString csIn;
|
||
|
||
if(!m_clListOfDeclarations.IsEmpty())
|
||
{
|
||
//Gets Designer Variable MainBehaviour (first element in the list)
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clListOfDeclarations.GetHead();
|
||
|
||
//Gets text declaraition
|
||
if(pclMainBehaviour->m_pclBehaviour!=NULL)
|
||
csIn=pclMainBehaviour->m_pclBehaviour->m_fn_csGetRules();
|
||
else
|
||
csIn=pclMainBehaviour->m_csText;
|
||
|
||
csIn=fn_csGetCodeWithoutComments(csIn);
|
||
|
||
//Looks for dsg var in this text
|
||
long lCurrentIndex=0;
|
||
long lCurrentDsgVarIndex=0;
|
||
CString csWord=fn_csGetNextWord(csIn,lCurrentIndex);
|
||
CString csName;
|
||
CString csType=csWord;
|
||
while(!csWord.IsEmpty() && lCurrentDsgVarIndex<=lDsgVarIndex)
|
||
{
|
||
//Gets Type
|
||
tdeDsgVarTypeId eDsgVarTypeId=(tdeDsgVarTypeId)fn_lGetDsgVarTypeIdFromEditorName(csWord);
|
||
csType=csWord;
|
||
|
||
//Gets Name
|
||
csName=fn_csGetNextWord(csIn,lCurrentIndex);
|
||
|
||
//Skips Value
|
||
fn_csGetNextWord(csIn,lCurrentIndex);
|
||
|
||
if(eDsgVarTypeId==eDsgVarType_Vector)
|
||
{
|
||
//Skips x,y,z components
|
||
fn_csGetNextWord(csIn,lCurrentIndex);
|
||
fn_csGetNextWord(csIn,lCurrentIndex);
|
||
fn_csGetNextWord(csIn,lCurrentIndex);
|
||
}
|
||
|
||
//Gets next word
|
||
csWord=fn_csGetNextWord(csIn,lCurrentIndex);
|
||
|
||
lCurrentDsgVarIndex++;
|
||
}
|
||
|
||
if(lCurrentDsgVarIndex==lDsgVarIndex+1)
|
||
return csName+" <"+csType+">";
|
||
else
|
||
return "";
|
||
}
|
||
else
|
||
return "";
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vShowBehaviour(tdstNodeInterpret *pstNode)
|
||
{
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
CPA_EdIR_Behaviour *pclBehaviour;
|
||
CPA_EdIR_Frame *pclIRMainFrame=g_pclAIInterface->m_pclIRMainFrame;
|
||
|
||
if (pstNode)
|
||
{
|
||
CPA_EdIR_DebugInfo *pclDebugInfo = m_clDebugInfoList . m_fn_pclGetDebugInfo (pstNode);
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
CString csBehaviourName= pclDebugInfo -> m_fn_csGetBehaviourName ();
|
||
long lMacroIndex = pclDebugInfo -> m_fn_lGetMacroIndex ();
|
||
CPA_EdIR_MainBehaviourList *pclBehaviourList=NULL;
|
||
if (lMacroIndex >= 0)
|
||
{
|
||
csBehaviourName = pclDebugInfo -> m_fn_csGetMacroName ();
|
||
pclBehaviourList = & m_clListOfMacros;
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=pclBehaviourList->m_fn_pclGetMainBehaviour(csBehaviourName);
|
||
if (! pclMainBehaviour)// do not overdo
|
||
//|| pclMainBehaviour -> m_pclBehaviour -> m_bOldMacro)
|
||
{
|
||
csBehaviourName= pclDebugInfo -> m_fn_csGetBehaviourName ();
|
||
lMacroIndex = -1;
|
||
}
|
||
}
|
||
|
||
if (lMacroIndex < 0)
|
||
{
|
||
if(m_clListOfIntelligenceBehaviours.m_fn_bIsInList(csBehaviourName))
|
||
{
|
||
pclBehaviourList=&m_clListOfIntelligenceBehaviours;
|
||
}
|
||
else
|
||
if(m_clListOfReflexBehaviours.m_fn_bIsInList(csBehaviourName))
|
||
{
|
||
pclBehaviourList=&m_clListOfReflexBehaviours;
|
||
}
|
||
}
|
||
|
||
if(pclBehaviourList!=NULL)
|
||
{
|
||
CPA_EdIR_Frame *pclIRMainFrame=g_pclAIInterface->m_pclIRMainFrame;
|
||
|
||
//Shows current actor
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_DisplayActor,(long)m_pclModel);
|
||
|
||
//Shows intelligence editor
|
||
g_pclAIInterface->m_fn_vShowEditor();
|
||
|
||
//Sets current state
|
||
if(pclBehaviourList==&m_clListOfIntelligenceBehaviours)
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditIntell);
|
||
else
|
||
if (pclBehaviourList == & m_clListOfReflexBehaviours)
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditReflex);
|
||
else
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditMacro);
|
||
|
||
//Shows the good behaviour
|
||
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=pclBehaviourList->m_fn_pclGetMainBehaviour(csBehaviourName);
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
pclBehaviour=pclMainBehaviour->m_pclBehaviour;
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
ASSERT(pclBehaviour!=NULL);
|
||
pclIRMainFrame->m_fn_pclGetDiagrammeView()->m_fn_vOldActiveBehaviourHasChanged(pclBehaviour);
|
||
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
// mark the executed lines
|
||
pclIRMainFrame -> m_fn_pclGetEdRulesView () -> m_fn_vSetDebugInfoList (& pclMainBehaviour -> m_clDebugInfoList);
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
|
||
//Shows the good line
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
long lLineNumber = pclDebugInfo -> m_fn_lGetLineNumber ();
|
||
if (lMacroIndex < 0)
|
||
{
|
||
pclBehaviour -> m_fn_vSetCursorPosByLine (lLineNumber);
|
||
pclIRMainFrame -> m_fn_pclGetEdRulesView () -> m_lExecutedLine = pclDebugInfo -> m_fn_lGetIndex ();
|
||
}
|
||
else
|
||
{
|
||
//pclBehaviour -> m_fn_vSetCursorPosByIndex (lMacroIndex);
|
||
pclIRMainFrame -> m_fn_pclGetEdRulesView () -> m_lExecutedLine = 0;
|
||
}
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
}
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
}
|
||
else
|
||
{
|
||
//the old behaviour
|
||
pclBehaviour = pclIRMainFrame -> m_fn_pclGetDiagrammeView () -> m_fn_pclGetActiveBehaviour ();
|
||
}
|
||
|
||
if (pclBehaviour)
|
||
{
|
||
// hide lines if necessary
|
||
pclBehaviour -> m_fn_vHideNonExecutedLines ();
|
||
|
||
// redraw marks
|
||
pclIRMainFrame -> m_fn_pclGetEdRulesView () -> InvalidateRect (NULL);
|
||
}
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
}
|
||
|
||
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vShowBehaviour(CString csBehaviourName)
|
||
{
|
||
CPA_EdIR_MainBehaviourList *pclBehaviourList=NULL;
|
||
if(m_clListOfIntelligenceBehaviours.m_fn_bIsInList(csBehaviourName))
|
||
{
|
||
pclBehaviourList=&m_clListOfIntelligenceBehaviours;
|
||
}
|
||
else
|
||
if(m_clListOfReflexBehaviours.m_fn_bIsInList(csBehaviourName))
|
||
{
|
||
pclBehaviourList=&m_clListOfReflexBehaviours;
|
||
}
|
||
|
||
if(pclBehaviourList!=NULL)
|
||
{
|
||
CPA_EdIR_Frame *pclIRMainFrame=g_pclAIInterface->m_pclIRMainFrame;
|
||
|
||
//Shows current actor
|
||
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
|
||
pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_DisplayActor,(long)m_pclModel);
|
||
|
||
//Shows intelligence editor
|
||
g_pclAIInterface->m_fn_vShowEditor();
|
||
|
||
//Sets current state
|
||
if(pclBehaviourList==&m_clListOfIntelligenceBehaviours)
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditIntell);
|
||
else
|
||
pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditReflex);
|
||
|
||
//Shows the good behaviour
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=pclBehaviourList->m_fn_pclGetMainBehaviour(csBehaviourName);
|
||
CPA_EdIR_Behaviour *pclBehaviour=pclMainBehaviour->m_pclBehaviour;
|
||
ASSERT(pclBehaviour!=NULL);
|
||
pclIRMainFrame->m_fn_pclGetDiagrammeView()->m_fn_vOldActiveBehaviourHasChanged(pclBehaviour);
|
||
|
||
// mark the executed lines
|
||
pclIRMainFrame -> m_fn_pclGetEdRulesView () -> m_fn_vSetDebugInfoList (& pclMainBehaviour -> m_clDebugInfoList);
|
||
|
||
/*
|
||
//Shows the good line
|
||
long lIndex=m_clDebugInfoList.m_fn_lGetIndex(pstNode);
|
||
pclBehaviour->m_fn_vSetCursorPos(lIndex);
|
||
*/
|
||
|
||
// hide lines if necessary
|
||
pclBehaviour -> m_fn_vHideNonExecutedLines ();
|
||
|
||
pclIRMainFrame -> m_fn_pclGetEdRulesView () -> m_lExecutedLine = -1;
|
||
|
||
// redraw marks
|
||
pclIRMainFrame -> m_fn_pclGetEdRulesView () -> InvalidateRect (NULL);
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vMustBuildDebugInfo (BOOL bBuild)
|
||
{
|
||
m_bMustBuildDebugInfo = bBuild;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
CString CPA_EdIR_Brain::m_fn_csGetBehaviourName(tdstNodeInterpret *pstNode)
|
||
{
|
||
return m_clDebugInfoList . m_fn_csGetBehaviourName (pstNode);
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vClearExecutedNodes (CString csBehaviourName)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour = m_clListOfIntelligenceBehaviours . m_fn_pclGetMainBehaviour (csBehaviourName);
|
||
if (! pclMainBehaviour)
|
||
{
|
||
pclMainBehaviour = m_clListOfReflexBehaviours . m_fn_pclGetMainBehaviour (csBehaviourName);
|
||
}
|
||
if (pclMainBehaviour)
|
||
{
|
||
pclMainBehaviour -> m_fn_vClearExecutedNodes ();
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vSetOneExecutedNode (tdstNodeInterpret *pstNode)
|
||
{
|
||
CPA_EdIR_DebugInfo *pclDebugInfo = m_clDebugInfoList . m_fn_pclGetDebugInfo (pstNode);
|
||
|
||
if (pclDebugInfo)
|
||
{
|
||
pclDebugInfo -> m_fn_vSetExecuted (TRUE);
|
||
|
||
// and, as we do this it means that the Behaviour should be redisplayed...
|
||
CString csBehaviourName = pclDebugInfo -> m_fn_csGetBehaviourName ();
|
||
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour;
|
||
|
||
pclMainBehaviour = m_clListOfIntelligenceBehaviours . m_fn_pclGetMainBehaviour (csBehaviourName);
|
||
if (! pclMainBehaviour)
|
||
{
|
||
pclMainBehaviour = m_clListOfReflexBehaviours . m_fn_pclGetMainBehaviour (csBehaviourName);
|
||
}
|
||
if (pclMainBehaviour)
|
||
{
|
||
pclMainBehaviour -> m_pclBehaviour -> m_bFirstActivate = TRUE;
|
||
}
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vUpdateDebugInfo (void)
|
||
{
|
||
// this is called to build the debug info for TID usage
|
||
if (m_bMustBuildDebugInfo && m_clDebugInfoList . IsEmpty ())
|
||
{
|
||
//force full process
|
||
m_fn_bProcessIA (TRUE);
|
||
}
|
||
|
||
// anyway, clean up the executed flag
|
||
POSITION pos = m_clDebugInfoList . GetHeadPosition ();
|
||
CPA_EdIR_DebugInfo *pclDebugInfo;
|
||
while (pos)
|
||
{
|
||
pclDebugInfo = m_clDebugInfoList . GetNext (pos);
|
||
|
||
pclDebugInfo -> m_fn_vSetExecuted (FALSE);
|
||
}
|
||
}
|
||
//END ROMTEAM Cristi Petrescu 98-05-
|
||
|
||
// BEGIN ROMTEAM Cristi Petrescu 98-06-
|
||
//****************************************************************************
|
||
long CPA_EdIR_Brain::m_fn_lGetVariableIndex (CString csVariableName)
|
||
{
|
||
CString csIn;
|
||
csVariableName . MakeLower ();
|
||
|
||
if (! m_clListOfDeclarations . IsEmpty ())
|
||
{
|
||
//Gets Designer Variable MainBehaviour (first element in the list)
|
||
CPA_EdIR_MainBehaviour * pclMainBehaviour = m_clListOfDeclarations . GetHead ();
|
||
|
||
//Gets text declaraition
|
||
if (pclMainBehaviour -> m_pclBehaviour != NULL)
|
||
csIn = pclMainBehaviour -> m_pclBehaviour -> m_fn_csGetRules ();
|
||
else
|
||
csIn = pclMainBehaviour -> m_csText;
|
||
|
||
csIn = fn_csGetCodeWithoutComments (csIn);
|
||
|
||
//Looks for dsg var in this text
|
||
long lCurrentIndex = 0;
|
||
long lCurrentDsgVarIndex = 0;
|
||
CString csWord = fn_csGetNextWord (csIn, lCurrentIndex);
|
||
CString csName;
|
||
CString csType = csWord;
|
||
while(! csWord . IsEmpty ())
|
||
{
|
||
//Gets Type
|
||
tdeDsgVarTypeId eDsgVarTypeId = (tdeDsgVarTypeId) fn_lGetDsgVarTypeIdFromEditorName (csWord);
|
||
csType = csWord;
|
||
|
||
//Gets Name
|
||
csName = fn_csGetNextWord (csIn, lCurrentIndex);
|
||
csName . MakeLower ();
|
||
|
||
if (csName == csVariableName)
|
||
return lCurrentDsgVarIndex;
|
||
|
||
//Skips Value
|
||
fn_csGetNextWord (csIn,lCurrentIndex);
|
||
|
||
if( eDsgVarTypeId == eDsgVarType_Vector)
|
||
{
|
||
//Skips x,y,z components
|
||
fn_csGetNextWord (csIn, lCurrentIndex);
|
||
fn_csGetNextWord (csIn, lCurrentIndex);
|
||
fn_csGetNextWord (csIn, lCurrentIndex);
|
||
}
|
||
|
||
//Gets next word
|
||
csWord = fn_csGetNextWord (csIn, lCurrentIndex);
|
||
|
||
lCurrentDsgVarIndex++;
|
||
}
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
// END ROMTEAM Cristi Petrescu 98-06-
|
||
|
||
/****************************************************************************/
|
||
CPA_EdIR_BreakPointList *CPA_EdIR_Brain::m_fn_pclGetBreakPointList()
|
||
{
|
||
return &m_clBreakPointList;
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vSetOrRemoveOneBreakPoint(long lIndex,CString csBehaviourName)
|
||
{
|
||
if(m_clBreakPointList.m_fn_bIsInList(lIndex,csBehaviourName))
|
||
m_clBreakPointList.m_fn_vRemoveOneBreakPoint(lIndex,csBehaviourName);
|
||
else
|
||
m_clBreakPointList.m_fn_vSetOneBreakPoint(lIndex,csBehaviourName);
|
||
}
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vSetEngineBreakPoints(BOOL bSetBreakPoint)
|
||
{
|
||
if(bSetBreakPoint==FALSE)
|
||
{
|
||
//Removes BreakPoint
|
||
POSITION pos=m_clBreakPointList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
tdstNodeInterpret *pstNode=m_clBreakPointList.GetNext(pos)->m_fn_pstGetNode();
|
||
|
||
// CG PB DEBUGGER 23/06/98
|
||
#ifdef ACTIVE_AIDEBUG
|
||
if(pstNode!=NULL)
|
||
M_SetBreakPoint(pstNode,FALSE);
|
||
#endif
|
||
}
|
||
}
|
||
else
|
||
{
|
||
CPA_EdIR_BreakPointList clBreakPointListToRemove;
|
||
|
||
//Sets BreakPoint
|
||
POSITION pos=m_clBreakPointList.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_EdIR_BreakPoint *pclBreakPoint=m_clBreakPointList.GetNext(pos);
|
||
CString csBehaviourName=pclBreakPoint->m_fn_csGetBehaviourName();
|
||
long lIndex=pclBreakPoint->m_fn_lGetIndex();
|
||
|
||
tdstNodeInterpret *pstNode=m_clDebugInfoList.m_fn_pstGetNode(lIndex,csBehaviourName);
|
||
|
||
if(pstNode!=NULL)
|
||
{
|
||
long lBehaviourIndex=-1;
|
||
CPA_EdIR_MainBehaviourList *pclBehaviourList=NULL;
|
||
if(m_clListOfIntelligenceBehaviours.m_fn_bIsInList(csBehaviourName))
|
||
{
|
||
pclBehaviourList=&m_clListOfIntelligenceBehaviours;
|
||
}
|
||
else
|
||
if(m_clListOfReflexBehaviours.m_fn_bIsInList(csBehaviourName))
|
||
{
|
||
pclBehaviourList=&m_clListOfReflexBehaviours;
|
||
}
|
||
|
||
if(pclBehaviourList!=NULL)
|
||
lBehaviourIndex=pclBehaviourList->m_fn_lGetIndexOfABehaviour(csBehaviourName);
|
||
|
||
if(lBehaviourIndex!=-1)
|
||
{
|
||
CPA_List<CPA_BaseObject> clInstancesList;
|
||
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,m_pclModel);
|
||
|
||
POSITION pos=clInstancesList.GetHeadPosition();
|
||
if(pos!=NULL)
|
||
{
|
||
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetAt(pos));
|
||
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetStruct();
|
||
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
|
||
|
||
if(hBrain!=NULL)
|
||
{
|
||
AI_tdstMind *pstMind=M_pstGetMindOfBrain(hBrain);
|
||
|
||
if(pstMind!=NULL)
|
||
{
|
||
AI_tdstAIModel *pstAIModel=AI_M_p_stGetAIModel(pstMind);
|
||
|
||
if(pstAIModel!=NULL)
|
||
{
|
||
tdstScriptAI *pstScriptAI;
|
||
if(pclBehaviourList==&m_clListOfIntelligenceBehaviours)
|
||
pstScriptAI=AI_M_p_stGetIntelligenceScriptAIModel(pstAIModel);
|
||
else
|
||
pstScriptAI=AI_M_p_stGetReflexScriptAIModel(pstAIModel);
|
||
|
||
|
||
// CG PB DEBUGGER 23/06/98 {
|
||
#ifdef ACTIVE_AIDEBUG
|
||
if(pstScriptAI!=NULL)
|
||
{
|
||
tdstNodeInterpret *pstNewNode=fn_pstSetValidBreakPoint(pstNode,pstScriptAI,lBehaviourIndex);
|
||
|
||
//Update breakpoint
|
||
CPA_EdIR_MainBehaviour *pclMainBehaviour=pclBehaviourList->m_fn_pclGetMainBehaviour(csBehaviourName);
|
||
CPA_EdIR_Behaviour *pclBehaviour=pclMainBehaviour->m_pclBehaviour;
|
||
long lIndex=m_clDebugInfoList.m_fn_lGetIndex(pstNewNode);
|
||
lIndex=pclBehaviour->m_fn_lGetStartLineIndex(lIndex);
|
||
|
||
pclBreakPoint->m_fn_vSetIndex(lIndex);
|
||
pclBreakPoint->m_fn_vSetNode(pstNewNode);
|
||
|
||
if(m_clBreakPointList.m_fn_bExistMoreThanOnce(pclBreakPoint))
|
||
clBreakPointListToRemove.AddTail(pclBreakPoint);
|
||
}
|
||
#endif // } CG PB DEBUGGER 23/06/98
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//Removes break point (multiple break point on the same location)
|
||
pos=clBreakPointListToRemove.GetHeadPosition();
|
||
while(pos!=NULL)
|
||
{
|
||
CPA_EdIR_BreakPoint *pclBreakPoint=clBreakPointListToRemove.GetNext(pos);
|
||
|
||
m_clBreakPointList.m_fn_vRemoveOneBreakPoint(pclBreakPoint->m_fn_lGetIndex(),pclBreakPoint->m_fn_csGetBehaviourName());
|
||
}
|
||
clBreakPointListToRemove.RemoveAll();
|
||
}
|
||
}
|
||
|
||
/****************************************************************************/
|
||
CPA_EdIR_DebugInfoList *CPA_EdIR_Brain::m_fn_pclGetDebugInfoList(void) {
|
||
return ( &m_clDebugInfoList ) ;
|
||
}
|
||
|
||
|
||
// Shaitan => Macros to subroutines
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vChangeAllEditorMacrosToSubroutines (void)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pMacroMainBehaviour;
|
||
CPA_EdIR_MainBehaviour *pSubrMainBehaviour;
|
||
CStringList csListOfMacros;
|
||
CStringList csListOfSubrs;
|
||
POSITION pos;
|
||
CRect crRect(10, 10, 100, 40);
|
||
long lNbSubroutines;
|
||
|
||
// first update macros lists
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditDecl);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditMacro);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditSubr);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
|
||
// get initial rectangle
|
||
if (!m_clListOfSubrs.IsEmpty())
|
||
{
|
||
pSubrMainBehaviour = m_clListOfSubrs.GetTail();
|
||
crRect = pSubrMainBehaviour->m_pclBehaviour->m_fn_crGetBoundingBox();
|
||
crRect.OffsetRect(0,50);
|
||
}
|
||
|
||
// first convert the macro list
|
||
pMacroMainBehaviour = m_clListOfDeclarations.GetTail();
|
||
lNbSubroutines = m_fn_lCreateEditorSubroutinesFromMacro(pMacroMainBehaviour, crRect, &csListOfMacros, &csListOfSubrs);
|
||
crRect.OffsetRect(0, 50*lNbSubroutines);
|
||
|
||
// then convert all the macro behaviours
|
||
pos = m_clListOfMacros.GetHeadPosition();
|
||
while (pos)
|
||
{
|
||
// get the editor text of the macro behaviour
|
||
pMacroMainBehaviour = m_clListOfMacros.GetNext(pos);
|
||
lNbSubroutines = m_fn_lCreateEditorSubroutinesFromMacro(pMacroMainBehaviour, crRect, &csListOfMacros, &csListOfSubrs);
|
||
crRect.OffsetRect(0, 50*lNbSubroutines);
|
||
}
|
||
|
||
// replace macros calls with subroutines calls
|
||
m_fn_vUpdateEditorMacroCallsInEditorAI(&csListOfMacros, &csListOfSubrs);
|
||
|
||
// remove the macros
|
||
m_fn_vRemoveAllMacrosFromEditorAI();
|
||
|
||
// update the display of the subroutines
|
||
m_fn_vUpdateEditorSubroutines();
|
||
}
|
||
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vRemoveAllMacrosFromEditorAI (void)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pMacroMainBehaviour;
|
||
|
||
// remove all macros of the list
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditDecl);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
pMacroMainBehaviour = m_clListOfDeclarations.GetTail();
|
||
pMacroMainBehaviour->m_pclBehaviour->m_fn_vSetRules("");
|
||
pMacroMainBehaviour->m_csText = "";
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
|
||
// remove all macro behaviours
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditMacro);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetDiagrammeView()->m_fn_bDeleteAllBehavioursFromList();
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
}
|
||
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vUpdateEditorSubroutines (void)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pSubrMainBehaviour;
|
||
POSITION pos;
|
||
|
||
// update subroutines panel
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditSubr);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
|
||
// update each subroutine
|
||
pos = m_clListOfSubrs.GetHeadPosition();
|
||
while (pos)
|
||
{
|
||
// update the text of the subroutine
|
||
pSubrMainBehaviour = m_clListOfMacros.GetNext(pos);
|
||
pSubrMainBehaviour->m_pclBehaviour->m_clEditCtrl.m_fn_vColorText(0, pSubrMainBehaviour->m_pclBehaviour->m_clEditCtrl.GetTextLength());
|
||
}
|
||
}
|
||
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vChangeOneEditorMacroToSubroutines (CPA_EdIR_MainBehaviour *pMacroMainBehaviour)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pSubrMainBehaviour;
|
||
CStringList csListOfMacros;
|
||
CStringList csListOfSubrs;
|
||
CRect crRect(10, 10, 100, 40);
|
||
|
||
// first update macros lists
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditDecl);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditMacro);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditSubr);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
|
||
// get initial rectangle
|
||
if (!m_clListOfSubrs.IsEmpty())
|
||
{
|
||
pSubrMainBehaviour = m_clListOfSubrs.GetTail();
|
||
crRect = pSubrMainBehaviour->m_pclBehaviour->m_fn_crGetBoundingBox();
|
||
crRect.OffsetRect(0,50);
|
||
}
|
||
|
||
m_fn_lCreateEditorSubroutinesFromMacro(pMacroMainBehaviour, crRect, &csListOfMacros, &csListOfSubrs);
|
||
|
||
// replace macros calls with subroutines calls
|
||
m_fn_vUpdateEditorMacroCallsInEditorAI(&csListOfMacros, &csListOfSubrs);
|
||
|
||
// remove the macros
|
||
m_fn_vRemoveOneMacroFromEditorAI(pMacroMainBehaviour);
|
||
|
||
// update subroutines panel
|
||
m_fn_vUpdateEditorSubroutines();
|
||
}
|
||
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vRemoveOneMacroFromEditorAI (CPA_EdIR_MainBehaviour *pMacroMainBehaviour)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pListMainBehaviour;
|
||
|
||
// check if the behaviour is the macro list
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditDecl);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
pListMainBehaviour = m_clListOfDeclarations.GetTail();
|
||
if (pListMainBehaviour == pMacroMainBehaviour)
|
||
{
|
||
pMacroMainBehaviour->m_pclBehaviour->m_fn_vSetRules("");
|
||
pMacroMainBehaviour->m_csText = "";
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
}
|
||
// otherwise remove macro behaviou
|
||
else
|
||
{
|
||
// remove all macro behaviours
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditMacro);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetDiagrammeView()->m_fn_bDeleteBehaviourFromList(pMacroMainBehaviour);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
}
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
long CPA_EdIR_Brain::m_fn_lCreateEditorSubroutinesFromMacro (CPA_EdIR_MainBehaviour *pMacroMainBehaviour, CRect crTitleRect, CStringList *pListOfMacros, CStringList *pListOfSubrs)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pSubrMainBehaviour;
|
||
CPA_EdIR_Behaviour *pSubrBehaviour;
|
||
CStringList csListOfDefines;
|
||
CString csRules, csLowRules, csMacro;
|
||
CString csMacroName, csMacroText;
|
||
CString csSubrName, csSubrText;
|
||
CString csCommentLines;
|
||
long lNbSubroutines = 0;
|
||
int iMacroIndex, iNameIndex;
|
||
int iSubrIndex;
|
||
|
||
// first register the local defines
|
||
m_fn_vRegisterEditorDefinesForMacro(pMacroMainBehaviour, &csListOfDefines);
|
||
|
||
// for the search we need a lower-case copy
|
||
csRules = pMacroMainBehaviour->m_pclBehaviour->m_fn_csGetRules();
|
||
csLowRules = csRules;
|
||
csLowRules.MakeLower();
|
||
|
||
// get the first macro in the text
|
||
iMacroIndex = m_fn_iGetFirstValidOccurence(csLowRules, "macro");
|
||
// get the first comment lines
|
||
if ((iMacroIndex != -1)&&(iMacroIndex!=0))
|
||
csCommentLines = m_fn_csExtractCommentLinesForNextMacro("\n"+csRules.Left(iMacroIndex));
|
||
|
||
// if there is no macro in the text, no need to continue
|
||
while (iMacroIndex != -1)
|
||
{
|
||
// get macro text
|
||
csMacro = csRules.Mid(iMacroIndex);
|
||
|
||
// skip the current macro title
|
||
csRules = csRules.Mid(iMacroIndex + 5);
|
||
csLowRules = csLowRules.Mid(iMacroIndex + 5);
|
||
// find the next one
|
||
iMacroIndex = m_fn_iGetFirstValidOccurence(csLowRules, "macro");
|
||
|
||
// cut the macro text and go to the next one
|
||
if (iMacroIndex != -1)
|
||
{
|
||
csMacro = csMacro.Left(iMacroIndex + 5);
|
||
csRules = csRules.Mid(iMacroIndex);
|
||
csLowRules = csLowRules.Mid(iMacroIndex);
|
||
iMacroIndex = 0;
|
||
}
|
||
|
||
// get name of macro
|
||
iNameIndex = csMacro.Find(":");
|
||
csMacroName = csMacro.Mid(5, iNameIndex-5);
|
||
csMacroName.TrimLeft();
|
||
csMacroName.TrimRight();
|
||
// get text of macro
|
||
csMacroText = csMacro.Mid(iNameIndex+1);
|
||
|
||
// build subroutine name
|
||
csSubrName = g_pclAIInterface->GetInterface()->GetUserPrefix() + csMacroName;
|
||
iSubrIndex = 0;
|
||
while (pMacroMainBehaviour->fn_eCheckUnicity(csSubrName) != E_mc_None)
|
||
csSubrName.Format("%s%s_SB%ld", g_pclAIInterface->GetInterface()->GetUserPrefix(), csMacroName, iSubrIndex++);
|
||
|
||
// build subroutine text
|
||
csSubrText = m_fn_csBuildDefineListForMacro(&csListOfDefines, csMacroText);
|
||
csSubrText += csCommentLines;
|
||
csSubrText += "subroutine :" + csMacroText;
|
||
|
||
// get comment lines for the next macro
|
||
csCommentLines = m_fn_csExtractCommentLinesForNextMacro(csSubrText);
|
||
if (csCommentLines.GetLength())
|
||
csSubrText = csSubrText.Left(csSubrText.GetLength()-csCommentLines.GetLength());
|
||
|
||
// create subroutine behaviour
|
||
pSubrBehaviour = g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetDiagrammeView()->m_fn_pclAddOneBehaviour(csSubrName,crTitleRect,csSubrText,FALSE,0);
|
||
pSubrMainBehaviour = new CPA_EdIR_MainBehaviour(m_pclModel,csSubrName,crTitleRect,csSubrText,pSubrBehaviour);
|
||
pSubrBehaviour->m_fn_vSetMainBehaviour(pSubrMainBehaviour);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetDiagrammeView()->m_fn_vAddOneBehaviourInList(pSubrMainBehaviour);
|
||
m_clListOfSubrs.m_fn_vSetModified(TRUE);
|
||
crTitleRect.OffsetRect(0,50);
|
||
lNbSubroutines++;
|
||
|
||
// update lists
|
||
pListOfMacros->AddTail(csMacroName);
|
||
pListOfSubrs->AddTail(csSubrName);
|
||
}
|
||
|
||
return lNbSubroutines;
|
||
}
|
||
|
||
|
||
/****************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vUpdateEditorMacroCallsInEditorAI (CStringList *pListOfMacros, CStringList *pListOfSubrs)
|
||
{
|
||
CPA_EdIR_MainBehaviour *pMainBehaviour;
|
||
POSITION pos, posMacro, posSubr;
|
||
|
||
// update all the behaviours
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditIntell);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
pos = m_clListOfIntelligenceBehaviours.GetHeadPosition();
|
||
while (pos)
|
||
{
|
||
// get the editor text of the macro behaviour
|
||
pMainBehaviour = m_clListOfIntelligenceBehaviours.GetNext(pos);
|
||
posMacro = pListOfMacros->GetHeadPosition();
|
||
posSubr = pListOfSubrs->GetHeadPosition();
|
||
while (posMacro && posSubr)
|
||
m_fn_vReplaceInEditorBehaviour(pMainBehaviour, pListOfMacros->GetNext(posMacro), pListOfSubrs->GetNext(posSubr));
|
||
}
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
|
||
// update all the reflex
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditReflex);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
pos = m_clListOfReflexBehaviours.GetHeadPosition();
|
||
while (pos)
|
||
{
|
||
// get the editor text of the macro behaviour
|
||
pMainBehaviour = m_clListOfReflexBehaviours.GetNext(pos);
|
||
posMacro = pListOfMacros->GetHeadPosition();
|
||
posSubr = pListOfSubrs->GetHeadPosition();
|
||
while (posMacro && posSubr)
|
||
m_fn_vReplaceInEditorBehaviour(pMainBehaviour, pListOfMacros->GetNext(posMacro), pListOfSubrs->GetNext(posSubr));
|
||
}
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
|
||
// update all the subroutines
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_pclGetButtonView()->m_fn_vSetEditState(EditSubr);
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
pos = m_clListOfSubrs.GetHeadPosition();
|
||
while (pos)
|
||
{
|
||
// get the editor text of the macro behaviour
|
||
pMainBehaviour = m_clListOfSubrs.GetNext(pos);
|
||
posMacro = pListOfMacros->GetHeadPosition();
|
||
posSubr = pListOfSubrs->GetHeadPosition();
|
||
while (posMacro && posSubr)
|
||
m_fn_vReplaceInEditorBehaviour(pMainBehaviour, pListOfMacros->GetNext(posMacro), pListOfSubrs->GetNext(posSubr));
|
||
}
|
||
g_pclAIInterface->m_pclIRMainFrame->m_fn_vUpdateBehaviours(FALSE);
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vReplaceInEditorBehaviour (CPA_EdIR_MainBehaviour *pMainBehaviour, CString csMacroName, CString csSubrName)
|
||
{
|
||
CString csRules, csResultRules;
|
||
CString csLowRules, csLowName;
|
||
int iMacroIndex, iEndMacroIndex;
|
||
|
||
csRules = pMainBehaviour->m_pclBehaviour->m_fn_csGetRules();
|
||
// for the search we need a lower-case copy
|
||
csLowRules = csRules;
|
||
csLowRules.MakeLower();
|
||
csLowName = csMacroName;
|
||
csLowName.MakeLower();
|
||
// get the first macro in the text
|
||
iMacroIndex = csLowRules.Find(csLowName);
|
||
// if there is no macro in the text, no need to continue
|
||
while (iMacroIndex != -1)
|
||
{
|
||
// copy the previous lines of the rules
|
||
csResultRules += csRules.Left(iMacroIndex);
|
||
|
||
// check if the found name is really the macro one
|
||
iEndMacroIndex = iMacroIndex + csMacroName.GetLength();
|
||
|
||
// add the correpsonding word to the result
|
||
csResultRules += m_fn_bIsIsolatedName(iMacroIndex, iEndMacroIndex, csRules) ? csSubrName : csMacroName;
|
||
|
||
// skip the word and get the next one
|
||
csRules = csRules.Mid(iMacroIndex+csMacroName.GetLength());
|
||
csLowRules = csLowRules.Mid(iMacroIndex+csMacroName.GetLength());
|
||
iMacroIndex = csLowRules.Find(csLowName);
|
||
}
|
||
csResultRules += csRules;
|
||
|
||
// replace the text of the behaviour
|
||
pMainBehaviour->m_pclBehaviour->m_fn_vSetRules(csResultRules);
|
||
pMainBehaviour->m_csText = csResultRules;
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_Brain::m_fn_csBuildDefineListForMacro (CStringList *pListOfDefines, CString csMacroText)
|
||
{
|
||
POSITION pos;
|
||
CString csDefineText, csLowMacro;
|
||
CString csDefine, csLowDefine;
|
||
int iDefineIndex, iWordIndex;
|
||
|
||
// for search we need a lower case text
|
||
csLowMacro = csMacroText;
|
||
csLowMacro.MakeLower();
|
||
|
||
// find the defines used in the macro
|
||
pos = pListOfDefines->GetHeadPosition();
|
||
while (pos)
|
||
{
|
||
// get define text
|
||
csDefine = pListOfDefines->GetNext(pos);
|
||
csLowDefine = csDefine;
|
||
csLowDefine.MakeLower();
|
||
// get define title;
|
||
csLowDefine.TrimLeft();
|
||
iWordIndex = csLowDefine.FindOneOf(" \t");
|
||
csLowDefine = csLowDefine.Left(iWordIndex);
|
||
// check if it is used in the macro
|
||
iDefineIndex = m_fn_iGetFirstValidOccurence(csLowMacro, csLowDefine);
|
||
if (iDefineIndex != -1)
|
||
csDefineText += "#define " + csDefine + "\n";
|
||
}
|
||
|
||
// add a line to separate from subroutine
|
||
if (!csDefineText.IsEmpty())
|
||
csDefineText += "\n";
|
||
|
||
return csDefineText;
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
void CPA_EdIR_Brain::m_fn_vRegisterEditorDefinesForMacro (CPA_EdIR_MainBehaviour *pMacroMainBehaviour, CStringList *pListOfDefines)
|
||
{
|
||
CString csRules, csLowRules, csDefine;
|
||
int iDefineIndex, iNewLineIndex;
|
||
|
||
csRules = pMacroMainBehaviour->m_pclBehaviour->m_fn_csGetRules();
|
||
|
||
// for the search we need a lower-case copy
|
||
csLowRules = csRules;
|
||
csLowRules.MakeLower();
|
||
// get the first macro in the text
|
||
iDefineIndex = m_fn_iGetFirstValidOccurence(csLowRules, "#define");
|
||
// if there is no define in the text, no need to continue
|
||
while (iDefineIndex != -1)
|
||
{
|
||
csDefine = csRules.Mid(iDefineIndex + 7);
|
||
|
||
// register define text
|
||
iNewLineIndex = csDefine.Find('\n');
|
||
pListOfDefines->AddTail(csDefine.Left(iNewLineIndex));
|
||
|
||
// skip this define and go to the next one
|
||
csRules = csRules.Mid(iDefineIndex + 7);
|
||
csLowRules = csLowRules.Mid(iDefineIndex + 7);
|
||
iDefineIndex = m_fn_iGetFirstValidOccurence(csLowRules, "#define");
|
||
}
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
CString CPA_EdIR_Brain::m_fn_csExtractCommentLinesForNextMacro (CString csMacroText)
|
||
{
|
||
CString csCommentLines;
|
||
BOOL bCommentText = TRUE;
|
||
int iNewLineIndex;
|
||
|
||
// get last line of the macro
|
||
iNewLineIndex = csMacroText.ReverseFind('\n');
|
||
|
||
// check the last lines of the macro
|
||
while ((iNewLineIndex != -1) && bCommentText)
|
||
{
|
||
// check if this line is emtpy or commented
|
||
bCommentText = ((iNewLineIndex == csMacroText.GetLength() - 1) ||
|
||
(csMacroText[iNewLineIndex+1] == ';') ||
|
||
(csMacroText[iNewLineIndex+1] == '\n'));
|
||
|
||
// in this case add it to the comment
|
||
if (bCommentText)
|
||
csCommentLines = csMacroText.Mid(iNewLineIndex) + csCommentLines;
|
||
// prepare next line to check
|
||
csMacroText = csMacroText.Left(iNewLineIndex);
|
||
iNewLineIndex = csMacroText.GetLength() ? csMacroText.ReverseFind('\n') : -1;
|
||
}
|
||
|
||
// remove the first empty lines
|
||
csCommentLines.TrimLeft();
|
||
|
||
return csCommentLines;
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
int CPA_EdIR_Brain::m_fn_iGetFirstValidOccurence (CString csLowRules, CString csLowSearched)
|
||
{
|
||
int iIndex, iLength, iRealIndex;
|
||
|
||
// get the first macro in the text
|
||
iIndex = csLowRules.Find(csLowSearched);
|
||
iLength = csLowSearched.GetLength();
|
||
iRealIndex = 0;
|
||
|
||
// get define start
|
||
while ((iIndex != -1) &&
|
||
(!m_fn_bIsIsolatedName(iIndex, iIndex+ iLength, csLowRules) ||
|
||
m_fn_bIsInCommentedLine(iIndex, csLowRules)))
|
||
{
|
||
csLowRules = csLowRules.Mid(iIndex + iLength);
|
||
iRealIndex += iIndex + iLength;
|
||
iIndex = csLowRules.Find(csLowSearched);
|
||
}
|
||
|
||
return ((iIndex == -1) ? -1 : iRealIndex + iIndex);
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_Brain::m_fn_bIsIsolatedName (int iStartIndex, int iEndIndex, CString csRule)
|
||
{
|
||
BOOL bBlankLeft, bBlankRight;
|
||
|
||
bBlankLeft = (iStartIndex == 0) || (!isalnum(csRule[iStartIndex-1]) && (csRule[iStartIndex-1] != '_'));
|
||
bBlankRight = (iEndIndex == csRule.GetLength()) || (!isalnum(csRule[iEndIndex]) && (csRule[iEndIndex] != '_'));
|
||
|
||
return (bBlankLeft && bBlankRight);
|
||
}
|
||
|
||
|
||
/**********************************************************************************/
|
||
BOOL CPA_EdIR_Brain::m_fn_bIsInCommentedLine (int iStartIndex, CString csRule)
|
||
{
|
||
CString csLeftRule;
|
||
int iCommentIndex;
|
||
int iNewLineIndex;
|
||
|
||
// get the left part of the rule
|
||
csLeftRule = csRule.Left(iStartIndex);
|
||
|
||
// get the last occurence of the comment symbol
|
||
iCommentIndex = csLeftRule.ReverseFind(';');
|
||
// get the last occurence of the new line symbol
|
||
iNewLineIndex = csLeftRule.ReverseFind('\n');
|
||
|
||
return ((iCommentIndex > iNewLineIndex) || ((iCommentIndex != -1) && (iNewLineIndex == -1)));
|
||
}
|
||
|
||
// End Shaitan => Macros to subroutines
|
||
|
||
|
||
#endif //D_ED_IR_ACTIVE
|
||
|