diff --git a/stepmania/src/ActorFrame.cpp b/stepmania/src/ActorFrame.cpp index e57eff355f..b484ceab81 100644 --- a/stepmania/src/ActorFrame.cpp +++ b/stepmania/src/ActorFrame.cpp @@ -69,6 +69,9 @@ ActorFrame::ActorFrame( const ActorFrame &cpy ): void ActorFrame::LoadFromNode( const CString& sDir, const XNode* pNode ) { + if( AutoLoadChildren() ) + LoadChildrenFromNode( sDir, pNode ); + Actor::LoadFromNode( sDir, pNode ); pNode->GetAttrValue( "UpdateRate", m_fUpdateRate ); diff --git a/stepmania/src/ActorFrame.h b/stepmania/src/ActorFrame.h index 7568ee07da..2e1203a1ff 100644 --- a/stepmania/src/ActorFrame.h +++ b/stepmania/src/ActorFrame.h @@ -13,7 +13,6 @@ public: virtual ~ActorFrame(); void LoadFromNode( const CString& sDir, const XNode* pNode ); - void LoadChildrenFromNode( const CString& sDir, const XNode* pNode ); virtual Actor *Copy() const; virtual void AddChild( Actor* pActor ); @@ -27,6 +26,7 @@ public: void SortByDrawOrder(); void SetDrawByZPosition( bool b ); + virtual bool AutoLoadChildren() const { return false; } // derived classes override to automatically LoadChildrenFromNode void DeleteChildrenWhenDone( bool bDelete=true ) { m_bDeleteChildren = bDelete; } void DeleteAllChildren(); @@ -66,6 +66,8 @@ public: void RunCommands( const apActorCommands& cmds, Actor *pParent = NULL ) { this->RunCommands( *cmds, pParent ); } // convenience protected: + void LoadChildrenFromNode( const CString& sDir, const XNode* pNode ); + vector m_SubActors; bool m_bPropagateCommands; bool m_bDeleteChildren; @@ -84,12 +86,7 @@ class ActorFrameAutoDeleteChildren : public ActorFrame { public: ActorFrameAutoDeleteChildren() { DeleteChildrenWhenDone(true); } - void LoadFromNode( const CString& sDir, const XNode* pNode ) - { - ActorFrame::LoadFromNode( sDir, pNode ); - - LoadChildrenFromNode( sDir, pNode ); - } + virtual bool AutoLoadChildren() const { return true; } virtual Actor *Copy() const; }; diff --git a/stepmania/src/ActorScroller.h b/stepmania/src/ActorScroller.h index 3d56d4a2ef..fac6428238 100644 --- a/stepmania/src/ActorScroller.h +++ b/stepmania/src/ActorScroller.h @@ -78,15 +78,7 @@ class ActorScrollerAutoDeleteChildren : public ActorScroller { public: ActorScrollerAutoDeleteChildren() { DeleteChildrenWhenDone(true); } - void LoadFromNode( const CString& sDir, const XNode* pNode ) - { - // Load children. ActorScroller doesn't do this, because it - // can be a base class for other objects that don't want to load - // from . - LoadChildrenFromNode( sDir, pNode ); - - ActorScroller::LoadFromNode( sDir, pNode ); - } + virtual bool AutoLoadChildren() const { return true; } virtual Actor *Copy() const; }; diff --git a/stepmania/src/DynamicActorScroller.h b/stepmania/src/DynamicActorScroller.h index 49d18706cf..a89672122b 100644 --- a/stepmania/src/DynamicActorScroller.h +++ b/stepmania/src/DynamicActorScroller.h @@ -23,15 +23,7 @@ class DynamicActorScrollerAutoDeleteChildren: public DynamicActorScroller { public: DynamicActorScrollerAutoDeleteChildren() { DeleteChildrenWhenDone(true); } - void LoadFromNode( const CString& sDir, const XNode* pNode ) - { - // Load children. ActorScroller doesn't do this, because it - // can be a base class for other objects that don't want to load - // from . - LoadChildrenFromNode( sDir, pNode ); - - DynamicActorScroller::LoadFromNode( sDir, pNode ); - } + virtual bool AutoLoadChildren() const { return true; } virtual Actor *Copy() const; };