background assert -> warning. This fired, but I can't repro it and the assert didn't give useful data.

This commit is contained in:
Chris Danford
2005-06-14 05:21:48 +00:00
parent ca3667576c
commit 2276b03c55
4 changed files with 61 additions and 29 deletions
+12 -4
View File
@@ -23,6 +23,7 @@
#include "XmlFile.h"
#include "BackgroundUtil.h"
#include "song.h"
#include "RageFileDriverMemory.h"
ThemeMetric<float> LEFT_EDGE ("Background","LeftEdge");
ThemeMetric<float> TOP_EDGE ("Background","TopEdge");
@@ -250,9 +251,7 @@ void BackgroundImpl::Unload()
void BackgroundImpl::Layer::Unload()
{
for( map<BackgroundDef,Actor*>::iterator iter = m_BGAnimations.begin();
iter != m_BGAnimations.end();
iter++ )
FOREACHM( BackgroundDef, Actor*, m_BGAnimations, iter )
delete iter->second;
m_BGAnimations.clear();
m_aBGChanges.clear();
@@ -766,7 +765,16 @@ void BackgroundImpl::Layer::UpdateCurBGChange( const Song *pSong, float fLastMus
m_pFadingBGA = m_pCurrentBGA;
map<BackgroundDef,Actor*>::const_iterator iter = m_BGAnimations.find( change.m_def );
ASSERT( iter != m_BGAnimations.end() );
if( iter == m_BGAnimations.end() )
{
XNode *pNode = change.m_def.CreateNode();
RageFileObjMem f;
pNode->GetXML( f, NULL );
LOG->Warn( "Tried to switch to a background that was never loaded\n" + f.GetString() );
SAFE_DELETE( pNode );
return;
}
m_pCurrentBGA = iter->second;
if( m_pFadingBGA == m_pCurrentBGA )
+42
View File
@@ -7,6 +7,48 @@
#include "RageLog.h"
#include <set>
bool BackgroundDef::operator<( const BackgroundDef &other ) const
{
#define COMPARE(x) if( x < other.x ) return true; else if( x > other.x ) return false;
COMPARE( m_sEffect );
COMPARE( m_sFile1 );
COMPARE( m_sFile2 );
COMPARE( m_sColor1 );
COMPARE( m_sColor2 );
#undef COMPARE
return false;
}
bool BackgroundDef::operator==( const BackgroundDef &other ) const
{
return
m_sEffect == other.m_sEffect &&
m_sFile1 == other.m_sFile1 &&
m_sFile2 == other.m_sFile2 &&
m_sColor1 == other.m_sColor1 &&
m_sColor2 == other.m_sColor2;
}
XNode *BackgroundDef::CreateNode() const
{
XNode* pNode = new XNode;
pNode->m_sName = "BackgroundDef";
if( !m_sEffect.empty() )
pNode->AppendAttr( "Effect", m_sEffect );
if( !m_sFile1.empty() )
pNode->AppendAttr( "File1", m_sFile1 );
if( !m_sFile2.empty() )
pNode->AppendAttr( "File2", m_sFile2 );
if( !m_sColor1.empty() )
pNode->AppendAttr( "Color1", m_sColor1 );
if( !m_sColor2.empty() )
pNode->AppendAttr( "Color2", m_sColor2 );
return pNode;
}
const CString BACKGROUND_EFFECTS_DIR = "BackgroundEffects/";
const CString BACKGROUND_TRANSITIONS_DIR = "BackgroundTransitions/";
const CString BG_ANIMS_DIR = "BGAnimations/";
+6 -24
View File
@@ -4,6 +4,7 @@
#define BackgroundUtil_H
class Song;
struct XNode;
extern const CString RANDOM_BACKGROUND_FILE;
extern const CString NO_SONG_BG_FILE;
@@ -18,35 +19,16 @@ extern const CString SBT_CrossFade;
struct BackgroundDef
{
BackgroundDef()
{
}
bool operator<( const BackgroundDef &other ) const
{
#define COMPARE(x) if( x < other.x ) return true; else if( x > other.x ) return false;
COMPARE( m_sEffect );
COMPARE( m_sFile1 );
COMPARE( m_sFile2 );
COMPARE( m_sColor1 );
COMPARE( m_sColor2 );
#undef COMPARE
return false;
}
bool operator==( const BackgroundDef &other ) const
{
return
m_sEffect == other.m_sEffect &&
m_sFile1 == other.m_sFile1 &&
m_sFile2 == other.m_sFile2 &&
m_sColor1 == other.m_sColor1 &&
m_sColor2 == other.m_sColor2;
}
bool IsEmpty() { return m_sFile1.empty() && m_sFile2.empty(); }
bool operator<( const BackgroundDef &other ) const;
bool operator==( const BackgroundDef &other ) const;
bool IsEmpty() const { return m_sFile1.empty() && m_sFile2.empty(); }
CString m_sEffect; // "" == automatically choose
CString m_sFile1; // must not be ""
CString m_sFile2; // may be ""
CString m_sColor1; // "" == use default
CString m_sColor2; // "" == use default
XNode *CreateNode() const;
};
struct BackgroundChange
+1 -1
View File
@@ -515,7 +515,7 @@ char* XNode::Load( const char* pszXml, PARSEINFO *pi /*= &piDefault*/ )
//========================================================
bool XAttr::GetXML( RageFileBasic &f, DISP_OPT *opt ) const
{
return f.Write(m_sName + "='" + (opt->reference_value&&opt->entitys?opt->entitys->Entity2Ref(m_sValue):m_sValue) + "' ") != -1;
return f.Write(m_sName + "='" + (opt && opt->reference_value && opt->entitys ? opt->entitys->Entity2Ref(m_sValue) : m_sValue) + "' ") != -1;
}
//========================================================