reman3/Rayman_X/cpa/tempgrp/OAC/Src/EdActors/EDACSave.cpp

485 lines
15 KiB
C++

// To Save Models
//
// YB
/////////////////////////////////////
#include "StdAfx.h"
#include "ACP_Base.h"
#include "ITF.h"
#include "TAC.h"
#include "TFa.h"
#include "IncMEC.h"
#define D_State_Define
#include "IncGAM.h"
#undef D_State_Define
#include "GLI.h"
#include "EDACInst.hpp"
#include "EDACModl.hpp"
#include "EDACDgIf.hpp"
#include "EDACStrg.hpp"
#include "Defines.hpp"
//-----------------IR-------------------------
#include "EdIRStrg.hpp"
#include "EdIRBeEn.hpp"
#include "EdIRBeHa.hpp"
#include "EDACQuer.hpp"
//--------------------------------------------
#undef CPA_WANTS_IMPORT
#undef CPA_EXPORT
#define CPA_WANTS_EXPORT
//-----------------IR-------------------------
#include "EdIRIRD.hpp"
//--------------------------------------------
#include "_Actors.hpp"
#undef CPA_WANTS_EXPORT
#define CPA_WANTS_IMPORT
BOOL OAC_fn_bSaveData(SCRIPT_tdstSaveFile *p_tdstScriptFile,
CTL_Editor_Data *_pclData);
////////////////////////////////
// Models : Saving functions //
////////////////////////////////
//*************************************************************************
// Model Saving Function
//*************************************************************************
void EdActors_EditorActorModel::m_fn_vSaveActor(SCR_tdst_File_Description *p_stFile)
{
CString csCurrentLine;
CString csNextAndPreviousLine;
//Scripts header
SCR_M_SvL0_SaveScriptFileHeader(p_stFile);
//Actors Editor header
csNextAndPreviousLine = "+++++++++++++++++++++++++++++++++++++++++++";
csCurrentLine = "+ Actors Editor +";
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csNextAndPreviousLine));
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csNextAndPreviousLine));
csCurrentLine = "+ Version " + g_pclInterface->m_fn_csGetEditorVersion() + " +";
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveBlankLine(p_stFile);
//Computes date
SYSTEMTIME stSystemTime;
::GetLocalTime(&stSystemTime);
CTime cTime(stSystemTime);
CString csDate = cTime.Format( "%A, %B %d, %Y, %Hh%Mm ");
csCurrentLine = " Save date : " + csDate;
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csNextAndPreviousLine));
SCR_M_SvL0_SaveBlankLine(p_stFile);
csCurrentLine.Format("########### Model %s ###########", m_fn_csGetActorName());
csNextAndPreviousLine = "######################";
while ( csNextAndPreviousLine.GetLength() < csCurrentLine.GetLength() )
csNextAndPreviousLine += '#';
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csNextAndPreviousLine));
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csNextAndPreviousLine));
SCR_M_SvL0_SaveBlankLine(p_stFile);
csCurrentLine.Format("%s:%s", g_c_csActorScriptModelSectionName,
m_fn_csGetActorName());
SCR_M_SvL0_SaveBeginSection(p_stFile,
M_MAKECHAR(csCurrentLine),
SCR_CC_C_Cfg_EOL);
SCR_M_SvL0_SaveBlankLine(p_stFile);
//---------------------------------------------------------------------
//Saves Model type
SCR_M_SvL0_SaveEntry( p_stFile,
M_MAKECHAR(g_c_csModelType),
SCR_CC_C_Cfg_NoChar);
if ( m_pclActor->m_fn_bIsAGenDoor() )
csCurrentLine = g_c_csModelTypeGenDoor;
else
csCurrentLine = g_c_csModelTypeActor;
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile,
SCR_EF_SvL0_Scanf,
2,
"%s",
M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveBlankLine(p_stFile);
//---------------------------------------------------------------------
//Saves Bitmap Name
if ( m_fn_csGetBitmapName().IsEmpty() )
csCurrentLine = "<< Unknown Bitmap name >>";
else
csCurrentLine = M_MAKECHAR(m_fn_csGetBitmapName());
SCR_M_SvL0_SaveEntry( p_stFile,
M_MAKECHAR(g_c_csBitmapName),
SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile,
SCR_EF_SvL0_Scanf,
2,
"%s",
M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveBlankLine(p_stFile);
//---------------------------------------------------------------------
//Saves base Family
if ( m_pclActor->m_pub_fn_pclGetFamily() != NULL )
csCurrentLine = m_pclActor->m_pub_fn_pclGetFamily()->GetName();
else
csCurrentLine = "<< Unknown Family name >>";
SCR_M_SvL0_SaveEntry( p_stFile,
M_MAKECHAR(g_c_csActorFamily),
SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile,
SCR_EF_SvL0_Scanf,
2,
"%s",
M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveBlankLine(p_stFile);
//---------------------------------------------------------------------
//Saves AI Model Name
//-----------------IR-------------------------
if(EDAC_fn_bMustSaveAIEntryInModel(m_pclBrain))
{
CString csBrainSectionEntry;
csBrainSectionEntry= m_pclActor->m_pub_fn_pclGetFamily()->GetName()+"\\";
csBrainSectionEntry+=m_fn_csGetActorName()+"\\";
csBrainSectionEntry+=m_fn_csGetActorName();
SCR_M_SvL0_SaveEntry( p_stFile,
M_MAKECHAR(g_c_csBrainName),
SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile,
SCR_EF_SvL0_Scanf,
2,
"%s",
M_MAKECHAR(csBrainSectionEntry));
SCR_M_SvL0_SaveBlankLine(p_stFile);
}
//BEGIN ROMTEAM Cristi Petrescu 98-06-
//---------------------------------------------------------------------
//Saves AI Private variable status
SCR_M_SvL0_SaveEntry( p_stFile,
M_MAKECHAR(g_c_csShowPrivateVariable),
SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile,
SCR_EF_SvL0_Scanf,
2,
"%d",
(int) m_pclBrain -> m_bShowPrivateVariable);
SCR_M_SvL0_SaveBlankLine(p_stFile);
//END ROMTEAM Cristi Petrescu 98-06-
//--------------------------------------------
//---------------------------------------------------------------------
//Saves all MS
csCurrentLine = "___________________ Group Separator ___________________";
BOOL bReturn = TRUE;
EdActors_ActorMiniStructureList *pclCurrentGroup;
POSITION pos = m_clListOfAMSLists.GetHeadPosition();
while ( (pos != NULL) && (bReturn) )
{
SCR_M_SvL0_SaveComment(p_stFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveBlankLine(p_stFile);
pclCurrentGroup = m_clListOfAMSLists.GetNext(pos);
bReturn = m_fn_bSaveMSList(p_stFile, pclCurrentGroup);
}
if ( !bReturn )
{
CString csMessage = "There was a problem to save Editor Actor Model\ncalled ' ";
csMessage += m_fn_csGetActorName() + " ',\nin the MS save process, in the group :\n";
csMessage += pclCurrentGroup->m_fn_csGetGroupScriptName();
EdActors_InformationDialog dial(&g_oBaseFrame, csMessage);
dial.DoModal();
}
//Closes file's main section
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
}
////////////////////////////////
// Actors : Saving functions //
////////////////////////////////
//*************************************************************************
BOOL EdActors_EditorActor::m_fn_bSaveMSList(SCRIPT_tdstSaveFile *p_tdstScriptFile,
EdActors_ActorMiniStructureList *mclMSList)
{
BOOL bReturn = TRUE;
POSITION pos = mclMSList->GetHeadPosition();
while ( (pos != NULL) && (bReturn) )
{
bReturn = mclMSList->GetNext(pos)->m_fn_bSaveMS(p_tdstScriptFile, mclMSList->m_fn_csGetGroupScriptName());
SCR_M_SvL0_SaveBlankLine(p_tdstScriptFile);
}
return bReturn;
}
//////////////////////////
// MS : Saving function //
//////////////////////////
//*************************************************************************
BOOL EdActors_ActorMiniStructure::m_fn_bSaveMS(SCRIPT_tdstSaveFile *p_tdstScriptFile,
CString csGroupScriptName)
{
BOOL bReturn = TRUE;
char *a_szParams_3;
if ( m_fn_bIsAllocated() )
a_szParams_3 = (char *)LPCTSTR(g_c_csAllocatedMS);
else
a_szParams_3 = (char *)LPCTSTR(g_c_csNotAllocatedMS);
CString csSection;
csSection.Format("%s:%s(%s,%s)", g_c_csMSSection,
m_fn_csGetScriptName(),
csGroupScriptName,
a_szParams_3);
SCR_M_SvL0_SaveBeginSection(p_tdstScriptFile,
M_MAKECHAR(csSection),
SCR_CC_C_Cfg_EOL);
if ( m_fn_bIsAllocated() )
{
POSITION pos = m_pclDataList->GetHeadPosition();
while ( pos != NULL )
OAC_fn_bSaveData(p_tdstScriptFile, m_pclDataList->GetNext(pos));
}
//Closes MS Section
SCRIPT_vSaveEndSection(p_tdstScriptFile);
return bReturn;
}
//////////////////////////////////////////
// Datas : Saving & Loading functions //
//////////////////////////////////////////
//************************************************************************
BOOL OAC_fn_bSaveData(SCRIPT_tdstSaveFile *p_tdstScriptFile,
CTL_Editor_Data *_pclData)
{
BOOL bReturn = TRUE;
//Saves Data
////////////////////////////
char *a_szParams[64]; //Limit to 64 parameters !!!
////////////////////////////
switch ( OAC_fn_tdeGetLink(_pclData) )
{
case OAC_LINK_MODE__LINKED:
a_szParams[0] = (char *)LPCTSTR(g_c_csLinkedField);
break;
case OAC_LINK_MODE__NOT_LINKED:
a_szParams[0] = (char *)LPCTSTR(g_c_csNotLinkedField);
break;
case OAC_LINK_MODE__ALWAYS_LINKED:
a_szParams[0] = (char *)LPCTSTR(g_c_csAlwaysLinkedField);
break;
case OAC_LINK_MODE__NEVER_LINKED:
a_szParams[0] = (char *)LPCTSTR(g_c_csNeverLinkedField);
break;
default:
bReturn = FALSE;
break;
}
CStringList *pcslParams = _pclData->m_fn_pcslFormatDataValueString();
long c_lI = 1; //Param #0 is reserved !!
POSITION pos = pcslParams->GetHeadPosition();
while ( pos != NULL )
{
a_szParams[c_lI] = (char *)LPCTSTR(pcslParams->GetNext(pos));
c_lI ++;
}
SCR_M_SvL0_SaveEntry( p_tdstScriptFile,
M_MAKECHAR(_pclData->m_pub_fn_csGetDataName()),
SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_AP(p_tdstScriptFile,
SCR_EF_SvL0_Normal,
c_lI,
a_szParams);
return bReturn;
}
// Shaitan => state list in the level
//////////////////////
// Save State List //
//////////////////////
//************************************************************************
void EdActors_MyDocument::s_m_fn_vCallBackSaveStateList (SCR_tdst_File_Description *_p_stFile,
char *_p_szSectionName,
void *_p_vData,
SCR_tde_Ntfy_Action _eAction)
{
CPA_Family *pFamily = (CPA_Family *) _p_vData;
CPA_Action *pAction;
CPA_State *pState;
POSITION pos, pos1;
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
// save begin section
SCR_fn_v_RdL0_ComputeSectionName(szSectionName, NULL, C_SectionCreateListOfState, "");
SCR_M_SvL0_SaveBeginSection(_p_stFile, szSectionName, SCR_CC_C_Cfg_EOL);
// for each used action of the family
pos = pFamily->m_oListOfUsedActions.GetHeadPosition();
while (pos)
{
pAction = pFamily->m_oListOfUsedActions.GetNext(pos);
// for each state of the action
pos1 = pAction->m_oListOfStates.GetHeadPosition();
while (pos1)
{
pState = pAction->m_oListOfStates.GetNext(pos1);
// save entry
SCR_M_SvL0_SaveEntry(_p_stFile, C_Entry_State, SCR_CC_C_Cfg_NoChar);
// compute section name for state
sprintf(szFileName, "%s\\%s.sta", pFamily->GetName(), pFamily->GetName());
SCR_fn_v_RdL0_ComputeSectionName(szSectionName, szFileName, C_SectionCreateNewState, (char *) (LPCSTR) pState->GetName());
// save parameter
SCR_fn_v_SvL0_SaveParameters_MP(_p_stFile, SCR_EF_SvL0_Scanf, 1, "%s", szSectionName);
}
}
SCR_M_SvL0_SaveEndSection(_p_stFile, SCR_CC_C_Cfg_EOL);
}
// End Shaitan => state list in the level
// Shaitan => module list in the level
//////////////////////
// Save PO List //
//////////////////////
//************************************************************************
void EdActors_MyDocument::s_m_fn_vCallBackSavePOList (SCR_tdst_File_Description *_p_stFile,
char *_p_szSectionName,
void *_p_vData,
SCR_tde_Ntfy_Action _eAction)
{
CPA_Family *pFamily = (CPA_Family *) _p_vData;
CPA_BaseObject *pPO;
POSITION pos;
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
// save begin section
SCR_fn_v_RdL0_ComputeSectionName(szSectionName, NULL, C_SectionCreateListOfPOs, "");
SCR_M_SvL0_SaveBeginSection(_p_stFile, szSectionName, SCR_CC_C_Cfg_EOL);
// for each used action of the family
pos = pFamily->m_oListOfUsedPOs.GetHeadPosition();
while (pos)
{
pPO = pFamily->m_oListOfUsedPOs.GetNext(pos);
// save entry
SCR_M_SvL0_SaveEntry(_p_stFile, C_Entry_LoadPO, SCR_CC_C_Cfg_NoChar);
// save parameter
SCR_fn_v_SvL0_SaveParameters_MP(_p_stFile, SCR_EF_SvL0_Scanf, 1, "%s", (char *) (LPCSTR) ((CPA_SaveObject *)pPO)->GetReferencedSectionName());
}
SCR_M_SvL0_SaveEndSection(_p_stFile, SCR_CC_C_Cfg_EOL);
}
// End Shaitan => module list in the level
//////////////////////
// Save of FIX file //
//////////////////////
//************************************************************************
void EdActors_MyDocument::s_m_fn_vCallBackSaveFixFile(SCR_tdst_File_Description *_p_stFile,
char *_p_szSectionName,
void *_p_vData,
SCR_tde_Ntfy_Action _eAction)
{
const CString c_csPreLoadSection_EntryName = "PreloadSection";
const CString c_csSecondPassForCharacter_EntryName = "SecondPassForCharacter";
//Begins main Section
SCR_M_SvL0_SaveBeginSection(_p_stFile,
"PreloadSectionInFix:Characters",
SCR_CC_C_Cfg_EOL);
//Recurses for all Instances
g_pclInterface->m_clDocument.m_pri_fn_vSaveAllActorsInFixFile(_p_stFile, &g_pclInterface->m_clDocument.m_clInstancesList, c_csPreLoadSection_EntryName);
//Recurses for all Always
g_pclInterface->m_clDocument.m_pri_fn_vSaveAllActorsInFixFile(_p_stFile, &g_pclInterface->m_clDocument.m_clAlwaysList, c_csPreLoadSection_EntryName);
SCR_M_SvL0_SaveBlankLine(_p_stFile);
//Recurses for all Instances
g_pclInterface->m_clDocument.m_pri_fn_vSaveAllActorsInFixFile(_p_stFile, &g_pclInterface->m_clDocument.m_clInstancesList, c_csSecondPassForCharacter_EntryName);
//Recurses for all Always
g_pclInterface->m_clDocument.m_pri_fn_vSaveAllActorsInFixFile(_p_stFile, &g_pclInterface->m_clDocument.m_clAlwaysList, c_csSecondPassForCharacter_EntryName);
//Closes main Section
SCRIPT_vSaveEndSection(_p_stFile);
}
//************************************************************************
void EdActors_MyDocument::m_pri_fn_vSaveAllActorsInFixFile(SCR_tdst_File_Description *_p_stFile,
CPA_BaseObjectList *_pclList,
CString _csEntryName)
{
//Recurses for all Actors...
//... for 'PreloadSection' entries
CPA_Actor *pclCurrentActor;
Position pos = _pclList->GetHeadPosition();
while ( pos != 0 )
{
pclCurrentActor = (CPA_Actor *)_pclList->GetNext(pos);
if ( (pclCurrentActor->m_fn_bIsAnInstance()) && (pclCurrentActor->m_pub_fn_bIsInFix()) )
{
SCR_M_SvL0_SaveEntry( _p_stFile,
M_MAKECHAR(_csEntryName),
SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(_p_stFile,
SCR_EF_SvL0_Scanf,
2,
"%s",
M_MAKECHAR(pclCurrentActor->GetReferencedSectionName()));
}
}
}