eliminate redundant INI read

This commit is contained in:
Chris Danford
2005-01-17 00:58:07 +00:00
parent 99afe19780
commit 8771872ac7
2 changed files with 18 additions and 20 deletions
+16 -19
View File
@@ -34,21 +34,9 @@ static bool CompareLayerNames( const CString& s1, const CString& s2 )
return i1 < i2;
}
void BGAnimation::AddLayersFromAniDir( const CString &_sAniDir, vector<Actor*> &layersAddTo, bool bGeneric )
void BGAnimation::AddLayersFromAniDir( const CString &_sAniDir, const IniFile& ini, bool bGeneric )
{
if( _sAniDir.empty() )
return;
CString sAniDir = _sAniDir;
if( sAniDir.Right(1) != "/" )
sAniDir += "/";
ASSERT_M( IsADirectory(sAniDir), sAniDir + " isn't a directory" );
CString sPathToIni = sAniDir + "BGAnimation.ini";
IniFile ini;
ini.ReadFile( sPathToIni );
const CString& sAniDir = _sAniDir;
{
CString expr;
@@ -90,14 +78,24 @@ void BGAnimation::AddLayersFromAniDir( const CString &_sAniDir, vector<Actor*> &
sImportDir = sAniDir + sImportDir;
CollapsePath( sImportDir );
AddLayersFromAniDir( sImportDir, layersAddTo, bGeneric );
if( sImportDir.Right(1) != "/" )
sImportDir += "/";
ASSERT_M( IsADirectory(sImportDir), sImportDir + " isn't a directory" );
CString sPathToIni = sImportDir + "BGAnimation.ini";
IniFile ini2;
ini2.ReadFile( sPathToIni );
AddLayersFromAniDir( sImportDir, ini2, bGeneric );
}
else
{
// import as a single layer
BGAnimationLayer* pLayer = new BGAnimationLayer( bGeneric );
pLayer->LoadFromNode( sAniDir, *pKey );
layersAddTo.push_back( pLayer );
this->AddChild( pLayer );
}
}
}
@@ -121,11 +119,10 @@ void BGAnimation::LoadFromAniDir( const CString &_sAniDir, bool bGeneric )
if( DoesFileExist(sPathToIni) )
{
// This is a new style BGAnimation (using .ini)
IniFile ini;
ini.ReadFile( sPathToIni );
AddLayersFromAniDir( sAniDir, m_SubActors, bGeneric ); // TODO: Check for circular load
AddLayersFromAniDir( sAniDir, ini, bGeneric ); // TODO: Check for circular load
XNode* pBGAnimation = ini.GetChild( "BGAnimation" );
XNode dummy;
@@ -146,7 +143,6 @@ void BGAnimation::LoadFromAniDir( const CString &_sAniDir, bool bGeneric )
}
LoadFromNode( sAniDir, *pBGAnimation );
}
else
{
@@ -197,6 +193,7 @@ void BGAnimation::LoadFromNode( const CString &sDir, const XNode& node )
cmd.Load( "PlayCommand,Init" );
this->RunCommandOnChildren( cmd );
/* Backwards-compatibility: if a "LengthSeconds" value is present, create a dummy
* actor that sleeps for the given length of time. This will extend GetTweenTimeLeft. */
float fLengthSeconds = 0;
+2 -1
View File
@@ -8,6 +8,7 @@
#include "ActorScroller.h"
struct XNode;
class IniFile;
class BGAnimation : public ActorScroller
{
@@ -21,7 +22,7 @@ public:
void LoadFromNode( const CString &sDir, const XNode& node );
protected:
static void AddLayersFromAniDir( const CString &_sAniDir, vector<Actor*> &layersAddTo, bool bGeneric );
void AddLayersFromAniDir( const CString &_sAniDir, const IniFile& ini, bool bGeneric );
};
#endif