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

583 lines
18 KiB
C++

// EdIRLoad.cpp : implementation of the CEdIAFrame class
//
#include "stdafx.h"
#include "Defines.hpp"
//#ifdef D_ED_IR_ACTIVE
#include "EdIRFrm.hpp"
#include "EdIRStrg.hpp"
#include "EdIRIRD.hpp"
#include "EdIRBeEn.hpp"
#include "EdIRGlob.hpp"
#include "EdIRIAWd.hpp"
#include "EDACModl.hpp"
#include "ai_intf.hpp"
#include "TFA.h"
#include "incAI.h"
#include "x:\cpa\main\inc\_EditID.h"
#include "_Actors.hpp"
#include "ITF.h"
#include "GAM.h"
#include "GMT.h"
#include "DPT.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPA_EdIR_Frame load script
/**********************************************************************************/
/* CHRISTOPHE QUICK SAVE MODIFICATIONS { */
#include "EdIRRes.h"
class CQuickSave : public CDialog
{
public:
CString msg;
CQuickSave(int);
virtual BOOL OnInitDialog()
{
CDialog::OnInitDialog();
CStatic *pstat = (CStatic *) GetDlgItem(IDC_STATIC);
pstat->SetWindowText(msg);
return TRUE;
}
afx_msg void OnYes() { EndDialog(IDYES); }
afx_msg void OnNo() { EndDialog(IDNO); }
afx_msg void OnNoAll() { EndDialog(IDNOALL); }
afx_msg void OnDelete() { EndDialog(IDDELETE); }
afx_msg void OnDeleteAll() { EndDialog(IDDELETEALL); }
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CQuickSave, CDialog)
ON_COMMAND(IDYES,OnYes)
ON_COMMAND(IDNO,OnNo)
ON_COMMAND(IDNOALL,OnNoAll)
ON_COMMAND(IDDELETE,OnDelete)
ON_COMMAND(IDDELETEALL,OnDeleteAll)
END_MESSAGE_MAP()
BOOL QuickSaveDeleteAll = FALSE;
BOOL QuickSaveNoAll = FALSE;
CQuickSave::CQuickSave(int n) : CDialog(n) {}
int QuickSaveDialog(CString text)
{
CQuickSave Dial(IDD_QUICKSAVE);
Dial.msg = text;
return Dial.DoModal();
}
/**********************************************************************************/
void CPA_EdIR_Frame::m_fn_vLoadBrain(CPA_Actor *pclModel,CString csModelName)
{
//Loads Intelligence
CString csFileName=csModelName+g_c_csIntelligenceFileExtension;
CString csFileNameQS=csModelName+g_c_csIntelligenceFileExtensionQS;
CString csSectionName=csFileName+'^'+g_c_csIntelligenceSectionName;
CString csSectionNameQS=csFileNameQS+'^'+g_c_csIntelligenceSectionName;
BOOL bQuickSaveFileExists=FALSE;
BOOL bLoadQuickSaveFile=FALSE;
BOOL bAsksQuestion=TRUE;
BOOL bDeleteQuick = FALSE;
SCR_tdst_Cxt_Values *p_stValues;
char Path[255], File[255];
char *psz_Temp;
CString csBaseMsg="Would you like to load QuickSave for ";
char *psz_Famil = fn_szGetFamiliesDataPath();
SCR_M_RdL0_SetContextLong(1,0,(long)(((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain));
bQuickSaveFileExists=FALSE;
bDeleteQuick=FALSE;
if(QuickSaveNoAll == FALSE)
bQuickSaveFileExists=SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionNameQS));
if(bQuickSaveFileExists)
{
CString csMsg=csBaseMsg+csModelName+" model ?";
if((QuickSaveDeleteAll == FALSE)&&(bAsksQuestion))
{
int iRes = QuickSaveDialog(csMsg);
switch(iRes)
{
case IDYES: bLoadQuickSaveFile = TRUE; break;
case IDNO: bLoadQuickSaveFile = FALSE; break;
case IDNOALL: bLoadQuickSaveFile = FALSE; QuickSaveNoAll = TRUE; break;
case IDDELETE: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; break;
case IDDELETEALL: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; QuickSaveDeleteAll = TRUE; break;
}
}
bAsksQuestion=FALSE;
if(bDeleteQuick || QuickSaveDeleteAll)
{
strcpy(Path, psz_Famil);
strcat(Path, "\\");
strcpy(File, (char *) (LPCSTR) csSectionNameQS);
psz_Temp = strrchr(File, '^');
if(psz_Temp)
{
*psz_Temp = '\0';
strcat(Path, File);
chmod(Path, _S_IWRITE);
unlink(Path);
}
bLoadQuickSaveFile = FALSE;
}
else if (bLoadQuickSaveFile)
{
CPA_EdIR_Brain *pclBrain=((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain;
pclBrain->m_fn_vSetModified(TRUE);
pclBrain->m_fn_vNotify();
// for instances
CPA_List<CPA_BaseObject> clInstancesList;
g_pclAIInterface->GetMainWorld()->fn_lFindObjects(&clInstancesList,"",C_szActorInstanceTypeName,pclModel);
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;
}
}
}
if(bLoadQuickSaveFile)
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionNameQS),SCR_CDF_uw_Anl_Normal);
else
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionName),SCR_CDF_uw_Anl_Normal);
//Loads Reflex
csFileName=csModelName+g_c_csReflexFileExtension;
csFileNameQS=csModelName+g_c_csReflexFileExtensionQS;
csSectionName=csFileName+'^'+g_c_csReflexSectionName;
csSectionNameQS=csFileNameQS+'^'+g_c_csReflexSectionName;
SCR_M_RdL0_SetContextLong(1,0,(long)(((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain));
bQuickSaveFileExists=FALSE;
if(QuickSaveNoAll == FALSE)
bQuickSaveFileExists=SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionNameQS));
if(bQuickSaveFileExists)
{
CString csMsg=csBaseMsg+csModelName+" model ?";
if((QuickSaveDeleteAll == FALSE)&&(bAsksQuestion))
{
int iRes = QuickSaveDialog(csMsg);
switch(iRes)
{
case IDYES: bLoadQuickSaveFile = TRUE; break;
case IDNO: bLoadQuickSaveFile = FALSE; break;
case IDNOALL: bLoadQuickSaveFile = FALSE; QuickSaveNoAll = TRUE; break;
case IDDELETE: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; break;
case IDDELETEALL: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; QuickSaveDeleteAll = TRUE; break;
}
}
bAsksQuestion=FALSE;
if(bDeleteQuick || QuickSaveDeleteAll)
{
strcpy(Path, psz_Famil);
strcat(Path, "\\");
strcpy(File, (char *) (LPCSTR) csSectionNameQS);
psz_Temp = strrchr(File, '^');
if(psz_Temp)
{
*psz_Temp = '\0';
strcat(Path, File);
chmod(Path, _S_IWRITE);
unlink(Path);
}
bLoadQuickSaveFile = FALSE;
}
}
if(bLoadQuickSaveFile)
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionNameQS),SCR_CDF_uw_Anl_Normal);
else
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionName),SCR_CDF_uw_Anl_Normal);
//Loads Declaration
csFileName=csModelName+g_c_csDeclarationFileExtension;
csFileNameQS=csModelName+g_c_csDeclarationFileExtensionQS;
csSectionName=csFileName+'^'+g_c_csDeclarationSectionName;
csSectionNameQS=csFileNameQS+'^'+g_c_csDeclarationSectionName;
SCR_M_RdL0_SetContextLong(1,0,(long)(((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain));
bQuickSaveFileExists=FALSE;
if(QuickSaveNoAll == FALSE)
bQuickSaveFileExists=SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionNameQS));
if(bQuickSaveFileExists)
{
CString csMsg=csBaseMsg+csModelName+" model ?";
if((QuickSaveDeleteAll == FALSE)&&(bAsksQuestion))
{
int iRes = QuickSaveDialog(csMsg);
switch(iRes)
{
case IDYES: bLoadQuickSaveFile = TRUE; break;
case IDNO: bLoadQuickSaveFile = FALSE; break;
case IDNOALL: bLoadQuickSaveFile = FALSE; QuickSaveNoAll = TRUE; break;
case IDDELETE: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; break;
case IDDELETEALL: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; QuickSaveDeleteAll = TRUE; break;
}
}
bAsksQuestion=FALSE;
if(bDeleteQuick || QuickSaveDeleteAll)
{
strcpy(Path, psz_Famil);
strcat(Path, "\\");
strcpy(File, (char *) (LPCSTR) csSectionNameQS);
psz_Temp = strrchr(File, '^');
if(psz_Temp)
{
*psz_Temp = '\0';
strcat(Path, File);
chmod(Path, _S_IWRITE);
unlink(Path);
}
bLoadQuickSaveFile = FALSE;
}
}
if(bLoadQuickSaveFile)
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionNameQS),SCR_CDF_uw_Anl_Normal);
else
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionName),SCR_CDF_uw_Anl_Normal);
//BEGIN ROMTEAM Cristi Petrescu 98-04-
//Loads Macros
csFileName=csModelName+g_c_csMacroFileExtension;
csFileNameQS=csModelName+g_c_csMacroFileExtensionQS;
csSectionName=csFileName+'^'+g_c_csMacroSectionName;
csSectionNameQS=csFileNameQS+'^'+g_c_csMacroSectionName;
SCR_M_RdL0_SetContextLong(1,0,(long)(((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain));
bQuickSaveFileExists=FALSE;
if(QuickSaveNoAll == FALSE)
bQuickSaveFileExists=SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionNameQS));
if(bQuickSaveFileExists)
{
CString csMsg=csBaseMsg+csModelName+" model ?";
if((QuickSaveDeleteAll == FALSE)&&(bAsksQuestion))
{
int iRes = QuickSaveDialog(csMsg);
switch(iRes)
{
case IDYES: bLoadQuickSaveFile = TRUE; break;
case IDNO: bLoadQuickSaveFile = FALSE; break;
case IDNOALL: bLoadQuickSaveFile = FALSE; QuickSaveNoAll = TRUE; break;
case IDDELETE: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; break;
case IDDELETEALL: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; QuickSaveDeleteAll = TRUE; break;
}
}
bAsksQuestion=FALSE;
if(bDeleteQuick || QuickSaveDeleteAll)
{
strcpy(Path, psz_Famil);
strcat(Path, "\\");
strcpy(File, (char *) (LPCSTR) csSectionNameQS);
psz_Temp = strrchr(File, '^');
if(psz_Temp)
{
*psz_Temp = '\0';
strcat(Path, File);
chmod(Path, _S_IWRITE);
unlink(Path);
}
bLoadQuickSaveFile = FALSE;
}
}
if(bLoadQuickSaveFile)
{
if (SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionNameQS)))
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionNameQS),SCR_CDF_uw_Anl_Normal);
}
else
{
if (SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionName)))
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionName),SCR_CDF_uw_Anl_Normal);
}
//Loads Subrs
csFileName=csModelName+g_c_csSubrFileExtension;
csFileNameQS=csModelName+g_c_csSubrFileExtensionQS;
csSectionName=csFileName+'^'+g_c_csSubrSectionName;
csSectionNameQS=csFileNameQS+'^'+g_c_csSubrSectionName;
SCR_M_RdL0_SetContextLong(1,0,(long)(((EdActors_EditorActorModel *)pclModel->m_fn_pclGetEditorActor())->m_pclBrain));
bQuickSaveFileExists=FALSE;
if(QuickSaveNoAll == FALSE)
bQuickSaveFileExists=SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionNameQS));
if(bQuickSaveFileExists)
{
CString csMsg=csBaseMsg+csModelName+" model ?";
if((QuickSaveDeleteAll == FALSE)&&(bAsksQuestion))
{
int iRes = QuickSaveDialog(csMsg);
switch(iRes)
{
case IDYES: bLoadQuickSaveFile = TRUE; break;
case IDNO: bLoadQuickSaveFile = FALSE; break;
case IDNOALL: bLoadQuickSaveFile = FALSE; QuickSaveNoAll = TRUE; break;
case IDDELETE: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; break;
case IDDELETEALL: bLoadQuickSaveFile = FALSE; bDeleteQuick = TRUE; QuickSaveDeleteAll = TRUE; break;
}
}
bAsksQuestion=FALSE;
if(bDeleteQuick || QuickSaveDeleteAll)
{
strcpy(Path, psz_Famil);
strcat(Path, "\\");
strcpy(File, (char *) (LPCSTR) csSectionNameQS);
psz_Temp = strrchr(File, '^');
if(psz_Temp)
{
*psz_Temp = '\0';
strcat(Path, File);
chmod(Path, _S_IWRITE);
unlink(Path);
}
bLoadQuickSaveFile = FALSE;
}
}
if(bLoadQuickSaveFile)
{
if (SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionNameQS)))
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionNameQS),SCR_CDF_uw_Anl_Normal);
}
else
{
if (SCR_fn_c_RdL0_IsSectionExists(M_MAKECHAR(csSectionName)))
p_stValues=SCR_fnp_st_RdL0_AnalyseSection(M_MAKECHAR(csSectionName),SCR_CDF_uw_Anl_Normal);
}
//END ROMTEAM Cristi Petrescu 98-04-
}
/* } END CHRISTOPHE QUICK SAVE MODIFICATIONS */
/**********************************************************************************/
SCR_tde_Anl_ReturnValue CPA_EdIR_Frame::m_fn_tdeCallBackLoadIntelligence(SCR_tdst_File_Description *pfFile,
char *szAction,
char *szPars[],
SCR_tde_Anl_Action eType)
{
if(eType==SCR_EA_Anl_BeginSection)
{
CPA_EdIR_Brain *p_clBrain;
SCR_M_RdL0_GetContextLong(0,0,CPA_EdIR_Brain *,p_clBrain);
SCR_M_RdL0_SetContextLong(1,0,long(&(p_clBrain->m_clListOfIntelligenceBehaviours)));
SCR_M_RdL0_SetContextLong(1,1,long(p_clBrain->m_fn_pclGetModel()));
}
return SCR_ERV_Anl_NormalReturn;
}
/**********************************************************************************/
SCR_tde_Anl_ReturnValue CPA_EdIR_Frame::m_fn_tdeCallBackLoadReflex(SCR_tdst_File_Description *pfFile,
char *szAction,
char *szPars[],
SCR_tde_Anl_Action eType)
{
if(eType==SCR_EA_Anl_BeginSection)
{
CPA_EdIR_Brain *p_clBrain;
SCR_M_RdL0_GetContextLong(0,0,CPA_EdIR_Brain *,p_clBrain);
SCR_M_RdL0_SetContextLong(1,0,long(&(p_clBrain->m_clListOfReflexBehaviours)));
SCR_M_RdL0_SetContextLong(1,1,long(p_clBrain->m_fn_pclGetModel()));
}
return SCR_ERV_Anl_NormalReturn;
}
/**********************************************************************************/
SCR_tde_Anl_ReturnValue CPA_EdIR_Frame::m_fn_tdeCallBackLoadDeclaration(SCR_tdst_File_Description *pfFile,
char *szAction,
char *szPars[],
SCR_tde_Anl_Action eType)
{
if(eType==SCR_EA_Anl_BeginSection)
{
CPA_EdIR_Brain *p_clBrain;
SCR_M_RdL0_GetContextLong(0,0,CPA_EdIR_Brain *,p_clBrain);
SCR_M_RdL0_SetContextLong(1,0,long(&(p_clBrain->m_clListOfDeclarations)));
SCR_M_RdL0_SetContextLong(1,1,long(p_clBrain->m_fn_pclGetModel()));
}
return SCR_ERV_Anl_NormalReturn;
}
// BEGIN CPA2 Cristi Petrescu 98-03-
/**********************************************************************************/
SCR_tde_Anl_ReturnValue CPA_EdIR_Frame::m_fn_tdeCallBackLoadMacro(SCR_tdst_File_Description *pfFile,
char *szAction,
char *szPars[],
SCR_tde_Anl_Action eType)
{
if(eType==SCR_EA_Anl_BeginSection)
{
CPA_EdIR_Brain *p_clBrain;
SCR_M_RdL0_GetContextLong(0,0,CPA_EdIR_Brain *,p_clBrain);
SCR_M_RdL0_SetContextLong(1,0,long(&(p_clBrain->m_clListOfMacros)));
SCR_M_RdL0_SetContextLong(1,1,long(p_clBrain->m_fn_pclGetModel()));
}
return SCR_ERV_Anl_NormalReturn;
}
// END CPA2 Cristi Petrescu 98-03-
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
/**********************************************************************************/
SCR_tde_Anl_ReturnValue CPA_EdIR_Frame::m_fn_tdeCallBackLoadSubr(SCR_tdst_File_Description *pfFile,
char *szAction,
char *szPars[],
SCR_tde_Anl_Action eType)
{
if(eType==SCR_EA_Anl_BeginSection)
{
CPA_EdIR_Brain *p_clBrain;
SCR_M_RdL0_GetContextLong(0,0,CPA_EdIR_Brain *,p_clBrain);
SCR_M_RdL0_SetContextLong(1,0,long(&(p_clBrain->m_clListOfSubrs)));
SCR_M_RdL0_SetContextLong(1,1,long(p_clBrain->m_fn_pclGetModel()));
}
return SCR_ERV_Anl_NormalReturn;
}
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
/**********************************************************************************/
SCR_tde_Anl_ReturnValue CPA_EdIR_Frame::m_fn_tdeCreateMainBehaviour(SCR_tdst_File_Description *pfFile,
char *szAction,
char *szPars[],
SCR_tde_Anl_Action eType)
{
static CPA_EdIR_MainBehaviour *s_pclMainBehaviour;
static CString s_csLanguage;
if(eType==SCR_EA_Anl_BeginSection)
{
CPA_Actor *pclModel;
SCR_M_RdL0_GetContextLong(0,1,CPA_Actor *,pclModel);
s_pclMainBehaviour=new CPA_EdIR_MainBehaviour(pclModel);
s_csLanguage="French";
}
else
if(eType==SCR_EA_Anl_Entry)
{
if(strcmpi(szAction,g_c_csBehaviourLanguage)==0)
{
s_csLanguage=szPars[0];
}
else
if(strcmpi(szAction,g_c_csBehaviourName)==0)
{
if(s_pclMainBehaviour->fn_eRename(CString(szPars[0]))!=E_mc_None)
s_pclMainBehaviour->SetDefaultUniqueName();
}
else
if(strcmpi(szAction,g_c_csBehaviourBoundingBox)==0)
{
s_pclMainBehaviour->m_crPosition.left=atol(szPars[0]);
s_pclMainBehaviour->m_crPosition.top=atol(szPars[1]);
s_pclMainBehaviour->m_crPosition.right=atol(szPars[2]);
s_pclMainBehaviour->m_crPosition.bottom=atol(szPars[3]);
}
else
if(strcmpi(szAction,g_c_csBehaviourText)==0)
{
//Old file format
if(SCR_fn_uc_RdL0_GetNumberOfParameters(szPars)==3)
{
CFile cfFile;
CString csFileName;
csFileName=fn_szGetFamiliesDataPath()+CString("\\")+
CString(szPars[0]);
if(cfFile.Open(csFileName,CFile::modeRead))
{
long lOffset=atol(szPars[1]);
long lLen=atol(szPars[2]);
char *p_cBuf=new char[lLen+1];
cfFile.Seek(lOffset,CFile::begin);
cfFile.Read(p_cBuf,lLen);
p_cBuf[lLen]=0;
s_pclMainBehaviour->m_csText=p_cBuf;
delete[] p_cBuf;
cfFile.Close();
}
}
//New file format
else
{
CString csLine=CString(szPars[0]);
csLine=fn_csReplaceChar(csLine,'\'','\"');
s_pclMainBehaviour->m_csText+=csLine+"\xD\xA";
}
}
}
else
if(eType==SCR_EA_Anl_EndSection)
{
CPA_EdIR_MainBehaviourList *p_clMainBehaviourList;
SCR_M_RdL0_GetContextLong(0,0,CPA_EdIR_MainBehaviourList *,p_clMainBehaviourList);
//Deletes the last "\xD\xA" sequence
if(s_pclMainBehaviour->m_csText.Right(2).CompareNoCase("\xD\xA")==0)
s_pclMainBehaviour->m_csText=s_pclMainBehaviour->m_csText.Left(s_pclMainBehaviour->m_csText.GetLength()-2);
//Translates text if needed
CString csCurrentLanguage=g_pclAIInterface->M_GetMainWorld()->GetInterface()->fn_csGetCurrentLanguage();
if(s_csLanguage!=csCurrentLanguage)
{
//s_pclMainBehaviour->m_csText=fn_csTranslateText(s_pclMainBehaviour->m_csText,csCurrentLanguage);
s_pclMainBehaviour->m_csText=fn_csFastTranslateText(s_pclMainBehaviour->m_csText,s_csLanguage,csCurrentLanguage);
}
p_clMainBehaviourList->AddTail(s_pclMainBehaviour);
}
return SCR_ERV_Anl_NormalReturn;
}
//#endif //D_ED_IR_ACTIVE