diff --git a/stepmania/src/Actor.cpp b/stepmania/src/Actor.cpp index 57d54bfbf5..e64a673f72 100644 --- a/stepmania/src/Actor.cpp +++ b/stepmania/src/Actor.cpp @@ -18,6 +18,8 @@ float Actor::g_fCurrentBGMTime = 0, Actor::g_fCurrentBGMBeat; +Actor *Actor::Copy() const { return new Actor(*this); } + static float g_fCabinetLights[NUM_CABINET_LIGHTS]; void Actor::SetBGMTime( float fTime, float fBeat ) diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index ec8e6b0808..85e1ab0204 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -28,6 +28,7 @@ class Actor : public IMessageSubscriber public: Actor(); virtual ~Actor(); + virtual Actor *Copy() const; void UnsubcribeAndClearCommands(); virtual void Reset(); void LoadFromNode( const CString& sDir, const XNode* pNode ); diff --git a/stepmania/src/ActorFrame.cpp b/stepmania/src/ActorFrame.cpp index c9721c0173..329d9e0873 100644 --- a/stepmania/src/ActorFrame.cpp +++ b/stepmania/src/ActorFrame.cpp @@ -17,6 +17,7 @@ */ //REGISTER_ACTOR_CLASS( ActorFrame ) REGISTER_ACTOR_CLASS_WITH_NAME( ActorFrameAutoDeleteChildren, ActorFrame ) +Actor *ActorFrame::Copy() const { return new ActorFrame(*this); } ActorFrame::ActorFrame() diff --git a/stepmania/src/ActorFrame.h b/stepmania/src/ActorFrame.h index 9b596ee322..592938ae7d 100644 --- a/stepmania/src/ActorFrame.h +++ b/stepmania/src/ActorFrame.h @@ -13,6 +13,7 @@ public: 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 ); virtual void RemoveChild( Actor* pActor ); @@ -88,6 +89,7 @@ public: LoadChildrenFromNode( sDir, pNode ); } + virtual Actor *Copy() const; }; #endif diff --git a/stepmania/src/ActorScroller.cpp b/stepmania/src/ActorScroller.cpp index 6d3eafc772..61c203cdb5 100644 --- a/stepmania/src/ActorScroller.cpp +++ b/stepmania/src/ActorScroller.cpp @@ -16,6 +16,7 @@ */ //REGISTER_ACTOR_CLASS( ActorScroller ) REGISTER_ACTOR_CLASS_WITH_NAME( ActorScrollerAutoDeleteChildren, ActorScroller ) +Actor *ActorScroller::Copy() const { return new ActorScroller(*this); } ActorScroller::ActorScroller() diff --git a/stepmania/src/ActorScroller.h b/stepmania/src/ActorScroller.h index 46be5d4350..526fd33a77 100644 --- a/stepmania/src/ActorScroller.h +++ b/stepmania/src/ActorScroller.h @@ -31,6 +31,7 @@ public: virtual void DrawPrimitives(); // DOES draw void LoadFromNode( const CString &sDir, const XNode *pNode ); + virtual Actor *Copy() const; void SetDestinationItem( float fItemIndex ) { m_fDestinationItem = fItemIndex; } void SetCurrentAndDestinationItem( float fItemIndex ) { m_fCurrentItem = m_fDestinationItem = fItemIndex; } @@ -79,6 +80,7 @@ public: ActorScroller::LoadFromNode( sDir, pNode ); } + virtual Actor *Copy() const; }; #endif diff --git a/stepmania/src/ActorUtil.h b/stepmania/src/ActorUtil.h index def347ea40..a4617e28fb 100644 --- a/stepmania/src/ActorUtil.h +++ b/stepmania/src/ActorUtil.h @@ -20,7 +20,8 @@ typedef Actor* (*CreateActorFn)(const CString& sDir, const XNode* pNode); public: \ Register##className() { ActorUtil::Register(#externalClassName,Create##className); } \ }; \ - static Register##className register##className; + static Register##className register##className; \ + Actor *className::Copy() const { return new className(*this); } #define REGISTER_ACTOR_CLASS( className ) REGISTER_ACTOR_CLASS_WITH_NAME( className, className ) diff --git a/stepmania/src/BGAnimation.h b/stepmania/src/BGAnimation.h index 6b1a4891d6..f087316f9e 100644 --- a/stepmania/src/BGAnimation.h +++ b/stepmania/src/BGAnimation.h @@ -20,6 +20,7 @@ public: void LoadFromAniDir( const CString &sAniDir, bool bGeneric=true ); void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; protected: void AddLayersFromAniDir( const CString &_sAniDir, const IniFile& ini, bool bGeneric ); diff --git a/stepmania/src/BitmapText.h b/stepmania/src/BitmapText.h index aeafd30a66..edbf950ca9 100644 --- a/stepmania/src/BitmapText.h +++ b/stepmania/src/BitmapText.h @@ -16,6 +16,7 @@ public: virtual ~BitmapText(); void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; bool LoadFromFont( const CString& sFontName ); bool LoadFromTextureAndChars( const CString& sTexturePath, const CString& sChars ); diff --git a/stepmania/src/DifficultyIcon.h b/stepmania/src/DifficultyIcon.h index f9a59e0009..e042a953c0 100644 --- a/stepmania/src/DifficultyIcon.h +++ b/stepmania/src/DifficultyIcon.h @@ -19,6 +19,7 @@ public: bool Load( CString sFilePath ); virtual void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; void SetFromSteps( PlayerNumber pn, const Steps* pSteps ); void SetFromTrail( PlayerNumber pn, const Trail* pTrail ); diff --git a/stepmania/src/DifficultyMeter.h b/stepmania/src/DifficultyMeter.h index 7e13f66ba5..6da9b28408 100644 --- a/stepmania/src/DifficultyMeter.h +++ b/stepmania/src/DifficultyMeter.h @@ -23,6 +23,7 @@ public: void Load( const CString &sType ); void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; void SetFromGameState( PlayerNumber pn ); void SetFromMeterAndDifficulty( int iMeter, Difficulty dc ); diff --git a/stepmania/src/FadingBanner.h b/stepmania/src/FadingBanner.h index 0cacec0f66..f142338ee0 100644 --- a/stepmania/src/FadingBanner.h +++ b/stepmania/src/FadingBanner.h @@ -11,6 +11,7 @@ class FadingBanner : public ActorFrame { public: FadingBanner(); + virtual Actor *Copy() const; void ScaleToClipped( float fWidth, float fHeight ); diff --git a/stepmania/src/HelpDisplay.h b/stepmania/src/HelpDisplay.h index 855a620f00..57a05d81b6 100644 --- a/stepmania/src/HelpDisplay.h +++ b/stepmania/src/HelpDisplay.h @@ -16,6 +16,7 @@ public: void Load( const CString &sType ); void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; void SetTips( const CStringArray &arrayTips ) { SetTips( arrayTips, arrayTips ); } void SetTips( const CStringArray &arrayTips, const CStringArray &arrayTipsAlt ); @@ -42,6 +43,7 @@ public: GenreDisplay(); ~GenreDisplay(); void PlayCommand( const CString &sCommandName, Actor* pParent ); + virtual Actor *Copy() const; }; #endif diff --git a/stepmania/src/MemoryCardDisplay.h b/stepmania/src/MemoryCardDisplay.h index 7840e3156a..82bdee3b04 100644 --- a/stepmania/src/MemoryCardDisplay.h +++ b/stepmania/src/MemoryCardDisplay.h @@ -13,6 +13,7 @@ public: MemoryCardDisplay(); void Load( PlayerNumber pn ); void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; void Update( float fDelta ); protected: diff --git a/stepmania/src/MeterDisplay.h b/stepmania/src/MeterDisplay.h index 66c2963fa9..6dcdce9432 100644 --- a/stepmania/src/MeterDisplay.h +++ b/stepmania/src/MeterDisplay.h @@ -12,6 +12,7 @@ public: MeterDisplay(); void Load( CString sStreamPath, float fStreamWidth, CString sTipPath ); virtual void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; void SetPercent( float fPercent ); @@ -26,6 +27,7 @@ class SongMeterDisplay: public MeterDisplay { public: virtual void Update( float fDeltaTime ); + virtual Actor *Copy() const; }; #endif diff --git a/stepmania/src/Model.h b/stepmania/src/Model.h index fa94a6cbca..e86fd49c24 100644 --- a/stepmania/src/Model.h +++ b/stepmania/src/Model.h @@ -17,6 +17,7 @@ class Model : public Actor public: Model(); virtual ~Model(); + virtual Actor *Copy() const; void Clear(); void Load( CString sFile ); diff --git a/stepmania/src/OptionIconRow.h b/stepmania/src/OptionIconRow.h index 9cc1a3bb85..b940f4485c 100644 --- a/stepmania/src/OptionIconRow.h +++ b/stepmania/src/OptionIconRow.h @@ -19,6 +19,7 @@ public: void Load(); virtual void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; void SetFromGameState( PlayerNumber pn ); // diff --git a/stepmania/src/Quad.h b/stepmania/src/Quad.h index 005683798b..facf3f5ba0 100644 --- a/stepmania/src/Quad.h +++ b/stepmania/src/Quad.h @@ -15,6 +15,7 @@ public: } void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; }; #endif diff --git a/stepmania/src/RollingNumbers.h b/stepmania/src/RollingNumbers.h index 72b843df6f..fc493f5eb3 100644 --- a/stepmania/src/RollingNumbers.h +++ b/stepmania/src/RollingNumbers.h @@ -11,6 +11,7 @@ public: RollingNumbers(); void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; virtual void Update( float fDeltaTime ); diff --git a/stepmania/src/ScoreDisplayAliveTime.h b/stepmania/src/ScoreDisplayAliveTime.h index 4b8220beaa..9daaea1aa9 100644 --- a/stepmania/src/ScoreDisplayAliveTime.h +++ b/stepmania/src/ScoreDisplayAliveTime.h @@ -17,6 +17,7 @@ public: virtual void Update( float fDelta ); void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; void PlayCommand( const CString &sCommandName, Actor* pParent ); diff --git a/stepmania/src/ScoreDisplayCalories.h b/stepmania/src/ScoreDisplayCalories.h index 85068f4687..0c9111b270 100644 --- a/stepmania/src/ScoreDisplayCalories.h +++ b/stepmania/src/ScoreDisplayCalories.h @@ -16,6 +16,7 @@ public: virtual void Update( float fDelta ); void LoadFromNode( const CString& sDir, const XNode* pNode ); + virtual Actor *Copy() const; void PlayCommand( const CString &sCommandName, Actor* pParent );