Files
FC1/Editor/AnimationSerializer.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

100 lines
2.7 KiB
C++

#include "StdAfx.h"
#include "animationserializer.h"
#include "cryeditdoc.h"
#include "mission.h"
#include "IMovieSystem.h"
#include "Util\PakFile.h"
CAnimationSerializer::CAnimationSerializer(void)
{
}
CAnimationSerializer::~CAnimationSerializer(void)
{
}
//////////////////////////////////////////////////////////////////////////
void CAnimationSerializer::SaveSequence( IAnimSequence *seq,const char *szFilePath, bool bSaveEmpty )
{
assert( seq != 0 );
XmlNodeRef sequenceNode = new CXmlNode( "Sequence" );
seq->Serialize( sequenceNode,false, false );
sequenceNode->saveToFile( szFilePath );
}
IAnimSequence* CAnimationSerializer::LoadSequence( const char *szFilePath )
{
IAnimSequence *seq = 0;
XmlParser parser;
XmlNodeRef sequenceNode = parser.parse( szFilePath );
if (sequenceNode)
{
seq = GetIEditor()->GetMovieSystem()->LoadSequence( sequenceNode );
}
return seq;
}
//////////////////////////////////////////////////////////////////////////
void CAnimationSerializer::SaveAllSequences( const char *szPath,CPakFile &pakFile )
{
IMovieSystem *movSys = GetIEditor()->GetMovieSystem();
XmlNodeRef movieNode=new CXmlNode("MovieData");
for (int i=0;i<GetIEditor()->GetDocument()->GetMissionCount();i++)
{
CMission *pMission=GetIEditor()->GetDocument()->GetMission(i);
pMission->ExportAnimations(movieNode);
}
string sFilename=string(szPath)+"MovieData.xml";
//movieNode->saveToFile(sFilename.c_str());
XmlString xml = movieNode->getXML();
CMemFile file;
file.Write( xml.c_str(),xml.length() );
pakFile.UpdateFile( sFilename.c_str(),file );
}
//////////////////////////////////////////////////////////////////////////
void CAnimationSerializer::LoadAllSequences( const char *szPath )
{
CString dir = Path::AddBackslash(szPath);
std::vector<CFileUtil::FileDesc> files;
CFileUtil::ScanDirectory( dir,"*.seq",files,false );
for (int i = 0; i < files.size(); i++)
{
// Construct the full filepath of the current file
LoadSequence( dir + files[i].filename );
}
}
//////////////////////////////////////////////////////////////////////////
void CAnimationSerializer::SerializeSequences( XmlNodeRef &xmlNode,bool bLoading )
{
if (bLoading)
{
// Load.
IMovieSystem *movSys = GetIEditor()->GetMovieSystem();
movSys->RemoveAllSequences();
int num = xmlNode->getChildCount();
for (int i = 0; i < num; i++)
{
XmlNodeRef seqNode = xmlNode->getChild(i);
movSys->LoadSequence( seqNode );
}
}
else
{
// Save.
IMovieSystem *movSys = GetIEditor()->GetMovieSystem();
ISequenceIt *It=movSys->GetSequences();
IAnimSequence *seq=It->first();
while (seq)
{
XmlNodeRef seqNode = xmlNode->newChild( "Sequence" );
seq->Serialize( seqNode,false );
seq=It->next();
}
It->Release();
}
}