split AutoActor into a separate file
This commit is contained in:
@@ -363,18 +363,6 @@ void ActorUtil::RunCommand( Actor& actor, const CString &sScreenName, const CStr
|
|||||||
actor.RunCommands( THEME->GetMetricA(sScreenName,actor.GetID()+sCommandName+"Command") );
|
actor.RunCommands( THEME->GetMetricA(sScreenName,actor.GetID()+sCommandName+"Command") );
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoActor::Load( const CString &sPath )
|
|
||||||
{
|
|
||||||
Unload();
|
|
||||||
m_pActor = ActorUtil::MakeActor( sPath );
|
|
||||||
}
|
|
||||||
|
|
||||||
void AutoActor::LoadAndSetName( const CString &sScreenName, const CString &sActorName )
|
|
||||||
{
|
|
||||||
Load( THEME->GetPathG(sScreenName,sActorName) );
|
|
||||||
m_pActor->SetName( sActorName );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (c) 2003-2004 Chris Danford
|
* (c) 2003-2004 Chris Danford
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* ActorScroller - ActorFrame that moves its children. */
|
||||||
|
|
||||||
#ifndef ActorUtil_H
|
#ifndef ActorUtil_H
|
||||||
#define ActorUtil_H
|
#define ActorUtil_H
|
||||||
|
|
||||||
@@ -6,11 +8,6 @@
|
|||||||
|
|
||||||
struct XNode;
|
struct XNode;
|
||||||
|
|
||||||
#define SET_XY( actor ) ActorUtil::SetXY( actor, m_sName )
|
|
||||||
#define ON_COMMAND( actor ) ActorUtil::OnCommand( actor, m_sName )
|
|
||||||
#define OFF_COMMAND( actor ) ActorUtil::OffCommand( actor, m_sName )
|
|
||||||
#define SET_XY_AND_ON_COMMAND( actor ) ActorUtil::SetXYAndOnCommand( actor, m_sName )
|
|
||||||
#define COMMAND( actor, command_name ) ActorUtil::RunCommand( actor, m_sName, command_name )
|
|
||||||
|
|
||||||
namespace ActorUtil
|
namespace ActorUtil
|
||||||
{
|
{
|
||||||
@@ -38,25 +35,12 @@ namespace ActorUtil
|
|||||||
Actor* MakeActor( const RageTextureID &ID );
|
Actor* MakeActor( const RageTextureID &ID );
|
||||||
};
|
};
|
||||||
|
|
||||||
// creates the appropriate Actor derivitive on load and
|
#define SET_XY( actor ) ActorUtil::SetXY( actor, m_sName )
|
||||||
// automatically deletes Actor on deconstruction.
|
#define ON_COMMAND( actor ) ActorUtil::OnCommand( actor, m_sName )
|
||||||
class AutoActor
|
#define OFF_COMMAND( actor ) ActorUtil::OffCommand( actor, m_sName )
|
||||||
{
|
#define SET_XY_AND_ON_COMMAND( actor ) ActorUtil::SetXYAndOnCommand( actor, m_sName )
|
||||||
public:
|
#define COMMAND( actor, command_name ) ActorUtil::RunCommand( actor, m_sName, command_name )
|
||||||
AutoActor() { m_pActor = NULL; }
|
|
||||||
~AutoActor() { Unload(); }
|
|
||||||
operator const Actor* () const { return m_pActor; }
|
|
||||||
operator Actor* () { return m_pActor; }
|
|
||||||
const Actor *operator->() const { return m_pActor; }
|
|
||||||
Actor *operator->() { return m_pActor; }
|
|
||||||
void Unload() { if(m_pActor) { delete m_pActor; m_pActor=NULL; } }
|
|
||||||
bool IsLoaded() const { return m_pActor != NULL; }
|
|
||||||
void Load( const CString &sPath );
|
|
||||||
void LoadAndSetName( const CString &sScreenName, const CString &sActorName );
|
|
||||||
|
|
||||||
protected:
|
|
||||||
Actor* m_pActor;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
#include "global.h"
|
||||||
|
#include "AutoActor.h"
|
||||||
|
#include "ThemeManager.h"
|
||||||
|
#include "Actor.h"
|
||||||
|
#include "ActorUtil.h"
|
||||||
|
|
||||||
|
void AutoActor::Unload()
|
||||||
|
{
|
||||||
|
delete m_pActor;
|
||||||
|
m_pActor=NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoActor::Load( const CString &sPath )
|
||||||
|
{
|
||||||
|
Unload();
|
||||||
|
m_pActor = ActorUtil::MakeActor( sPath );
|
||||||
|
}
|
||||||
|
|
||||||
|
void AutoActor::LoadAndSetName( const CString &sScreenName, const CString &sActorName )
|
||||||
|
{
|
||||||
|
Load( THEME->GetPathG(sScreenName,sActorName) );
|
||||||
|
m_pActor->SetName( sActorName );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) 2003-2004 Chris Danford
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||||
|
* whom the Software is furnished to do so, provided that the above
|
||||||
|
* copyright notice(s) and this permission notice appear in all copies of
|
||||||
|
* the Software and that both the above copyright notice(s) and this
|
||||||
|
* permission notice appear in supporting documentation.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||||
|
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||||
|
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||||
|
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/* ActorScroller - ActorFrame that moves its children. */
|
||||||
|
|
||||||
|
#ifndef AutoActor_H
|
||||||
|
#define AutoActor_H
|
||||||
|
|
||||||
|
class Actor;
|
||||||
|
|
||||||
|
// creates the appropriate Actor derivitive on load and
|
||||||
|
// automatically deletes Actor on deconstruction.
|
||||||
|
class AutoActor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AutoActor() { m_pActor = NULL; }
|
||||||
|
~AutoActor() { Unload(); }
|
||||||
|
operator const Actor* () const { return m_pActor; }
|
||||||
|
operator Actor* () { return m_pActor; }
|
||||||
|
const Actor *operator->() const { return m_pActor; }
|
||||||
|
Actor *operator->() { return m_pActor; }
|
||||||
|
void Unload();
|
||||||
|
bool IsLoaded() const { return m_pActor != NULL; }
|
||||||
|
void Load( const CString &sPath );
|
||||||
|
void LoadAndSetName( const CString &sScreenName, const CString &sActorName );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Actor* m_pActor;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) 2003-2004 Chris Danford
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||||
|
* whom the Software is furnished to do so, provided that the above
|
||||||
|
* copyright notice(s) and this permission notice appear in all copies of
|
||||||
|
* the Software and that both the above copyright notice(s) and this
|
||||||
|
* permission notice appear in supporting documentation.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||||
|
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||||
|
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||||
|
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "GameState.h"
|
#include "GameState.h"
|
||||||
#include "Course.h"
|
#include "Course.h"
|
||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
|
#include "ActorUtil.h"
|
||||||
|
|
||||||
BPMDisplay::BPMDisplay()
|
BPMDisplay::BPMDisplay()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
#include "ActorFrame.h"
|
#include "ActorFrame.h"
|
||||||
#include "BitmapText.h"
|
#include "BitmapText.h"
|
||||||
#include "Quad.h"
|
#include "Quad.h"
|
||||||
#include "ActorUtil.h"
|
#include "AutoActor.h"
|
||||||
#include "ThemeMetric.h"
|
#include "ThemeMetric.h"
|
||||||
class Song;
|
class Song;
|
||||||
class Course;
|
class Course;
|
||||||
|
|||||||
@@ -83,6 +83,33 @@ BitmapText::~BitmapText()
|
|||||||
FONT->UnloadFont( m_pFont );
|
FONT->UnloadFont( m_pFont );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BitmapText::LoadFromNode( const CString& sDir, const XNode* pNode )
|
||||||
|
{
|
||||||
|
CString sText;
|
||||||
|
pNode->GetAttrValue("Text", sText );
|
||||||
|
CString sAltText;
|
||||||
|
pNode->GetAttrValue("AltText", sAltText );
|
||||||
|
|
||||||
|
ThemeManager::EvaluateString( sText );
|
||||||
|
ThemeManager::EvaluateString( sAltText );
|
||||||
|
|
||||||
|
|
||||||
|
/* Be careful: if sFile is "", and we don't check it, then we can end up recursively
|
||||||
|
* loading the BGAnimationLayer that we're in. */
|
||||||
|
CString sFont;
|
||||||
|
pNode->GetAttrValue("Font", sFont );
|
||||||
|
if( sFont == "" )
|
||||||
|
RageException::Throw( "An object '%s' in '%s' is missing the Font attribute",
|
||||||
|
pNode->m_sName.c_str(), sDir.c_str() );
|
||||||
|
|
||||||
|
LoadFromFont( THEME->GetPathToF( sFont ) );
|
||||||
|
SetText( sText, sAltText );
|
||||||
|
|
||||||
|
Actor::LoadFromNode( sDir, pNode );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool BitmapText::LoadFromFont( const CString& sFontFilePath )
|
bool BitmapText::LoadFromFont( const CString& sFontFilePath )
|
||||||
{
|
{
|
||||||
CHECKPOINT_M( ssprintf("BitmapText::LoadFromFont(%s)", sFontFilePath.c_str()) );
|
CHECKPOINT_M( ssprintf("BitmapText::LoadFromFont(%s)", sFontFilePath.c_str()) );
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public:
|
|||||||
BitmapText();
|
BitmapText();
|
||||||
virtual ~BitmapText();
|
virtual ~BitmapText();
|
||||||
|
|
||||||
|
void LoadFromNode( const CString& sDir, const XNode* pNode );
|
||||||
|
|
||||||
bool LoadFromFont( const CString& sFontName );
|
bool LoadFromFont( const CString& sFontName );
|
||||||
bool LoadFromTextureAndChars( const CString& sTexturePath, const CString& sChars );
|
bool LoadFromTextureAndChars( const CString& sTexturePath, const CString& sChars );
|
||||||
|
|||||||
@@ -5,10 +5,11 @@
|
|||||||
|
|
||||||
#include "BitmapText.h"
|
#include "BitmapText.h"
|
||||||
#include "PlayerNumber.h"
|
#include "PlayerNumber.h"
|
||||||
#include "ActorFrame.h"
|
#include "AutoActor.h"
|
||||||
#include "GameConstantsAndTypes.h"
|
#include "GameConstantsAndTypes.h"
|
||||||
#include "ActorUtil.h"
|
#include "ActorUtil.h"
|
||||||
#include "Difficulty.h"
|
#include "Difficulty.h"
|
||||||
|
#include "ActorFrame.h"
|
||||||
|
|
||||||
class Steps;
|
class Steps;
|
||||||
class Trail;
|
class Trail;
|
||||||
|
|||||||
@@ -266,7 +266,9 @@ RageUtil_WorkerThread.cpp RageUtil_WorkerThread.h
|
|||||||
|
|
||||||
Actors = \
|
Actors = \
|
||||||
Actor.cpp Actor.h ActorCollision.h ActorFrame.cpp ActorFrame.h \
|
Actor.cpp Actor.h ActorCollision.h ActorFrame.cpp ActorFrame.h \
|
||||||
ActorScroller.cpp ActorScroller.h ActorUtil.cpp ActorUtil.h BitmapText.cpp BitmapText.h Model.cpp Model.h \
|
ActorScroller.cpp ActorScroller.h ActorUtil.cpp ActorUtil.h \
|
||||||
|
AutoActor.cpp AutoActor.h \
|
||||||
|
BitmapText.cpp BitmapText.h Model.cpp Model.h \
|
||||||
ModelManager.cpp ModelManager.h ModelTypes.cpp ModelTypes.h Quad.h Sprite.cpp Sprite.h
|
ModelManager.cpp ModelManager.h ModelTypes.cpp ModelTypes.h Quad.h Sprite.cpp Sprite.h
|
||||||
|
|
||||||
GlobalSingletons = \
|
GlobalSingletons = \
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "ActorFrame.h"
|
#include "ActorFrame.h"
|
||||||
#include "Sprite.h"
|
#include "Sprite.h"
|
||||||
#include "ActorUtil.h"
|
#include "AutoActor.h"
|
||||||
|
|
||||||
|
|
||||||
class MeterDisplay : public ActorFrame
|
class MeterDisplay : public ActorFrame
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#ifndef MUSICWHEEL_H
|
#ifndef MUSICWHEEL_H
|
||||||
#define MUSICWHEEL_H
|
#define MUSICWHEEL_H
|
||||||
|
|
||||||
#include "ActorUtil.h"
|
#include "AutoActor.h"
|
||||||
#include "ActorFrame.h"
|
#include "ActorFrame.h"
|
||||||
#include "RageSound.h"
|
#include "RageSound.h"
|
||||||
#include "RandomSample.h"
|
#include "RandomSample.h"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include "Course.h"
|
#include "Course.h"
|
||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
#include "Command.h"
|
#include "Command.h"
|
||||||
|
#include "ActorUtil.h"
|
||||||
|
|
||||||
#define SHIFT_X(p) THEME->GetMetricF(m_sName, ssprintf("ShiftP%iX", p+1))
|
#define SHIFT_X(p) THEME->GetMetricF(m_sName, ssprintf("ShiftP%iX", p+1))
|
||||||
#define SHIFT_Y(p) THEME->GetMetricF(m_sName, ssprintf("ShiftP%iY", p+1))
|
#define SHIFT_Y(p) THEME->GetMetricF(m_sName, ssprintf("ShiftP%iY", p+1))
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include "Sprite.h"
|
#include "Sprite.h"
|
||||||
#include "PlayerNumber.h"
|
#include "PlayerNumber.h"
|
||||||
#include "BitmapText.h"
|
#include "BitmapText.h"
|
||||||
#include "ActorUtil.h"
|
#include "AutoActor.h"
|
||||||
#include "GameConstantsAndTypes.h"
|
#include "GameConstantsAndTypes.h"
|
||||||
|
|
||||||
enum PaneTypes
|
enum PaneTypes
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#define RECEPTOR_ARROW_H
|
#define RECEPTOR_ARROW_H
|
||||||
|
|
||||||
#include "ActorFrame.h"
|
#include "ActorFrame.h"
|
||||||
#include "ActorUtil.h"
|
#include "AutoActor.h"
|
||||||
#include "PlayerNumber.h"
|
#include "PlayerNumber.h"
|
||||||
#include "GameConstantsAndTypes.h"
|
#include "GameConstantsAndTypes.h"
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
#include "PlayerState.h"
|
#include "PlayerState.h"
|
||||||
#include "ScreenTextEntry.h"
|
#include "ScreenTextEntry.h"
|
||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
|
#include "ActorUtil.h"
|
||||||
|
|
||||||
const float RECORD_HOLD_SECONDS = 0.3f;
|
const float RECORD_HOLD_SECONDS = 0.3f;
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
#include "PlayerState.h"
|
#include "PlayerState.h"
|
||||||
#include "InputMapper.h"
|
#include "InputMapper.h"
|
||||||
|
#include "ActorUtil.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Defines
|
// Defines
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include "ThemeMetric.h"
|
#include "ThemeMetric.h"
|
||||||
#include "PlayerState.h"
|
#include "PlayerState.h"
|
||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
|
#include "ActorUtil.h"
|
||||||
|
|
||||||
static const ThemeMetric<float> SECONDS_TO_SHOW ("ScreenHowToPlay","SecondsToShow");
|
static const ThemeMetric<float> SECONDS_TO_SHOW ("ScreenHowToPlay","SecondsToShow");
|
||||||
static const ThemeMetric<CString> STEPFILE ("ScreenHowToPlay","Stepfile");
|
static const ThemeMetric<CString> STEPFILE ("ScreenHowToPlay","Stepfile");
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class ScreenSystemLayer;
|
|||||||
class BGAnimation;
|
class BGAnimation;
|
||||||
|
|
||||||
|
|
||||||
typedef Screen* (*CreateScreenFn)(const CString&);
|
typedef Screen* (*CreateScreenFn)(const CString& sClassName);
|
||||||
|
|
||||||
class ScreenManager
|
class ScreenManager
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1526,6 +1526,8 @@ void ScreenSelectMusic::AfterMusicChange()
|
|||||||
|
|
||||||
m_Artists.push_back( pSong->GetDisplayArtist() );
|
m_Artists.push_back( pSong->GetDisplayArtist() );
|
||||||
m_AltArtists.push_back( pSong->GetTranslitArtist() );
|
m_AltArtists.push_back( pSong->GetTranslitArtist() );
|
||||||
|
|
||||||
|
MESSAGEMAN->Broadcast( "OnSongChanged" );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_ROULETTE:
|
case TYPE_ROULETTE:
|
||||||
@@ -1629,6 +1631,8 @@ void ScreenSelectMusic::AfterMusicChange()
|
|||||||
COMMAND( m_sprCourseHasMods, "Hide" );
|
COMMAND( m_sprCourseHasMods, "Hide" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MESSAGEMAN->Broadcast( "OnCourseChanged" );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -1706,6 +1706,14 @@ SOURCE=.\ActorUtil.h
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\AutoActor.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\AutoActor.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\BitmapText.cpp
|
SOURCE=.\BitmapText.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|||||||
@@ -2231,6 +2231,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
|
|||||||
<File
|
<File
|
||||||
RelativePath="ActorUtil.h">
|
RelativePath="ActorUtil.h">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="AutoActor.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="AutoActor.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BitmapText.cpp">
|
RelativePath=".\BitmapText.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#define TRANSITION_H
|
#define TRANSITION_H
|
||||||
|
|
||||||
#include "Actor.h"
|
#include "Actor.h"
|
||||||
#include "ActorUtil.h"
|
#include "AutoActor.h"
|
||||||
#include "ScreenMessage.h"
|
#include "ScreenMessage.h"
|
||||||
#include "RandomSample.h"
|
#include "RandomSample.h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user