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

289 lines
12 KiB
C++

#include "StdAfx.h"
#include "ACP_Base.h"
#include "TAC.h"
#include "TFa.h"
#include "ITF.h"
#include "IncMEC.h"
#define D_State_Define
#include "IncGAM.h"
#undef D_State_Define
#include "GLI.h"
#include "GAM\MainChar.h"
#include "EDACDoc.hpp"
#include "EDACStrg.hpp"
#include "_AInterf.hpp"
#include "EDACGlob.hpp"
#include "EDACMISv.hpp"
#include "ErO.h"
#undef CPA_WANTS_IMPORT
#undef CPA_EXPORT
#define CPA_WANTS_EXPORT
#include "_Actors.hpp"
#undef CPA_WANTS_EXPORT
#define CPA_WANTS_IMPORT
#define C_SAVE_CURRENT_POS 2
#define C_SAVE_INITIAL_POS 0
#define C_SAVE_POS C_SAVE_INITIAL_POS
//#define C_SAVE_POS C_SAVE_CURRENT_POS
/////////////////////////////////////
// Motor Levels : Saving functions //
/////////////////////////////////////
//*************************************************************************
// Motor Level Saving Function
//*************************************************************************
void EdActors_MyDocument::m_fn_vSaveMotorLevel(SCR_tdst_File_Description *p_tdstFile,
CString csSectionName,
SCR_tde_Ntfy_Action _eAction)
{
//Jumps to the end of the File, if Section does not exist
if ( _eAction == SCR_EA_Ntfy_AddSection )
SCR_fn_v_SvL1_ToEndSection(p_tdstFile);
//Gets info on the file
BOOL bLevelFile;
CString csLevelName;
CString csFileName = p_tdstFile->a_szFileName;
// short wIndex = csFileName.ReverseFind('\\');
CString csExtension(C_ScriptLevelSuffixe);
CString csRealExtension = csFileName.Right(csExtension.GetLength());
if ( csRealExtension.CompareNoCase(csExtension) == 0 )
bLevelFile = TRUE;
else
bLevelFile = FALSE;
CString csCurrentLine;
//Extracts Actors name from Section
//(this is the name of the Actor which caused this Notification to be raised)
CString csActorName = csSectionName;
short wIndex = csActorName.ReverseFind(':');
ERROR_ASSERT( wIndex != -1 );
csActorName = csActorName.Right(csActorName.GetLength() - wIndex - 1);
BOOL bMustSaveThisOne;
BOOL bActorFound = FALSE;
CPA_Actor *pclCurrentActor;
HIE_tdxHandleToSuperObject h_MotorActorSO;
CPA_BaseObjectList *pclConcernedList = ( bLevelFile ) ? &(g_pclInterface->m_clDocument.m_clInstancesList)
: &(g_pclInterface->m_clDocument.m_clAlwaysList);
Position pos = pclConcernedList->GetHeadPosition();
while ( ( pos != 0 ) && ( !bActorFound ) )
{
//Gets the Actor
pclCurrentActor = (CPA_Actor *)pclConcernedList->GetNext(pos);
h_MotorActorSO = pclCurrentActor->m_pub_fn_hGetMotorSuperObject();
bMustSaveThisOne = ( HIE_fn_ulGetSuperObjectType(h_MotorActorSO) == HIE_C_ulActor )
&& ( ( (bLevelFile) && (!pclCurrentActor->m_fn_bIsAnAlways()) )
|| ( (!bLevelFile) && (pclCurrentActor->m_fn_bIsAnAlways()) )
);
if ( bMustSaveThisOne )
{
bActorFound = ( csActorName.Compare(pclCurrentActor->GetName()) == 0 );
if ( bActorFound )
{
CString csAction = bLevelFile ? C_SectionLevelCharacters : C_SectionLevelAlways;
csCurrentLine.Format("%s:%s", csAction,
pclCurrentActor->GetName());
if /*( MC_fn_ucIsCharacterInMainCharacterList(h_MotorActorSO) ) */
((*fn_p_ulStdGameGetCustomBitsInit(M_GetMSHandle(h_MotorActorSO,StandardGame)))&GAM_C_CustBitRayman)
{
SCR_M_SvL0_SaveBeginSection(p_tdstFile, M_MAKECHAR(csCurrentLine), SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Normal, 2, C_LevelPrincipalCharacter, C_LevelCharacterLauchingSounds);
}
else if ( h_MotorActorSO == g_stEngineStructure.h_StdCamCaracter )
{
SCR_M_SvL0_SaveBeginSection(p_tdstFile, M_MAKECHAR(csCurrentLine), SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Normal, 1, C_LevelStandardCamera);
}
else
{
SCR_M_SvL0_SaveBeginSection(p_tdstFile, M_MAKECHAR(csCurrentLine), SCR_CC_C_Cfg_EOL);
}
//*** Link character ***
SCR_M_SvL0_SaveEntry(p_tdstFile, C_LevelLinkCharacters, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Normal, 1,
M_MAKECHAR(pclCurrentActor->GetReferencedSectionName()));
if ( bLevelFile )
{
// ANNECY MT - 19/11/98 {
//*** In All SubMaps ??? ***
if ( pclCurrentActor -> m_pub_fn_bIsInAllSubMaps() )
{
SCR_M_SvL0_SaveEntry(p_tdstFile, C_LevelCharacterIsInAllSubmap, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Normal, 1, "");
}
// END ANNECY MT }
//*** character's positions *** (CURRENT Positions)
SCR_M_SvL0_SaveEntry(p_tdstFile,C_LevelCharacterMatrixTranslation,SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Scanf,4,
"%f,%f,%f",
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 0,0,0),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 0,0,1),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 0,0,2)
);
SCR_M_SvL0_SaveEntry(p_tdstFile,C_LevelCharacterMatrixRotation,SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Scanf,10,
"%f,%f,%f,%f,%f,%f,%f,%f,%f",
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,0,0),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,0,1),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,0,2),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,1,0),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,1,1),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,1,2),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,2,0),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,2,1),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 1,2,2)
);
SCR_M_SvL0_SaveEntry(p_tdstFile,C_LevelCharacterMatrixScale,SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Scanf,10,
"%f,%f,%f,%f,%f,%f,%f,%f,%f",
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,0,0),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,0,1),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,0,2),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,1,0),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,1,1),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,1,2),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,2,0),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,2,1),
fn_v3dDataGetMatrixElement(M_GetMSHandle(h_MotorActorSO,3dData),C_SAVE_POS, 2,2,2)
);
}
//*** Always Active ***
if ( (!pclCurrentActor->m_fn_bIsAnAlways()) /*&& (!pclCurrentActor->m_fn_bIsTheWorldActor())*/ )
if ( fn_bGetIfCharacterIsInAlwaysActiveCharacterList(h_MotorActorSO) )
{
SCR_M_SvL0_SaveEntry(p_tdstFile, C_LevelCharacterIsAlwaysActive, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Normal, 1, "");
}
//ANNECY Shaitan SPOFlags 19/02/98
//*** SPO Flags ***
unsigned long ulFlags = HIE_fn_SO_ulGetFlags(pclCurrentActor->m_pub_fn_pclGetSuperObject()->GetStruct());
SCR_M_SvL0_SaveEntry(p_tdstFile,C_LevelCharacterFlags,SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Scanf,1, "%d", ulFlags);
//ENDANNECY Shaitan SPOFlags
//ANNECY Shaitan Transparency (26/03/98) {
//*** Transparency ***
float fTransparency = HIE_fn_fGetSuperObjectTransparenceLevel(pclCurrentActor->m_pub_fn_pclGetSuperObject()->GetStruct());
SCR_M_SvL0_SaveEntry(p_tdstFile,C_LevelCharacterTransparency,SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_tdstFile, SCR_EF_SvL0_Scanf,1, "%f", fTransparency);
//ENDANNECY Shaitan Transparency }
SCR_M_SvL0_SaveEndSection(p_tdstFile, SCR_CC_C_Cfg_EOL);
}
}
}
EDACTORS_fn_vGiveProgressInfo("Motor Level saved by Actors Editor ...", -1);
}
////////////////////////////////////////
// Motor Instances : Saving functions //
////////////////////////////////////////
//*************************************************************************
// Motor Instances Saving Function
//*************************************************************************
void EdActors_MyDocument::m_fn_vSaveMotorInstance(SCR_tdst_File_Description *p_tdstFile,
CPA_Actor *p_clActor)
{
//Saves Scripts header
SCR_M_SvL0_SaveScriptFileHeader(p_tdstFile);
//Actors Editor header
CString csNextAndPreviousLine = "+++++++++++++++++++++++++++++++++++++++++++";
CString csCurrentLine = "+ Actors Editor +";
SCR_M_SvL0_SaveComment(p_tdstFile, M_MAKECHAR(csNextAndPreviousLine));
SCR_M_SvL0_SaveComment(p_tdstFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveComment(p_tdstFile, M_MAKECHAR(csNextAndPreviousLine));
csCurrentLine = "+ Version " + g_pclInterface->m_fn_csGetEditorVersion() + " +";
SCR_M_SvL0_SaveComment(p_tdstFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveBlankLine(p_tdstFile);
//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_tdstFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveComment(p_tdstFile, M_MAKECHAR(csNextAndPreviousLine));
SCR_M_SvL0_SaveBlankLine(p_tdstFile);
csCurrentLine.Format("########### Actor %s ###########", p_clActor->GetName());
csNextAndPreviousLine = "######################";
while ( csNextAndPreviousLine.GetLength() < csCurrentLine.GetLength() )
csNextAndPreviousLine += '#';
SCR_M_SvL0_SaveComment(p_tdstFile, M_MAKECHAR(csNextAndPreviousLine));
SCR_M_SvL0_SaveComment(p_tdstFile, M_MAKECHAR(csCurrentLine));
SCR_M_SvL0_SaveComment(p_tdstFile, M_MAKECHAR(csNextAndPreviousLine));
SCR_M_SvL0_SaveBlankLine(p_tdstFile);
//Begins section
csCurrentLine = CString(C_SectionOneCharacters) + ':' + p_clActor->GetName();
SCR_M_SvL0_SaveBeginSection(p_tdstFile,
M_MAKECHAR(csCurrentLine),
SCR_CC_C_Cfg_EOL);
//Saves all MS
m_fn_vSaveAllMSOfMotorInstance(p_tdstFile, p_clActor);
//End section
SCR_M_SvL0_SaveEndSection(p_tdstFile, SCR_CC_C_Cfg_EOL);
}
//*************************************************************************
void EdActors_MyDocument::m_fn_vSaveAllMSOfMotorInstance( SCR_tdst_File_Description *p_tdstFile,
CPA_Actor *p_clActor)
{
struct tdstEngineObject_ *p_tdstObject = (struct tdstEngineObject_ *)p_clActor->GetData();
//Saves all MS
///////////////////////////////////////
// BE CAREFUL : Order is important ! //
///////////////////////////////////////
ED_ACTORS_fn_v3dDataSaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vStdGameSaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vBrainSaveMiniStructure(p_clActor,p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vDynamSaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vCineinfoSaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vCollSetSaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vSectInfoSaveMiniStructure(p_tdstFile, p_tdstObject);
//ANNECY BBB 20/10/97 {
ED_ACTORS_fn_vAnimEffectSaveMiniStructure(p_tdstFile, p_tdstObject);
//ENDANNECY BBB 20/10/97 }
ED_ACTORS_fn_vMicroSaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vMSWaySaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vLightSaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vPrtSourceSaveMiniStructure(p_tdstFile, p_tdstObject);
ED_ACTORS_fn_vSoundSaveMiniStructure(p_tdstFile, p_tdstObject);
// CHINA QZY (MT) 26/02/98 {
ED_ACTORS_fn_vMagnetSaveMiniStructure(p_tdstFile, p_tdstObject);
// CHINA QZY }
}