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

1779 lines
54 KiB
C++
Raw Blame History

// EdIRFrm.cpp : implementation of the CEdIAFrame class
//
#include "stdafx.h"
#include "Defines.hpp"
#ifdef D_ED_IR_ACTIVE
#include "EdIRFrm.hpp"
#include "EdIRRVw.hpp"
#include "EdIRBVw.hpp"
#include "EdIRBtVw.hpp"
#include "EdIRBeha.hpp"
#include "EdIRBeEn.hpp"
#include "EdIRIRD.hpp"
#include "EdIRStrg.hpp"
#include "EdIR2Eng.hpp"
#include "EdIRIAGl.hpp"
#include "EdIRGlob.hpp"
#include "EdIRCstB.hpp"
#include "EdIRIAWd.hpp"
#include "EdIRDvVw.hpp"
#include "EdIRBis.hpp"
//BEGIN ROMTEAM Cristi Petrescu 98-04-
#include "EdIRMacL.hpp"
//END ROMTEAM Cristi Petrescu 98-04-
#include "ai_intf.hpp"
#include "EDACModl.hpp"
#include "incAI.h"
#include "TFA.h"
#include "x:\cpa\main\inc\_EditID.h"
#include "_Actors.hpp"
#include "IncTUT.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern long g_lNbTotalDeNoeud;
/////////////////////////////////////////////////////////////////////////////
// class CPA_EdIR_Frame
/////////////////////////////////////////////////////////////////////////////
//IMPLEMENT_DYNCREATE(CPA_EdIR_Frame, CFrameWnd)
IMPLEMENT_DYNCREATE(CPA_EdIR_Frame, FRMBase)
//BEGIN_MESSAGE_MAP(CPA_EdIR_Frame, CFrameWnd)
BEGIN_MESSAGE_MAP(CPA_EdIR_Frame, FRMBase)
//{{AFX_MSG_MAP(CPA_EdIR_Frame)
ON_WM_DESTROY()
ON_WM_SYSCOMMAND()
ON_WM_ACTIVATE()
ON_WM_SETFOCUS()
//}}AFX_MSG_MAP
// ON_WM_NCHITTEST()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPA_EdIR_Frame construction/destruction
/**********************************************************************************/
CPA_EdIR_Frame::CPA_EdIR_Frame()
{
m_pclBrain=NULL;
m_bKnownWordsFileIsCreated=FALSE;
//BEGIN ROMTEAM Cristi Petrescu 98-05-
m_bMarkExecutedLines = TRUE;
m_bShowTests = TRUE;
//END ROMTEAM Cristi Petrescu 98-05-
// BEGIN ROMTEAM Cristi Petrescu 98-06-
m_pclDebugBrain = NULL;
// END ROMTEAM Cristi Petrescu 98-06-
}
/**********************************************************************************/
CPA_EdIR_Frame::~CPA_EdIR_Frame()
{
}
/**********************************************************************************/
/*BOOL CPA_EdIR_Frame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
| WS_THICKFRAME | WS_MAXIMIZEBOX | WS_SYSMENU;
HDC hDC=::GetWindowDC(NULL);
cs.x=250;
cs.y=::GetDeviceCaps(hDC,VERTRES)-250;
cs.cx=::GetDeviceCaps(hDC,HORZRES)-250;
cs.cy=250;
::ReleaseDC(NULL,hDC);
return FRMBase::PreCreateWindow(cs);
} */
/**********************************************************************************/
/*BOOL CPA_EdIR_Frame::Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName,
DWORD dwStyle,const RECT& rect,
CWnd* pParentWnd,LPCTSTR lpszMenuName,
DWORD dwExStyle,CCreateContext* pContext)
{
return FRMBase::Create(lpszClassName,lpszWindowName,dwStyle,rect,
pParentWnd,lpszMenuName,dwExStyle,pContext);
} */
/////////////////////////////////////////////////////////////////////////////
// CPA_EdIR_Frame diagnostics
#ifdef _DEBUG
/**********************************************************************************/
void CPA_EdIR_Frame::AssertValid() const
{
CFrameWnd::AssertValid();
}
/**********************************************************************************/
void CPA_EdIR_Frame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPA_EdIR_Frame message handlers
/**********************************************************************************/
void CPA_EdIR_Frame::OnSysCommand(UINT nID,LPARAM lParam)
{
static int iSplitter1Width;
static int iSplitter1MinWidth;
static int iSplitter2Height;
static int iSplitter2MinHeight;
if(nID==SC_CLOSE)
{
M_GetMainWnd()->SendMessage(WM_CLOSE);
return;
}
if(nID!=SC_MINIMIZE)
CFrameWnd::OnSysCommand(nID,lParam);
switch(nID)
{
case SC_MAXIMIZE:
m_clSplitter2.GetRowInfo(0,iSplitter2Height,iSplitter2MinHeight);
m_clSplitter1.GetColumnInfo(0,iSplitter1Width,iSplitter1MinWidth);
m_clSplitter2.SetRowInfo(0,0,1000);
m_clSplitter1.SetColumnInfo(1,0,1000);
m_clSplitter1.RecalcLayout();
m_clSplitter2.RecalcLayout();
break;
case SC_RESTORE:
m_clSplitter1.SetColumnInfo(0,iSplitter1Width,iSplitter1MinWidth);
m_clSplitter1.SetColumnInfo(1,2000,0);
m_clSplitter2.SetRowInfo(0,iSplitter2Height,iSplitter2MinHeight);
m_clSplitter1.RecalcLayout();
m_clSplitter2.RecalcLayout();
break;
}
}
/**********************************************************************************/
/*UINT CPA_EdIR_Frame::OnNcHitTest(CPoint point)
{
UINT uiHitTest=CFrameWnd::OnNcHitTest(point);
return uiHitTest;
} */
/**********************************************************************************/
BOOL CPA_EdIR_Frame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if(!m_clSplitter1.CreateStatic(this,1,2,WS_CHILD|WS_VISIBLE))
return FALSE;
if(!m_clSplitter2.CreateStatic(&m_clSplitter1,2,1,WS_CHILD|WS_VISIBLE))
return FALSE;
HINSTANCE hOldInstance = AfxGetResourceHandle();
AfxSetResourceHandle(g_stAIIdentity.hModule);
if(!m_clSplitter1.CreateView(0,1,RUNTIME_CLASS(CPA_EdIR_View),CSize(0,0),pContext))
return FALSE;
if(!m_clSplitter2.CreateView(0,0,RUNTIME_CLASS(CPA_EdIR_ButtonView),CSize(0,0),pContext))
return FALSE;
if(!m_clSplitter2.CreateView(1,0,RUNTIME_CLASS(CPA_EdIR_DiagView),CSize(0,0),pContext))
return FALSE;
m_clSplitter1.SetColumnInfo(0,250,0);
m_clSplitter2.SetRowInfo(0,44,0); // CPA2 ASilvescu 98-04-29
AfxSetResourceHandle( hOldInstance );
return TRUE;
}
/**********************************************************************************/
void CPA_EdIR_Frame::OnDestroy()
{
//////////////
//////////////
//UnRegisters for TUT Module
TUT_M_vGetTutDll();
TUT_M_vUnregisterControl(m_hWnd);
//End of UnRegister for TUT Module
//////////////
FRMBase::OnDestroy();
}
/**********************************************************************************/
CPA_EdIR_DiagView *CPA_EdIR_Frame::m_fn_pclGetDiagrammeView()
{
return (CPA_EdIR_DiagView *)m_clSplitter2.GetPane(1,0);
}
/**********************************************************************************/
CPA_EdIR_View *CPA_EdIR_Frame::m_fn_pclGetEdRulesView()
{
return (CPA_EdIR_View *)m_clSplitter1.GetPane(0,1);
}
/**********************************************************************************/
CPA_EdIR_ButtonView *CPA_EdIR_Frame::m_fn_pclGetButtonView()
{
return (CPA_EdIR_ButtonView *)m_clSplitter2.GetPane(0,0);
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vCreateEditor()
{
CreateBase("Editeur d'Intelligence et de R<>flexes",
2,3,
g_pclAIInterface->GetMainWorld() );
m_iInitHeight=200;
m_bKeepPos=TRUE;
mfn_vEnableCaption(FALSE);
m_stWinTop.cLinkSame = FRM_C_MoveBottom;
m_stWinLeft.cLinkSame = FRM_C_MoveRight;
//////////////
//////////////
//Registers for TUT Module
TUT_M_vGetTutDll();
TUT_M_vRegisterControl(m_hWnd,"EdIR_MainFrame",TUT_e_Window);
//End of Register for TUT Module
//////////////
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vLevelChanges()
{
if(!m_bKnownWordsFileIsCreated)
{
fn_vInitTranslation();
//Creates KnownWords File
fn_vCreateKnownWordsFile();
m_fn_vFillConstantList();
m_bKnownWordsFileIsCreated=TRUE;
}
}
/*
struct tdstBrain_
{
struct AI_tdstMind_ *p_stMind;
GMT_tdxHandleToGameMaterial hLastCollidedGoThroughMaterial;
ACP_tdxBool bWarnMechanicsFlag;
long CFast_lCmpMetaAction ;
long CFast_lRfxMetaAction ;
long CFast_lCmpMetaActionForMacro ;
long CFast_lRfxMetaActionForMacro ;
};
*/
/**********************************************************************************/
BOOL CPA_EdIR_Frame::m_fn_bAcceptToRunEngine()
{
BOOL bIaIsAlreadyProcessed;
CPA_List<CPA_BaseObject> clModelsList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clModelsList,"",C_szActorModelTypeName,NO_CRITERIA);
//IA must be processed ?
POSITION pos=clModelsList.GetHeadPosition();
while(pos!=NULL)
{
CPA_Actor *pclModel=(CPA_Actor *)(clModelsList.GetNext(pos));
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
BOOL bRes;
// YLG
bIaIsAlreadyProcessed = FALSE;
//Converts model
CPA_List<CPA_BaseObject> clInstancesList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,pclModel);
if(pclBrain->m_fn_bHasBeenModified() || pclBrain->m_bMustBuildDebugInfo)
{
pclBrain->m_fn_vSetModified(TRUE); // Force compile all
bRes=pclBrain->m_fn_bProcessIA(FALSE);
if(bRes == FALSE)
return FALSE;
bIaIsAlreadyProcessed = TRUE;
}
POSITION pos1=clInstancesList.GetHeadPosition();
while(pos1!=NULL)
{
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetNext(pos1));
tdstEngineObject *pstEngineObject=(tdstEngineObject *)pclInstance->GetStruct();
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
if(hBrain &&(AI_M_ucErrorFlag(M_pstGetMindOfBrain(hBrain))==1))
{
pclBrain->m_fn_vNotify();
AI_M_ucErrorFlag(M_pstGetMindOfBrain(hBrain))=0;
if (bIaIsAlreadyProcessed == FALSE)
{
pclBrain->m_fn_vSetModified(TRUE); // Force compile all
bRes=pclBrain->m_fn_bProcessIA(FALSE);
if(bRes == FALSE)
return FALSE;
bIaIsAlreadyProcessed = TRUE;
}
}
}
}
BOOL bIAAreGood = TRUE; // Nicu 31-07-98
CString csMsg="Check error raised by engine in IA";
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clModelsList,"",C_szActorModelTypeName,NO_CRITERIA);
pos=clModelsList.GetHeadPosition();
while(pos!=NULL && bIAAreGood)
{
CPA_Actor *pclModel=(CPA_Actor *)(clModelsList.GetNext(pos));
CString csFamilyName=(pclModel->m_pub_fn_pclGetFamily()==NULL) ? "" : pclModel->m_pub_fn_pclGetFamily()->GetName();
CString csModelName=pclModel->GetName();
CString csMsg="Checking error raised by engine in IA of "+csFamilyName+"@"+csModelName;
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
//Instances
CPA_List<CPA_BaseObject> clInstancesList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,pclModel);
POSITION pos=clInstancesList.GetHeadPosition();
while(pos!=NULL && bIAAreGood)
{
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(AI_M_ucErrorFlag(pstMind))
{
CString csMsg="Error raised by engine in IA of "+csFamilyName+"@"+csModelName+"@"+pclInstance->GetName();
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
bIAAreGood=FALSE;
}
}
}
}
}
return bIAAreGood;
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vAddOneModifiedBrain(CPA_EdIR_Brain *pclBrain)
{
if(m_clListOfModifiedBrains.Find(pclBrain)==NULL)
m_clListOfModifiedBrains.AddTail(pclBrain);
}
/**********************************************************************************/
BOOL CPA_EdIR_Frame::m_fn_bAcceptToSave()
{
CList<CPA_EdIR_Brain *,CPA_EdIR_Brain *> clListOfCheckedBrains;
//Checks IA
POSITION pos=m_clListOfModifiedBrains.GetHeadPosition();
BOOL bAcceptToSave=TRUE;
while(pos!=NULL && bAcceptToSave)
{
CPA_EdIR_Brain *pclBrain=m_clListOfModifiedBrains.GetNext(pos);
CPA_Actor *pclModel=pclBrain->m_fn_pclGetModel();
CString csFamilyName=(pclModel->m_pub_fn_pclGetFamily()==NULL) ? "" : pclModel->m_pub_fn_pclGetFamily()->GetName();
CString csModelName=pclModel->GetName();
g_pclCurrentModel=pclModel;
// BEGIN ROMTEAM Cristi Petrescu 99-01- debug
BOOL bModified = pclBrain->m_fn_bHasBeenModified();
//bAcceptToSave=pclBrain->m_fn_bCheckIA();
// process them if needed...
if (bAcceptToSave)
{
if (bModified)
{
CString csMessage = "You modified the AI of model " +
csFamilyName+"@"+ csModelName + ", \n" +
"but you did not parse it.\n" +
"There may be incoherences between model and instance. \n" +
"Do you want to parse the AI before saving ?";
int iAction = AfxMessageBox (csMessage, MB_YESNOCANCEL);
switch (iAction)
{
case IDYES:
pclBrain->m_fn_vSetModified(TRUE); // Force compile all
bAcceptToSave = pclBrain -> m_fn_bProcessIA (FALSE);
break;
case IDNO:
bAcceptToSave = pclBrain -> m_fn_bCheckIA ();
break;
case IDCANCEL:
bAcceptToSave = FALSE;
break;
}
}
else
bAcceptToSave = pclBrain -> m_fn_bCheckIA ();
}
// END ROMTEAM Cristi Petrescu 99-01- debug
if(bAcceptToSave==FALSE)
{
CString csMsg="Can't save IA : check IA of "+csFamilyName+"@"+csModelName;
// fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
}
else
{
clListOfCheckedBrains.AddTail(pclBrain);
}
}
//Removes good IA from m_clListOfModifiedBrains
pos=clListOfCheckedBrains.GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_Brain *pclBrain=clListOfCheckedBrains.GetNext(pos);
POSITION p=m_clListOfModifiedBrains.Find(pclBrain);
if(p!=NULL)
m_clListOfModifiedBrains.RemoveAt(p);
}
return bAcceptToSave;
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vBeforeSaveAll()
{
if(m_pclBrain)
m_fn_pclGetButtonView()->m_fn_vEnableButtons(FALSE);
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vAfterSaveAll()
{
m_clListOfModifiedBrains.RemoveAll();
if(m_pclBrain)
m_fn_pclGetButtonView()->m_fn_vEnableButtons(TRUE);
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vBeforeEngine()
{
/* CHRISTOPHE QUICK SAVE MODIFICATIONS { */
//Quick Save : save all modified IA
POSITION pos=m_clListOfModifiedBrains.GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_Brain *pclBrain=m_clListOfModifiedBrains.GetNext(pos);
pclBrain->m_fn_vQuickSave();
}
CPA_List<CPA_BaseObject> clModelsList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clModelsList,"",C_szActorModelTypeName,NO_CRITERIA);
pos=clModelsList.GetHeadPosition();
/* } END CHRISTOPHE QUICK SAVE MODIFICATIONS */
while(pos!=NULL)
{
CPA_Actor *pclModel=(CPA_Actor *)(clModelsList.GetNext(pos));
CString csFamilyName=(pclModel->m_pub_fn_pclGetFamily()==NULL) ? "" : pclModel->m_pub_fn_pclGetFamily()->GetName();
CString csModelName=pclModel->GetName();
CString csMsg="Modifying IA of "+csFamilyName+"@"+csModelName;
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
//BEGIN ROMTEAM Cristi Petrescu 98-05-
// before all, build debug info (and rebuild all engine structures...
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
pclBrain -> m_fn_vUpdateDebugInfo ();
//END ROMTEAM Cristi Petrescu 98-05-
//Converts model
CPA_List<CPA_BaseObject> clInstancesList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,pclModel);
if(!clInstancesList.IsEmpty())
{
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetHead());
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)
{
fn_vConvertIndexToPointerForModel(pstAIModel);
fn_vConvertEditorPointerIntoEnginePointer(pstAIModel);
}
}
}
}
/*
* Convert instances.
* Test if one instance of the model must be reinit (comport). If yes, all the instances
* will be reinit juste after.
*/
POSITION pos=clInstancesList.GetHeadPosition();
BOOL bMustReinit = FALSE;
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)
{
/* Convert */
fn_vConvertIndexToPointerForInstance(pstMind);
/* Test if instance must be reinit */
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
if(pclBrain->m_fn_bReInitBehaviourIsNeeded())
{
bMustReinit = TRUE;
}
}
}
}
if(bMustReinit)
{
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)
{
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
fn_vReinitAIComport(pstMind);
pclBrain->m_fn_vSetReInitBehaviourFlag(FALSE);
}
}
}
}
}
//For Ai Engine
//fn_vRESET_STOP_AI_ENGINE_FLAG();
//Sets BreakPoints
pos=clModelsList.GetHeadPosition();
while(pos!=NULL)
{
CPA_Actor *pclModel=(CPA_Actor *)(clModelsList.GetNext(pos));
CString csFamilyName=(pclModel->m_pub_fn_pclGetFamily()==NULL) ? "" : pclModel->m_pub_fn_pclGetFamily()->GetName();
CString csModelName=pclModel->GetName();
CString csMsg="Updating Break points in IA of "+csFamilyName+"@"+csModelName+" ... ";
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
pclBrain->m_fn_vSetEngineBreakPoints(TRUE);
csMsg += "OK";
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
}
//
fn_vReSetStopAIEngineFlag();
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vBeforeEditor()
{
CPA_List<CPA_BaseObject> clModelsList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clModelsList,"",C_szActorModelTypeName,NO_CRITERIA);
POSITION pos=clModelsList.GetHeadPosition();
while(pos!=NULL)
{
CPA_Actor *pclModel=(CPA_Actor *)(clModelsList.GetNext(pos));
//Converts model
CPA_List<CPA_BaseObject> clInstancesList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,pclModel);
if(!clInstancesList.IsEmpty())
{
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetHead());
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)
{
fn_vConvertPointerToIndexForModel(pstAIModel);
fn_vConvertEnginePointerIntoEditorPointer(pstAIModel);
}
}
}
}
//Converts instances
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)
fn_vConvertPointerToIndexForInstance(pstMind);
}
}
}
//Removes BreakPoints
pos=clModelsList.GetHeadPosition();
while(pos!=NULL)
{
CPA_Actor *pclModel=(CPA_Actor *)(clModelsList.GetNext(pos));
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
pclBrain->m_fn_vSetEngineBreakPoints(FALSE);
}
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_Actor *pclSelectedActor=(CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0);
CTL_Editor_DataList *pclListOfDesignerVariableType;
if(pclSelectedActor)
{
/*
pclListOfDesignerVariableType=pclSelectedActor->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
pclDsgVarView->m_fn_vUpdateDisplayWithValues(pclListOfDesignerVariableType);
*/
//EdActors_EditorActorModel *pclModel = (EdActors_EditorActorModel *) pclSelectedActor->m_fn_pclGetModel()->m_fn_pclGetEditorActor();
EdActors_EditorActorModel *pclModel;
if(pclSelectedActor->m_fn_bIsAnInstance())
pclModel= (EdActors_EditorActorModel* ) pclSelectedActor->m_fn_pclGetModel()->m_fn_pclGetEditorActor();
else
pclModel = (EdActors_EditorActorModel* ) pclSelectedActor->m_fn_pclGetEditorActor();
pclListOfDesignerVariableType = pclSelectedActor->m_fn_pclGetEditorActor()->m_pclListOfDesignerVariableType;
pclDsgVarView->m_fn_vUpdateControls(&(pclModel->m_clListOfDesignerVariableControl));
pclDsgVarView->m_fn_vUpdateDisplayWithValues(pclListOfDesignerVariableType);
}
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vAModelHasBeenRemoved()
{
m_pclBrain=NULL;
m_fn_pclGetDiagrammeView()->m_fn_vAModelHasBeenRemoved();
m_fn_pclGetButtonView()->m_fn_vEnableButtons(FALSE);
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vShowBrain(CPA_EdIR_Brain *pclBrain)
{
if(pclBrain)
{
AfxGetApp()->DoWaitCursor(1);
//ANNECY CB
SetCapture();
if(m_fn_pclGetDiagrammeView())
m_fn_pclGetDiagrammeView()->ShowWindow(FALSE);
gbFirstShowBrain = pclBrain->m_bFirstShow;
//END ANNECY
CString csFamilyName=(pclBrain->m_fn_pclGetModel()->m_pub_fn_pclGetFamily()==NULL) ? "" : pclBrain->m_fn_pclGetModel()->m_pub_fn_pclGetFamily()->GetName();
CString csModelName=pclBrain->m_fn_pclGetModel()->GetName();
CString csMsg;
CString csMsgBase="Updating IA controls for "+csFamilyName+"@"+csModelName+" ... ";
fn_vDisplayInfoInStatusBar(csMsgBase,C_STATUS_NORMAL);
m_fn_pclGetButtonView()->m_fn_vEnableButtons(TRUE);
//ANNECY CB
CPA_EdIR_Brain *pclOldBrain=m_pclBrain;
m_pclBrain=pclBrain;
// BEGIN CPA2 Cristi Petrescu 98-03-
g_pclListOfSubrs = & m_pclBrain -> m_clListOfSubrs;
// END CPA2 Cristi Petrescu 98-03-
m_fn_vUpdateBehaviours();
csMsg=csMsgBase+"OK";
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
if(m_pclBrain)
{
if(m_pclBrain!=pclOldBrain)
m_pclBrain->m_fn_vCreateOrUpdateDsgVarControlsWithEngineValues();
}
// m_fn_pclUpdateBrain(pclBrain);
// csMsg=csMsgBase+"OK";
// fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
//END ANNECY
//Update BreakPoint
m_fn_pclGetEdRulesView()->m_fn_vSetBreakPointList(m_pclBrain->m_fn_pclGetBreakPointList());
m_fn_pclGetEdRulesView()->InvalidateRect(NULL);
//Update DebugInfo
//BEGIN ROMTEAM Cristi Petrescu 98-05-
m_fn_pclGetEdRulesView()->m_fn_vSetDebugInfoList(NULL);
//END ROMTEAM Cristi Petrescu 98-05-
//ANNECY CB
AfxGetApp()->DoWaitCursor(-1);
ReleaseCapture();
if(m_fn_pclGetDiagrammeView())
m_fn_pclGetDiagrammeView()->ShowWindow(TRUE);
gbFirstShowBrain = pclBrain->m_bFirstShow = FALSE;
//END ANNECY
//BEGIN ROMTEAM Cristi Petrescu 98-06-
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_vSynchronizeWithBrain (pclBrain);
//END ROMTEAM Cristi Petrescu 98-06-
}
}
/**********************************************************************************/
//ANNECY CB
CPA_EdIR_Brain *CPA_EdIR_Frame::m_fn_pclUpdateBrain(CPA_EdIR_Brain *pclBrain,BOOL bCreateDsgVar/*=TRUE*/,BOOL Disp)
//CPA_EdIR_Brain *CPA_EdIR_Frame::m_fn_pclUpdateBrain(CPA_EdIR_Brain *pclBrain,BOOL bCreateDsgVar/*=TRUE*/)
//END
{
CPA_EdIR_Brain *pclOldBrain=m_pclBrain;
m_pclBrain=pclBrain;
// BEGIN CPA2 Cristi Petrescu 98-03-
g_pclListOfSubrs = & m_pclBrain -> m_clListOfSubrs;
// END CPA2 Cristi Petrescu 98-03-
//ANNECY CB
m_fn_vUpdateBehaviours(Disp);
// m_fn_vUpdateBehaviours();
//END
if(m_pclBrain)
{
if(bCreateDsgVar && m_pclBrain!=pclOldBrain)
m_pclBrain->m_fn_vCreateOrUpdateDsgVarControlsWithEngineValues();
//BEGIN ROMTEAM Cristi Petrescu 98-06-
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_vSynchronizeWithBrain (pclBrain);
//END ROMTEAM Cristi Petrescu 98-06-
}
return pclOldBrain;
}
/**********************************************************************************/
//ANNECY CB
void CPA_EdIR_Frame::m_fn_vUpdateBehaviours(BOOL Disp)
//void CPA_EdIR_Frame::m_fn_vUpdateBehaviours()
//END
{
if(m_pclBrain)
{
tdeEditState tdeSate=m_fn_pclGetButtonView()->m_fn_tdeGetEditState();
tdeBehaviourModeView tdeMode=m_fn_pclGetButtonView()->m_fn_tdeGetViewMode();
switch(tdeSate)
{
case EditIntell:
m_pclBrain->m_fn_vUpdateBehavioursList(m_fn_pclGetDiagrammeView(),tdeSate);
//ANNECY CB
if(!Disp) break;
//END
m_fn_pclGetDiagrammeView()->m_fn_vUpdateListOfBehaviour(&(m_pclBrain->m_clListOfIntelligenceBehaviours));
m_fn_pclGetDiagrammeView()->m_fn_vChangeViewModeOfBehaviours(tdeMode);
break;
case EditReflex:
m_pclBrain->m_fn_vUpdateBehavioursList(m_fn_pclGetDiagrammeView(),tdeSate);
//ANNECY CB
if(!Disp) break;
//END
m_fn_pclGetDiagrammeView()->m_fn_vUpdateListOfBehaviour(&(m_pclBrain->m_clListOfReflexBehaviours));
m_fn_pclGetDiagrammeView()->m_fn_vChangeViewModeOfBehaviours(tdeMode);
break;
case EditDecl:
m_pclBrain->m_fn_vUpdateBehavioursList(m_fn_pclGetDiagrammeView(),tdeSate);
//ANNECY CB
if(!Disp) break;
//END
m_fn_pclGetDiagrammeView()->m_fn_vUpdateListOfBehaviour(&(m_pclBrain->m_clListOfDeclarations));
m_fn_pclGetDiagrammeView()->m_fn_vChangeViewModeOfBehaviours(tdeMode);
break;
// BEGIN CPA2 Cristi Petrescu 98-03-
case EditMacro:
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
if (!Disp)
break;
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
m_pclBrain->m_fn_vUpdateBehavioursList(m_fn_pclGetDiagrammeView(),tdeSate);
m_fn_pclGetDiagrammeView()->m_fn_vUpdateListOfBehaviour(&(m_pclBrain->m_clListOfMacros));
m_fn_pclGetDiagrammeView()->m_fn_vChangeViewModeOfBehaviours(tdeMode);
break;
// END CPA2 Cristi Petrescu 98-03-
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
case EditSubr:
if (!Disp)
break;
m_pclBrain->m_fn_vUpdateBehavioursList(m_fn_pclGetDiagrammeView(),tdeSate);
m_fn_pclGetDiagrammeView()->m_fn_vUpdateListOfBehaviour(&(m_pclBrain->m_clListOfSubrs));
m_fn_pclGetDiagrammeView()->m_fn_vChangeViewModeOfBehaviours(tdeMode);
break;
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
default:
break;
}
}
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vChangeViewModeOfBehaviours()
{
if(m_pclBrain)
{
tdeBehaviourModeView tdeMode=m_fn_pclGetButtonView()->m_fn_tdeGetViewMode();
m_fn_pclGetDiagrammeView()->m_fn_vChangeViewModeOfBehaviours(tdeMode);
}
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vCreateNewBehaviour()
{
if(m_pclBrain)
{
tdeBehaviourModeView tdeMode=m_fn_pclGetButtonView()->m_fn_tdeGetViewMode();
m_fn_pclGetDiagrammeView()->m_fn_vCreateNewBehaviour(tdeMode);
}
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vSetRulesEditorReadOnly(BOOL bReadOnly)
{
m_fn_pclGetEdRulesView()->m_fn_vSetReadOnly(bReadOnly);
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vChangeRulesView(tdeRulesViewMode tdeMode)
{
if(m_pclBrain)
{
switch(tdeMode)
{
case IntelligenceView:
m_fn_pclGetButtonView()->m_fn_vSetEditState(EditIntell);
break;
case ReflexView:
m_fn_pclGetButtonView()->m_fn_vSetEditState(EditReflex);
break;
default:
break;
}
}
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vCheckBehaviour()
{
if(m_pclBrain!=NULL)
{
tdeEditState tdeSate=m_fn_pclGetButtonView()->m_fn_tdeGetEditState();
g_pclCurrentModel=m_pclBrain->m_fn_pclGetModel();
switch(tdeSate)
{
case EditIntell:
m_fn_pclGetDiagrammeView()->m_fn_vCheckBehaviour(IntelligenceText);
break;
case EditReflex:
m_fn_pclGetDiagrammeView()->m_fn_vCheckBehaviour(ReflexText);
break;
case EditDecl:
m_fn_pclGetDiagrammeView()->m_fn_vCheckBehaviour(DsgVarText);
break;
// BEGIN CPA2 Cristi Petrescu 98-03-
case EditMacro:
m_fn_pclGetDiagrammeView()->m_fn_vCheckBehaviour(Macro_2_Text);
break;
// END CPA2 Cristi Petrescu 98-03-
//BEGIN ROMTEAM Cristi Petrescu 98-04-
case EditSubr:
m_fn_pclGetDiagrammeView()->m_fn_vCheckBehaviour(SubrText);
break;
//END ROMTEAM Cristi Petrescu 98-04-
default:
break;
}
}
}
/**********************************************************************************/
/* CHRISTOPHE QUICK SAVE MODIFICATIONS { */
void CPA_EdIR_Frame::m_fn_vQuickSave()
{
AfxGetApp()->DoWaitCursor(1);
SetCapture();
//If SHIFT is down we save all modifies IAs
if((GetAsyncKeyState(VK_SHIFT) & 0x8000) == 0x8000)
{
POSITION pos=m_clListOfModifiedBrains.GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_Brain *pclBrain=m_clListOfModifiedBrains.GetNext(pos);
pclBrain->m_fn_vQuickSave();
}
}
else
//else we save the current IA
if(m_pclBrain)
{
m_pclBrain->m_fn_vQuickSave();
}
ReleaseCapture();
AfxGetApp()->DoWaitCursor(-1);
}
/* } END CHRISTOPHE QUICK SAVE MODIFICATIONS */
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vSaveAll()
{
int iRes=MessageBox("Are you sure you want to save all IA(s) ?\nThis will be erase all old IA(s) !!\nChoosing \"SaveAll\" in the Project Menu will take few minutes !!",
"Save All ?",
MB_YESNO|MB_ICONQUESTION);
if(iRes==IDYES)
{
CPA_List<CPA_BaseObject> clModelsList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clModelsList,"",C_szActorModelTypeName,NO_CRITERIA);
POSITION pos=clModelsList.GetHeadPosition();
while(pos!=NULL)
{
CPA_Actor *pclModel=(CPA_Actor *)(clModelsList.GetNext(pos));
if(pclModel->fn_bIsAvailable())
{
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
//ROMTEAM Check save 12.06.98 Ionut Grozea
CString m_szModelName = pclBrain->m_fn_csGetModelName();
if (m_szModelName == "StdCam" || m_szModelName == "YLT_RaymanModel")
{
if (pclBrain->m_fn_bHasBeenModified())
pclBrain->m_fn_vNotify();
}
else
//ENDROMTEAM Check save 12.06.98 Ionut Grozea
pclBrain->m_fn_vNotify();
}
}
}
}
/**********************************************************************************/
BOOL CPA_EdIR_Frame::m_fn_bProcessIA(BOOL bProcessAll)
{
if(m_pclBrain)
{
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_Actor *pclSelectedActor;
pclSelectedActor=(CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0);
if(pclSelectedActor->m_fn_bIsAModel() &&
pclSelectedActor!=m_fn_pclGetModel())
{
AfxMessageBox("[DEV] CPA_EdIR_Frame::m_fn_bProcessIA : models are not the same !!");
return FALSE;
}
else
if(pclSelectedActor->m_fn_bIsAnInstance() &&
pclSelectedActor->m_fn_pclGetModel()!=m_fn_pclGetModel())
{
AfxMessageBox("[DEV] CPA_EdIR_Frame::m_fn_bProcessIA : instance is not an instance of model !!");
return FALSE;
}
else
{
return m_pclBrain->m_fn_bProcessIA(bProcessAll,pclSelectedActor);
}
}
else
return FALSE;
}
// Shaitan FastC (16/06/98) {
/**********************************************************************************/
extern int gi_ActualRefStr;
extern int gi_ActualRefNode;
FILE *gh_CRRFile = NULL;
extern char CFast_IsAReference(tdstNodeInterpret *_pst_Node, int *pi_Indice);
struct AI_tdstMind_ *gp_stCurrentMind = NULL;
EdActors_MyDocument *fn_pclGetEdActorsDocument();
#include "CFast_3.hpp"
#include "CFast_2.hpp"
/**********************************************************************************/
BOOL CFast_GenerateCRR(CPA_EdIR_Brain *pBrain, char *pszName)
{
char name[255], *psz_Temp;
struct tdstTreeInterpret_ stTree;
gi_ActualRefStr = gi_ActualRefNode = 0;
strcpy(name, pszName);
psz_Temp = strrchr(name, '.');
strcpy(psz_Temp, ".crr");
gh_CRRFile = fopen(name, "wt");
if(gh_CRRFile == NULL)
return FALSE;
fprintf(gh_CRRFile, "{CreateRule:(1, XXXX)\n", gi_ActualRefStr);
pBrain->m_clListOfReflexBehaviours.m_fn_bProcessIA(TRUE, FALSE, NULL,NULL,CRRGeneration, pBrain->m_fn_pclGetDebugInfoList());
pBrain->m_clListOfIntelligenceBehaviours.m_fn_bProcessIA(TRUE, FALSE, NULL,NULL,CRRGeneration, pBrain->m_fn_pclGetDebugInfoList());
pBrain->m_clListOfSubrs.m_fn_bProcessIA(TRUE, FALSE, NULL,NULL,CRRGeneration, pBrain->m_fn_pclGetDebugInfoList());
fprintf(gh_CRRFile, "}\n", gi_ActualRefStr);
fseek(gh_CRRFile, 0, SEEK_SET);
fprintf(gh_CRRFile, "{CreateRule:(1, %4d)\n", gi_ActualRefStr);
fclose(gh_CRRFile);
/*
* reload the crr
*/
fn_vLoadCRR ( gp_stCurrentMind, name ) ;
if ( AI_M_p_stGetAIModel(gp_stCurrentMind)->CFast_dst_RefTreeArray != NULL ) {
M_GetNodeInterpret(&stTree) = AI_M_p_stGetAIModel(gp_stCurrentMind)->CFast_dst_RefTreeArray ;
M_SetNbNodeInterpret(&stTree, AI_M_p_stGetAIModel(gp_stCurrentMind)->uwNbNode);
fn_vSecondPassOfTree(gp_stCurrentMind, &stTree);
}
return TRUE;
}
BOOL CPA_EdIR_Frame::m_fn_bGenerateFastC(BOOL bProcessAll)
{
CString msg;
tdstEngineObject *pstEngineObject;
CPA_EdIR_Brain *pOrgBrain = m_pclBrain;
EdActors_MyDocument *pclDocument=fn_pclGetEdActorsDocument();
Position pos;
CPA_Actor *pclSelectedActor;
EdActors_EditorActorModel *pclEditorModel;
CPA_EdIR_Brain *pclOrgBrain = m_pclBrain;
long lSizeTree = 0;
// FILE *hLog = fopen("x:/cpa/exe/main/sizetree.log", "wt");
FILE *hLog = fopen("sizetree.log", "wt");
AI_tdstAIModel *p_stAIModel=NULL;
SCR_tdst_Link_Value *p_stValue ;
unsigned long ulCFastFunction, ulOldCFastFunction, ulOldCFastIsC ;
unsigned long ulCFastIsC ;
if(MessageBox("Convert all loaded models ?", "IA to C", MB_YESNO) == IDYES)
bProcessAll = TRUE;
else
bProcessAll = FALSE;
pos = pclDocument->m_clModelsList.GetHeadPosition();
while(pos)
{
if(bProcessAll)
{
pclSelectedActor = (CPA_Actor*) pclDocument->m_clModelsList.GetAt(pos);
if(!pclSelectedActor->fn_bIsAvailable())
{
goto nextpos;
}
pclEditorModel=pclSelectedActor->m_fn_pclGetEditorModel();
m_pclBrain = pclEditorModel->m_pclBrain;
}
else
{
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
pclSelectedActor=(CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0);
}
if(m_pclBrain)
{
/*****************************/
CPA_EdIR_MainBehaviourList *p_oReflex, *p_oComport, *p_oSubroutines ;
CPA_EdIR_MainBehaviour *p_oBehaviour;
POSITION pos ;
unsigned long ulCount ;
struct AI_tdstMind_ *p_stMind = NULL;
tdstComport *p_stMyComport = NULL;
CFast_tdstComportTree *p_stMyFastTree = NULL;
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);
/*
* get mind of an instance of the model
*/
if (pclSelectedActor->m_fn_bIsAnInstance())
{
pstEngineObject = M_GetEngineObject(pclSelectedActor->m_pub_fn_hGetMotorSuperObject());
gp_stCurrentMind = p_stMind = AI_M_stGetMindOfSuperObj(pclSelectedActor->m_pub_fn_hGetMotorSuperObject());
}
if (pclSelectedActor->m_fn_bIsAModel())
{
CPA_List<CPA_BaseObject> clInstancesList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList, "", C_szActorInstanceTypeName, pclSelectedActor);
if(!clInstancesList.IsEmpty())
{
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetHead());
pstEngineObject=(tdstEngineObject *)pclInstance->GetStruct();
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
if(hBrain!=NULL)
gp_stCurrentMind = p_stMind = M_pstGetMindOfBrain(hBrain);
}
}
if (p_stMind == NULL)
{
goto nextpos;
}
/*
* save old reftree
*/
p_stAIModel=AI_M_p_stGetAIModel(p_stMind);
ulCFastFunction = p_stAIModel->CFast_lFunction ;
ulCFastIsC = p_stAIModel->CFast_bIsC ;
p_stValue = fn_vGetLinkTableForCRR ( p_stAIModel ) ;
/* Process IA */
if(m_pclBrain->m_fn_bProcessIA(TRUE,pclSelectedActor) == FALSE)
{
fn_vDisplayInfoInStatusBar("ERROR!",C_STATUS_NORMAL);
m_pclBrain = pclOrgBrain;
if(hLog) fclose(hLog);
return FALSE;
}
/*
* get mind of an instance of the model
*/
if (pclSelectedActor->m_fn_bIsAnInstance())
{
pstEngineObject = M_GetEngineObject(pclSelectedActor->m_pub_fn_hGetMotorSuperObject());
gp_stCurrentMind = p_stMind = AI_M_stGetMindOfSuperObj(pclSelectedActor->m_pub_fn_hGetMotorSuperObject());
}
if (pclSelectedActor->m_fn_bIsAModel())
{
CPA_List<CPA_BaseObject> clInstancesList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList, "", C_szActorInstanceTypeName, pclSelectedActor);
if(!clInstancesList.IsEmpty())
{
CPA_Actor *pclInstance=(CPA_Actor *)(clInstancesList.GetHead());
pstEngineObject=(tdstEngineObject *)pclInstance->GetStruct();
MS_tdxHandleToBrain hBrain=pstEngineObject->h_Brain;
if(hBrain!=NULL)
gp_stCurrentMind = p_stMind = M_pstGetMindOfBrain(hBrain);
}
}
if (p_stMind == NULL)
{
goto nextpos;
}
/*
* restore old reftree
*/
if ( p_stValue ) {
p_stAIModel=AI_M_p_stGetAIModel(p_stMind);
fn_vSetLinkTableForCRR ( p_stValue, (unsigned long)p_stAIModel ) ;
p_stAIModel->CFast_lFunction = ulCFastFunction ;
p_stAIModel->CFast_bIsC = (unsigned char) ulCFastIsC ;
}
else {
::MessageBox (NULL, "oups !! bad key", "edirfrm.cpp", MB_ICONSTOP) ;
}
/*** Name of file ***/
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;
csEngineSectionName = csPathName + csModelName + g_c_csAIRulFileExtension;
msg = "Convert IA to C for "+csModelName;
fn_vDisplayInfoInStatusBar(msg,C_STATUS_NORMAL);
p_oReflex = &(m_pclBrain->m_clListOfReflexBehaviours) ;
p_oComport = &(m_pclBrain->m_clListOfIntelligenceBehaviours) ;
p_oSubroutines = &(m_pclBrain->m_clListOfSubrs) ;
/*** 1 *** Generate CRR file */
if(CFast_GenerateCRR(m_pclBrain, (char *) (LPCSTR) csEngineSectionName) == FALSE)
{
fn_vDisplayInfoInStatusBar("ERROR!",C_STATUS_NORMAL);
m_pclBrain = pclOrgBrain;
if(hLog) fclose(hLog);
return FALSE;
}
CFast_ThirdPassInitMacro ( p_stMind ) ;
CFast_ThirdPassInitSubr ( p_stMind ) ;
if ( CFast_ThirdPassInit ( m_pclBrain, (char *) (LPCSTR) csEngineSectionName, (char *) (LPCSTR)csModelName,
(char *) (LPCSTR)csFamilyName ) == FALSE ) {
fn_vDisplayInfoInStatusBar("Error in cfast initialisation !",C_STATUS_NORMAL);
m_pclBrain = pclOrgBrain;
if(hLog) fclose(hLog);
return FALSE;
}
#if defined (CFAST_DEBUG_FIRST_PASS)
CFast_FirstPassOpening() ;
#endif //defined (CFAST_DEBUG_FIRST_PASS)
/*
* subroutine
*/
pos = p_oSubroutines->GetHeadPosition () ;
ulCount = 0 ;
while (pos)
{
p_oBehaviour = p_oSubroutines->GetNext (pos) ;
tdstMacro *p_stMyMacro = M_GetMacroN(AI_M_p_stGetListOfMacroAIModel(p_stMind->p_stAIModel), ulCount );
p_stMyFastTree = CFast_FirstPassInitSubr(p_stMyMacro);
CFast_FirstPassFillTreeSubr ( p_stMyFastTree, p_stMyMacro );
/*** 2 *** */
CFast_fn_vPassTwo(p_stMyFastTree, pstEngineObject, p_stMyFastTree->uwNbNode);
/*** 3 *** */
CFast_ThirdPassAddSubroutine ( m_pclBrain, p_stMyFastTree, p_stMyMacro, ulCount) ;
/*** 4 *** */
CFast_FirstPassDesinit();
ulCount ++ ;
}
/*
* reflex
*/
pos = p_oReflex->GetHeadPosition () ;
ulCount = 0 ;
while (pos)
{
p_oBehaviour = p_oReflex->GetNext (pos) ;
p_stMyComport = M_GetComportN(AI_M_p_stGetReflex(p_stMind), ulCount );
p_stMyFastTree = CFast_FirstPassInitComport(p_stMyComport);
CFast_FirstPassFillTreeComport ( p_stMyFastTree, p_stMyComport );
/*** 2 *** */
CFast_fn_vPassTwo(p_stMyFastTree, pstEngineObject, p_stMyFastTree->uwNbNode);
/*** 3 *** */
CFast_ThirdPassAddRfx ( m_pclBrain, p_stMyFastTree, ulCount) ;
/*** 4 *** */
CFast_FirstPassDesinit();
ulCount ++ ;
}
/*
* comportement
*/
pos = p_oComport->GetHeadPosition () ;
ulCount = 0 ;
while (pos)
{
p_oBehaviour = p_oComport->GetNext (pos) ;
p_stMyComport = M_GetComportN(AI_M_p_stGetIntelligence(p_stMind), ulCount );
p_stMyFastTree = CFast_FirstPassInitComport(p_stMyComport);
CFast_FirstPassFillTreeComport ( p_stMyFastTree, p_stMyComport );
/*** 2 *** */
CFast_fn_vPassTwo(p_stMyFastTree,pstEngineObject , p_stMyFastTree->uwNbNode);
/*** 3 *** */
CFast_ThirdPassAddCmp ( m_pclBrain, p_stMyFastTree, ulCount) ;
/*** 4 *** */
CFast_FirstPassDesinit();
ulCount ++ ;
}
CFast_ThirdPassFinish (m_pclBrain) ;
#if defined (CFAST_DEBUG_FIRST_PASS)
// #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=# MON AMI CB : C'EST L<> QUE TU R<>CUP<55>RES LE "g_lNbTotalDeNoeud" ! OK ? #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
lCFast_FirstPassClosing();
lSizeTree += (g_lNbTotalDeNoeud * 8);
#endif //defined (CFAST_DEBUG_FIRST_PASS)
//
// Sauvegarde de cfastf.cxx
//
{
if(!(access("x:/cpa/tempgrp/ai/aibase/cfastf.cxx", 0)))
chmod("x:/cpa/tempgrp/ai/aibase/cfastf.cxx", _S_IREAD|_S_IWRITE);
FILE *hFile = fopen("x:/cpa/tempgrp/ai/aibase/cfastf.cxx", "rb");
if(!(access("x:/cpa/tempgrp/ai/aibase/cfastf.$$$", 0)))
chmod("x:/cpa/tempgrp/ai/aibase/cfastf.$$$", _S_IREAD|_S_IWRITE);
FILE *hNewFile = fopen("x:/cpa/tempgrp/ai/aibase/cfastf.$$$", "wb");
if(hFile && hNewFile)
{
char szFileName[15] ;
char szTemp[512];
char szModel[512];
fgets(szTemp,512,hFile); // Comment
fputs(szTemp, hNewFile);
fgets(szTemp,512,hFile); // #ifdef
fputs(szTemp, hNewFile);
fgets(szTemp,512,hFile);
while((szTemp[0] == '/') && (szTemp[1] == '*') && (szTemp[2] != '$'))
{
fputs(szTemp, hNewFile); /* comment : model name*/
/* Get name of model */
strcpy(szModel, szTemp + 2);
szModel[strlen(szModel) - 3] = 0;
if(!strcmpi(csModelName, szModel)) {
/* the current model is already there */
ulCFastFunction = p_stAIModel->CFast_lFunction ;
while(!feof(hFile)) {
if ( fgets(szTemp,512,hFile) != NULL )
fputs(szTemp, hNewFile);
}
goto endcfastf ;
}
fgets(szTemp,512,hFile);
fputs(szTemp, hNewFile); /* include */
fgets(szTemp,512,hFile);
}
fprintf(hNewFile, "/*%s*/\n", csModelName);
CFast_vMakeFileNameFromModel ( szFileName, (char *)(LPCTSTR)csModelName ) ;
fprintf(hNewFile, "#include \"%s%s.cxx\"\n", CFast_szCFastPath, szFileName);
fputs(szTemp, hNewFile); /*$*/
fgets(szTemp,512,hFile); /* CFast_tdst_ArrayFunctions CFast_gast_ArrayFunctions[] = */
fputs(szTemp, hNewFile);
fgets(szTemp,512,hFile); /* { */
fputs(szTemp, hNewFile);
fgets(szTemp,512,hFile); /* CFast_M_MakeRef(NULL, NULL, 0, NULL), */
fputs(szTemp, hNewFile);
fgets(szTemp,512,hFile); /* #ifdef */
fputs(szTemp, hNewFile);
/* just copy until #endif was found */
//CB ulCFastFunction = 1 ;
ulCFastFunction = 0 ;
fgets ( szTemp, 512, hFile ) ;
while ( strncmp (szTemp, "#endif", 6 ) ) {
ulCFastFunction++ ;
fputs (szTemp, hNewFile) ;
fgets ( szTemp, 512, hFile ) ;
}
/*
while ( (c=fgetc(hFile)) != '}' ) {
if ( c == '\n' )
ulCFastFunction++ ;
fputc ( c, hNewFile ) ;
}
*/
fprintf(hNewFile, " CFast_M_MakeRef(\"CFast_%s_Main\", CFast_%s_Main, (long)CFast_Dummy_%s, NULL),\n", csModelName, csModelName, csModelName, csModelName);
fprintf(hNewFile, "#endif /* U64_IA_EN_C */\n" ) ;
fprintf(hNewFile, "CFast_M_MakeRef(NULL, NULL, 0, NULL)\n" ) ;
fprintf(hNewFile, "};\n" ) ;
endcfastf:
fclose(hFile);
fclose(hNewFile);
unlink("x:/cpa/tempgrp/ai/aibase/cfastf.cxx");
rename("x:/cpa/tempgrp/ai/aibase/cfastf.$$$","x:/cpa/tempgrp/ai/aibase/cfastf.cxx");
}
else
{
fn_vDisplayInfoInStatusBar("cfastf.cxx not generated",C_STATUS_NORMAL);
m_pclBrain = pclOrgBrain;
if(hFile) fclose(hFile);
if(hNewFile) fclose(hNewFile);
if(hLog) fclose(hLog);
return FALSE;
}
}
// Sauvegarde du .AI
if(ulCFastFunction){
/*
char szTemp[512];
sprintf(szTemp, "x:/cpa/exe/main/gamedata/world/levels/_common/families/%s/%s/%s.ai", csFamilyName, csModelName, csModelName);
if(!(access(szTemp, 0)))
chmod(szTemp, _S_IREAD|_S_IWRITE);
FILE *hFile = fopen(szTemp, "wt");
//ulCFastFunction = 0 ;
if(hFile)
{
fprintf(hFile, "{CreateAIModel:\n");
fprintf(hFile, " CFast_IsC(1)\n");
fprintf(hFile, " CFast_FunctionIndex(%d)\n", ulCFastFunction);
fprintf(hFile, " CreateVariableDeclarationAIModel(\"%s\\%s\\%s.dec\")\n",csFamilyName,csModelName,csModelName);
fprintf(hFile, " CreateIntellAIModel(\"%s\\%s\\%s.rul\")\n",csFamilyName,csModelName,csModelName);
fprintf(hFile, " CreateReflexAIModel(\"%s\\%s\\%s.rfx\")\n",csFamilyName,csModelName,csModelName);
fprintf(hFile, " CreateRefAIModel(\"%s\\%s\\%s.crr\")\n",csFamilyName,csModelName,csModelName);
fprintf(hFile, " CreateRefTree(\"%s\\%s\\%s.nod\")\n",csFamilyName,csModelName,csModelName);
fprintf(hFile, "}\n");
fclose(hFile);
}
*/
ulOldCFastFunction = p_stMind->p_stAIModel->CFast_lFunction ;
ulOldCFastIsC = p_stMind->p_stAIModel->CFast_bIsC ;
/*
* bIsC = 1 : AI in C but interperted tree still loaded (for bugging)
* bIsC = 2 : AI in C and interpreted tree not loaded
*/
p_stMind->p_stAIModel->CFast_bIsC = 1 ;
//p_stMind->p_stAIModel->CFast_bIsC = 2 ;
p_stMind->p_stAIModel->CFast_lFunction = ulCFastFunction ;
m_pclBrain->m_fn_vNotify() ;
pclSelectedActor->fn_vNotifySave() ;
pclSelectedActor->mfn_vUpdateAllInstancesForFastC() ;
/*
p_stMind->p_stAIModel->CFast_bIsC = ulOldCFastIsC;
p_stMind->p_stAIModel->CFast_lFunction = ulOldCFastFunction ;
*/
}
}
else
{
fn_vDisplayInfoInStatusBar("ERROR!",C_STATUS_NORMAL);
m_pclBrain = pclOrgBrain;
if(hLog) fclose(hLog);
return FALSE;
}
if(bProcessAll == FALSE)
break;
nextpos:
pclDocument->m_clModelsList.GetNext(pos);
}
//Shows current actor
CPA_DLLBase *pclActorDLL=(CPA_DLLBase*)(g_pclAIInterface->GetMainWorld()->GetObjectDLLWithName(C_szDLLActorName));
pclSelectedActor=(CPA_Actor *)pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_GetSelectedActor,0);
pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_DisplayActor,(long)NULL);
pclActorDLL->OnQueryAction(g_pclAIInterface,C_uiActor_DisplayActor,(long)pclSelectedActor);
if(hLog)
{
fprintf(hLog, "%d", lSizeTree);
fclose(hLog);
}
//msg="OK (Good Work !!)";
msg="OK (<28>a vaaaaa 3lik !!)";
fn_vDisplayInfoInStatusBar(msg,C_STATUS_NORMAL);
m_pclBrain = pclOrgBrain;
return TRUE;
}
//End Shaitan FastC }
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vSetOrRemoveOneBreakPoint(long lIndex,long lLineIndex)
{
if(m_pclBrain!=NULL)
{
CPA_EdIR_Behaviour *pclBehaviour=m_fn_pclGetDiagrammeView()->m_fn_pclGetActiveBehaviour();
if((pclBehaviour!=NULL) && (pclBehaviour->m_bDeclaration==FALSE))
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=pclBehaviour->m_fn_pclGetMainBehaviour();
m_pclBrain->m_fn_vSetOrRemoveOneBreakPoint(lIndex,pclMainBehaviour->GetName());
m_fn_pclGetEdRulesView()->m_fn_vSetBreakPointList(m_pclBrain->m_fn_pclGetBreakPointList());
//Stefan Dumitrean 11-06-98 ( new scroll )
CRect clRect;
m_fn_pclGetEdRulesView()->GetClientRect( &clRect );
CRect clRectI( 0, 0, 12, clRect.Height() );
m_fn_pclGetEdRulesView()->InvalidateRect( &clRectI );
//End Stefan Dumitrean 11-06-98 ( new scroll )
}
}
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vPrint()
{
m_fn_pclGetDiagrammeView()->m_fn_vPrint();
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vShowConstant()
{
CPA_EdIR_ConstantDialog clConstantDlg(&m_clConstantList);
clConstantDlg.DoModal();
}
/**********************************************************************************/
CPA_Actor *CPA_EdIR_Frame::m_fn_pclGetModel()
{
if(m_pclBrain)
return m_pclBrain->m_fn_pclGetModel();
else
return NULL;
}
/**********************************************************************************/
CPA_EdIR_MainBehaviourList *CPA_EdIR_Frame::m_fn_pclGetIntelligenceBehaviours()
{
if(m_pclBrain)
return &(m_pclBrain->m_clListOfIntelligenceBehaviours);
else
return NULL;
}
/**********************************************************************************/
CPA_EdIR_MainBehaviourList *CPA_EdIR_Frame::m_fn_pclGetReflexBehaviours()
{
if(m_pclBrain)
return &(m_pclBrain->m_clListOfReflexBehaviours);
else
return NULL;
}
/**********************************************************************************/
CPA_EdIR_MainBehaviourList *CPA_EdIR_Frame::m_fn_pclGetDeclarations()
{
if(m_pclBrain)
return &(m_pclBrain->m_clListOfDeclarations);
else
return NULL;
}
// BEGIN CPA2 Cristi Petrescu 98-03-
/**********************************************************************************/
CPA_EdIR_MainBehaviourList *CPA_EdIR_Frame::m_fn_pclGetMacros()
{
if(m_pclBrain)
return &(m_pclBrain->m_clListOfMacros);
else
return NULL;
}
// END CPA2 Cristi Petrescu 98-03-
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
/**********************************************************************************/
CPA_EdIR_MainBehaviourList *CPA_EdIR_Frame::m_fn_pclGetSubrs()
{
if(m_pclBrain)
return &(m_pclBrain->m_clListOfSubrs);
else
return NULL;
}
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
/**********************************************************************************/
void *CPA_EdIR_Frame::m_fn_pvGetStateHandle(CString csActionName)
{
if(m_pclBrain)
return m_pclBrain->m_fn_pvGetStateHandle(csActionName);
else
return NULL;
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vGetActionList(CStringList *cslActionList)
{
if(m_pclBrain)
m_pclBrain->m_fn_vGetActionList(cslActionList);
}
/**********************************************************************************/
void CPA_EdIR_Frame::OnActivate(UINT nState,CWnd* pWndOther,BOOL bMinimized)
{
SetActiveView(m_fn_pclGetEdRulesView());
FRMBase::OnActivate(nState,pWndOther,bMinimized);
}
/**********************************************************************************/
void CPA_EdIR_Frame::OnSetFocus(CWnd* pOldWnd)
{
SetActiveView(m_fn_pclGetEdRulesView());
FRMBase::OnSetFocus(pOldWnd);
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vFillConstantList()
{
SCR_tdst_DyAr_Description *pstArray;
SCR_tdst_Link_Value *pstLinkValue;
unsigned long lPos=0;
pstArray=&(SCR_M_st_Link_GetDynamicArray(AI_fn_p_stGetDsgVarLinkTable()));
SCR_M_DyAr_GetNextElement(SCR_tdst_Link_Value,lPos,pstLinkValue,(*pstArray));
while(pstLinkValue!=NULL)
{
unsigned long ulValue=SCR_M_ul_Link_GetValue(pstLinkValue);
unsigned long ulType=SCR_M_ul_Link_GetAdditionalLong(pstLinkValue,2);
CString csType;
CString csName;
CString csValue;
if(ulType==E_vt_Integer)
{
csType=g_c_csInteger;
csValue.Format("%ld",ulValue);
}
else
if(ulType==E_vt_Float)
{
csType=g_c_csDecimal;
csValue.Format("%f",MTH_M_xRealToFloat(*(MTH_tdxReal *)(&ulValue)));
}
else
{
AfxMessageBox("CPA_EdIR_Frame::m_fn_vFillConstantList : Unknown constant type !!");
ASSERT(FALSE);
}
csName=SCR_M_p_sz_Link_GetKey(pstLinkValue);
long lIndex=csName.ReverseFind(':');
if(lIndex!=-1)
{
csName=csName.Right(csName.GetLength()-lIndex-1);
}
else
{
AfxMessageBox("CPA_EdIR_Frame::m_fn_vFillConstantList : Can't get the constant name ("+csName+")!!");
ASSERT(FALSE);
}
m_clConstantList.m_fn_vAdd(csType,csName,csValue);
lPos++;
SCR_M_DyAr_GetNextElement(SCR_tdst_Link_Value,lPos,pstLinkValue,(*pstArray));
}
}
#endif //D_ED_IR_ACTIVE