move Character stuff out of messy GAMESTATE and into CHARMAN
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
#include "Course.h"
|
||||
#include "Character.h"
|
||||
#include "ThemeMetric.h"
|
||||
#include "GameState.h"
|
||||
#include "CharacterManager.h"
|
||||
|
||||
ThemeMetric<bool> SCROLL_RANDOM ("Banner","ScrollRandom");
|
||||
ThemeMetric<bool> SCROLL_ROULETTE ("Banner","ScrollRoulette");
|
||||
@@ -145,7 +145,7 @@ void Banner::LoadCourseFallback()
|
||||
|
||||
void Banner::LoadCourseFallbackCharacterIcon()
|
||||
{
|
||||
Character *pCharacter = GAMESTATE->GetDefaultCharacter();
|
||||
Character *pCharacter = CHARMAN->GetDefaultCharacter();
|
||||
if( pCharacter && !pCharacter->GetIconPath().empty() )
|
||||
Load( pCharacter->GetIconPath() );
|
||||
else
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
#include "global.h"
|
||||
#include "CharacterManager.h"
|
||||
#include "Character.h"
|
||||
#include "GameState.h"
|
||||
|
||||
#define CHARACTERS_DIR "/Characters/"
|
||||
|
||||
CharacterManager* CHARMAN = NULL; // global object accessable from anywhere in the program
|
||||
|
||||
CharacterManager::CharacterManager()
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
SAFE_DELETE( m_pCharacters[i] );
|
||||
m_pCharacters.clear();
|
||||
|
||||
CStringArray as;
|
||||
GetDirListing( CHARACTERS_DIR "*", as, true, true );
|
||||
StripCvs( as );
|
||||
|
||||
bool FoundDefault = false;
|
||||
for( unsigned i=0; i<as.size(); i++ )
|
||||
{
|
||||
CString sCharName, sDummy;
|
||||
splitpath(as[i], sDummy, sCharName, sDummy);
|
||||
sCharName.MakeLower();
|
||||
|
||||
if( sCharName.CompareNoCase("default")==0 )
|
||||
FoundDefault = true;
|
||||
|
||||
Character* pChar = new Character;
|
||||
if( pChar->Load( as[i] ) )
|
||||
m_pCharacters.push_back( pChar );
|
||||
else
|
||||
delete pChar;
|
||||
}
|
||||
|
||||
if( !FoundDefault )
|
||||
RageException::Throw( "'Characters/default' is missing." );
|
||||
|
||||
// If FoundDefault, then we're not empty. -Chris
|
||||
// if( m_pCharacters.empty() )
|
||||
// RageException::Throw( "Couldn't find any character definitions" );
|
||||
}
|
||||
|
||||
CharacterManager::~CharacterManager()
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
SAFE_DELETE( m_pCharacters[i] );
|
||||
}
|
||||
|
||||
void CharacterManager::GetCharacters( vector<Character*> &apCharactersOut )
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
if( !m_pCharacters[i]->IsDefaultCharacter() )
|
||||
apCharactersOut.push_back( m_pCharacters[i] );
|
||||
}
|
||||
|
||||
Character* CharacterManager::GetRandomCharacter()
|
||||
{
|
||||
vector<Character*> apCharacters;
|
||||
GetCharacters( apCharacters );
|
||||
if( apCharacters.size() )
|
||||
return apCharacters[rand()%apCharacters.size()];
|
||||
else
|
||||
return GetDefaultCharacter();
|
||||
}
|
||||
|
||||
Character* CharacterManager::GetDefaultCharacter()
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
{
|
||||
if( m_pCharacters[i]->IsDefaultCharacter() )
|
||||
return m_pCharacters[i];
|
||||
}
|
||||
|
||||
/* We always have the default character. */
|
||||
ASSERT(0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Character* CharacterManager::GetCharacterFromID( CString sCharacterID )
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
{
|
||||
if( m_pCharacters[i]->m_sCharacterID == sCharacterID )
|
||||
return m_pCharacters[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
// lua start
|
||||
#include "LuaBinding.h"
|
||||
|
||||
class LunaCharacterManager: public Luna<CharacterManager>
|
||||
{
|
||||
public:
|
||||
LunaCharacterManager() { LUA->Register( Register ); }
|
||||
|
||||
static int GetCharacter( T* p, lua_State *L )
|
||||
{
|
||||
Character *pCharacter = p->GetCharacterFromID(SArg(1));
|
||||
if( pCharacter != NULL )
|
||||
pCharacter->PushSelf( L );
|
||||
else
|
||||
lua_pushnil( L );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void Register(lua_State *L)
|
||||
{
|
||||
ADD_METHOD( GetCharacter )
|
||||
Luna<T>::Register( L );
|
||||
|
||||
// Add global singleton if constructed already. If it's not constructed yet,
|
||||
// then we'll register it later when we reinit Lua just before
|
||||
// initializing the display.
|
||||
if( CHARMAN )
|
||||
{
|
||||
lua_pushstring(L, "CHARMAN");
|
||||
CHARMAN->PushSelf( L );
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
LUA_REGISTER_CLASS( CharacterManager )
|
||||
// lua end
|
||||
|
||||
|
||||
/*
|
||||
* (c) 2001-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,57 @@
|
||||
/* ThemeManager - Managed non-persisted statistics. */
|
||||
|
||||
#ifndef CharacterManager_H
|
||||
#define CharacterManager_H
|
||||
|
||||
#include "StageStats.h"
|
||||
|
||||
class Character;
|
||||
|
||||
class CharacterManager
|
||||
{
|
||||
public:
|
||||
CharacterManager();
|
||||
~CharacterManager();
|
||||
|
||||
void GetCharacters( vector<Character*> &vpCharactersOut );
|
||||
Character* GetRandomCharacter();
|
||||
Character* GetDefaultCharacter();
|
||||
Character* GetCharacterFromID( CString sCharacterID );
|
||||
|
||||
// Lua
|
||||
void PushSelf( lua_State *L );
|
||||
|
||||
private:
|
||||
vector<Character*> m_pCharacters;
|
||||
|
||||
};
|
||||
|
||||
|
||||
extern CharacterManager* CHARMAN; // global and accessable from anywhere in our program
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2001-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.
|
||||
*/
|
||||
+5
-100
@@ -39,6 +39,7 @@
|
||||
#include "CommonMetrics.h"
|
||||
#include "ScreenManager.h"
|
||||
#include "Screen.h"
|
||||
#include "CharacterManager.h"
|
||||
|
||||
#include <ctime>
|
||||
#include <set>
|
||||
@@ -46,8 +47,7 @@
|
||||
|
||||
GameState* GAMESTATE = NULL; // global and accessable from anywhere in our program
|
||||
|
||||
#define CHARACTERS_DIR "Characters/"
|
||||
#define NAME_BLACKLIST_FILE "Data/NamesBlacklist.dat"
|
||||
#define NAME_BLACKLIST_FILE "/Data/NamesBlacklist.dat"
|
||||
|
||||
ThemeMetric<bool> USE_NAME_BLACKLIST("GameState","UseNameBlacklist");
|
||||
|
||||
@@ -89,8 +89,6 @@ GameState::GameState() :
|
||||
m_timeGameStarted.SetZero();
|
||||
m_bDemonstrationOrJukebox = false;
|
||||
|
||||
ReloadCharacters();
|
||||
|
||||
m_iNumTimesThroughAttract = -1; // initial screen will bump this up to 0
|
||||
m_iStageSeed = m_iGameSeed = 0;
|
||||
|
||||
@@ -115,9 +113,6 @@ GameState::GameState() :
|
||||
|
||||
GameState::~GameState()
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
SAFE_DELETE( m_pCharacters[i] );
|
||||
|
||||
FOREACH_PlayerNumber( p )
|
||||
SAFE_DELETE( m_pPlayerState[p] );
|
||||
|
||||
@@ -243,10 +238,10 @@ void GameState::Reset()
|
||||
|
||||
FOREACH_PlayerNumber(p)
|
||||
{
|
||||
if( PREFSMAN->m_ShowDancingCharacters == PrefsManager::CO_RANDOM)
|
||||
m_pCurCharacters[p] = GetRandomCharacter();
|
||||
if( PREFSMAN->m_ShowDancingCharacters == PrefsManager::CO_RANDOM )
|
||||
m_pCurCharacters[p] = CHARMAN->GetRandomCharacter();
|
||||
else
|
||||
m_pCurCharacters[p] = GetDefaultCharacter();
|
||||
m_pCurCharacters[p] = CHARMAN->GetDefaultCharacter();
|
||||
ASSERT( m_pCurCharacters[p] );
|
||||
}
|
||||
|
||||
@@ -569,44 +564,6 @@ void GameState::Update( float fDelta )
|
||||
}
|
||||
}
|
||||
|
||||
void GameState::ReloadCharacters()
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
SAFE_DELETE( m_pCharacters[i] );
|
||||
m_pCharacters.clear();
|
||||
|
||||
FOREACH_PlayerNumber( p )
|
||||
m_pCurCharacters[p] = NULL;
|
||||
|
||||
CStringArray as;
|
||||
GetDirListing( CHARACTERS_DIR "*", as, true, true );
|
||||
StripCvs( as );
|
||||
|
||||
bool FoundDefault = false;
|
||||
for( unsigned i=0; i<as.size(); i++ )
|
||||
{
|
||||
CString sCharName, sDummy;
|
||||
splitpath(as[i], sDummy, sCharName, sDummy);
|
||||
sCharName.MakeLower();
|
||||
|
||||
if( sCharName.CompareNoCase("default")==0 )
|
||||
FoundDefault = true;
|
||||
|
||||
Character* pChar = new Character;
|
||||
if( pChar->Load( as[i] ) )
|
||||
m_pCharacters.push_back( pChar );
|
||||
else
|
||||
delete pChar;
|
||||
}
|
||||
|
||||
if( !FoundDefault )
|
||||
RageException::Throw( "'Characters/default' is missing." );
|
||||
|
||||
// If FoundDefault, then we're not empty. -Chris
|
||||
// if( m_pCharacters.empty() )
|
||||
// RageException::Throw( "Couldn't find any character definitions" );
|
||||
}
|
||||
|
||||
const float GameState::MUSIC_SECONDS_INVALID = -5000.0f;
|
||||
|
||||
void GameState::ResetMusicStatistics()
|
||||
@@ -1287,47 +1244,6 @@ bool GameState::ShowMarvelous() const
|
||||
}
|
||||
}
|
||||
|
||||
void GameState::GetCharacters( vector<Character*> &apCharactersOut )
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
if( !m_pCharacters[i]->IsDefaultCharacter() )
|
||||
apCharactersOut.push_back( m_pCharacters[i] );
|
||||
}
|
||||
|
||||
Character* GameState::GetRandomCharacter()
|
||||
{
|
||||
vector<Character*> apCharacters;
|
||||
GetCharacters( apCharacters );
|
||||
if( apCharacters.size() )
|
||||
return apCharacters[rand()%apCharacters.size()];
|
||||
else
|
||||
return GetDefaultCharacter();
|
||||
}
|
||||
|
||||
Character* GameState::GetDefaultCharacter()
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
{
|
||||
if( m_pCharacters[i]->IsDefaultCharacter() )
|
||||
return m_pCharacters[i];
|
||||
}
|
||||
|
||||
/* We always have the default character. */
|
||||
ASSERT(0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Character* GameState::GetCharacterFromID( CString sCharacterID )
|
||||
{
|
||||
for( unsigned i=0; i<m_pCharacters.size(); i++ )
|
||||
{
|
||||
if( m_pCharacters[i]->m_sCharacterID == sCharacterID )
|
||||
return m_pCharacters[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct SongAndSteps
|
||||
{
|
||||
Song* pSong;
|
||||
@@ -2014,16 +1930,6 @@ public:
|
||||
}
|
||||
static int GetPreferredDifficulty( T* p, lua_State *L ) { lua_pushnumber(L, p->m_PreferredDifficulty[IArg(1)] ); return 1; }
|
||||
static int AnyPlayerHasRankingFeats( T* p, lua_State *L ) { lua_pushboolean(L, p->AnyPlayerHasRankingFeats() ); return 1; }
|
||||
static int GetCharacter( T* p, lua_State *L )
|
||||
{
|
||||
Character *pCharacter = p->m_pCurCharacters[IArg(1)];
|
||||
if( pCharacter != NULL )
|
||||
pCharacter->PushSelf( L );
|
||||
else
|
||||
lua_pushnil( L );
|
||||
|
||||
return 1;
|
||||
}
|
||||
static int IsCourseMode( T* p, lua_State *L ) { lua_pushboolean(L, p->IsCourseMode() ); return 1; }
|
||||
static int IsDemonstration( T* p, lua_State *L ) { lua_pushboolean(L, p->m_bDemonstrationOrJukebox ); return 1; }
|
||||
static int GetPlayMode( T* p, lua_State *L ) { lua_pushnumber(L, p->m_PlayMode ); return 1; }
|
||||
@@ -2091,7 +1997,6 @@ public:
|
||||
ADD_METHOD( GetEditSourceSteps )
|
||||
ADD_METHOD( GetPreferredDifficulty )
|
||||
ADD_METHOD( AnyPlayerHasRankingFeats )
|
||||
ADD_METHOD( GetCharacter )
|
||||
ADD_METHOD( IsCourseMode )
|
||||
ADD_METHOD( IsDemonstration )
|
||||
ADD_METHOD( GetPlayMode )
|
||||
|
||||
@@ -92,11 +92,6 @@ public:
|
||||
bool IsCpuPlayer( PlayerNumber pn ) const;
|
||||
bool AnyPlayersAreCpu() const;
|
||||
|
||||
void GetCharacters( vector<Character*> &vpCharactersOut );
|
||||
Character* GetRandomCharacter();
|
||||
Character* GetDefaultCharacter();
|
||||
Character* GetCharacterFromID( CString sCharacterID );
|
||||
|
||||
|
||||
bool IsCourseMode() const;
|
||||
bool IsBattleMode() const; /* not Rave */
|
||||
@@ -227,16 +222,8 @@ public:
|
||||
SongOptions::FailType GetPlayerFailType( PlayerNumber pn ) const;
|
||||
|
||||
// character stuff
|
||||
private:
|
||||
vector<Character*> m_pCharacters;
|
||||
|
||||
public:
|
||||
Character* m_pCurCharacters[NUM_PLAYERS];
|
||||
|
||||
void ReloadCharacters();
|
||||
|
||||
|
||||
|
||||
|
||||
bool HasEarnedExtraStage() const;
|
||||
bool m_bAllow2ndExtraStage; //only used when "Allow Selection of Extra Stage is on"
|
||||
|
||||
@@ -325,9 +325,14 @@ Quad.cpp Quad.h \
|
||||
RollingNumbers.cpp RollingNumbers.h Sprite.cpp Sprite.h
|
||||
|
||||
GlobalSingletons = \
|
||||
AnnouncerManager.cpp AnnouncerManager.h Bookkeeper.cpp Bookkeeper.h CryptManager.cpp CryptManager.h \
|
||||
FontManager.cpp FontManager.h GameSoundManager.cpp GameSoundManager.h GameManager.cpp GameManager.h \
|
||||
GameState.cpp GameState.h InputFilter.cpp InputFilter.h \
|
||||
AnnouncerManager.cpp AnnouncerManager.h \
|
||||
Bookkeeper.cpp Bookkeeper.h \
|
||||
CharacterManager.cpp CharacterManager.h \
|
||||
CryptManager.cpp CryptManager.h \
|
||||
FontManager.cpp FontManager.h GameSoundManager.cpp GameSoundManager.h \
|
||||
GameManager.cpp GameManager.h \
|
||||
GameState.cpp GameState.h \
|
||||
InputFilter.cpp InputFilter.h \
|
||||
InputMapper.cpp InputMapper.h InputQueue.cpp InputQueue.h \
|
||||
LuaBinding.cpp LuaBinding.h \
|
||||
LuaManager.cpp LuaManager.h LightsManager.cpp LightsManager.h \
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "Foreach.h"
|
||||
#include "GameSoundManager.h"
|
||||
#include "CommonMetrics.h"
|
||||
#include "CharacterManager.h"
|
||||
|
||||
#define ENTRY(s) THEME->GetMetric ("ScreenOptionsMaster",s)
|
||||
#define ENTRY_MODE(s,i) THEME->GetMetric ("ScreenOptionsMaster",ssprintf("%s,%i",(s).c_str(),(i+1)))
|
||||
@@ -356,7 +357,7 @@ public:
|
||||
defOut.m_bOneChoiceForAllPlayers = false;
|
||||
defOut.m_bAllowThemeItems = false;
|
||||
defOut.m_sName = "Characters";
|
||||
Default.m_pCharacter = GAMESTATE->GetDefaultCharacter();
|
||||
Default.m_pCharacter = CHARMAN->GetDefaultCharacter();
|
||||
|
||||
{
|
||||
defOut.m_vsChoices.push_back( "Off" );
|
||||
@@ -365,11 +366,11 @@ public:
|
||||
ListEntries.push_back( mc );
|
||||
}
|
||||
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
for( unsigned i=0; i<apCharacters.size(); i++ )
|
||||
vector<Character*> vpCharacters;
|
||||
CHARMAN->GetCharacters( vpCharacters );
|
||||
for( unsigned i=0; i<vpCharacters.size(); i++ )
|
||||
{
|
||||
Character* pCharacter = apCharacters[i];
|
||||
Character* pCharacter = vpCharacters[i];
|
||||
CString s = pCharacter->GetDisplayName();
|
||||
s.MakeUpper();
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "CatalogXml.h"
|
||||
#include "Bookkeeper.h"
|
||||
#include "Game.h"
|
||||
#include "GameState.h"
|
||||
#include "CharacterManager.h"
|
||||
#include "Character.h"
|
||||
|
||||
const CString STATS_XSL = "Stats.xsl";
|
||||
@@ -192,13 +192,13 @@ CString Profile::GetDisplayNameOrHighScoreName() const
|
||||
Character *Profile::GetCharacter() const
|
||||
{
|
||||
vector<Character*> vpCharacters;
|
||||
GAMESTATE->GetCharacters( vpCharacters );
|
||||
CHARMAN->GetCharacters( vpCharacters );
|
||||
FOREACH_CONST( Character*, vpCharacters, c )
|
||||
{
|
||||
if( (*c)->m_sCharacterID.CompareNoCase(m_sCharacterID)==0 )
|
||||
return *c;
|
||||
}
|
||||
return GAMESTATE->GetDefaultCharacter();
|
||||
return CHARMAN->GetDefaultCharacter();
|
||||
}
|
||||
|
||||
static CString FormatCalories( float fCals )
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "Style.h"
|
||||
#include "HighScore.h"
|
||||
#include "Character.h"
|
||||
#include "CharacterManager.h"
|
||||
|
||||
|
||||
ProfileManager* PROFILEMAN = NULL; // global and accessable from anywhere in our program
|
||||
@@ -89,7 +90,7 @@ void ProfileManager::Init()
|
||||
for( int i=g_vLocalProfile.size(); i<NUM_FIXED_PROFILES; i++ )
|
||||
{
|
||||
CString sCharacterID = FIXED_PROFILE_CHARACTER_ID( i );
|
||||
Character *pCharacter = GAMESTATE->GetCharacterFromID( sCharacterID );
|
||||
Character *pCharacter = CHARMAN->GetCharacterFromID( sCharacterID );
|
||||
CString sThrowAway;
|
||||
CreateLocalProfile( pCharacter->GetDisplayName(), sThrowAway );
|
||||
}
|
||||
@@ -406,7 +407,7 @@ bool ProfileManager::CreateLocalProfile( CString sName, CString &sProfileIDOut )
|
||||
//
|
||||
Profile *pProfile = new Profile;
|
||||
pProfile->m_sDisplayName = sName;
|
||||
pProfile->m_sCharacterID = GAMESTATE->GetRandomCharacter()->m_sCharacterID;
|
||||
pProfile->m_sCharacterID = CHARMAN->GetRandomCharacter()->m_sCharacterID;
|
||||
|
||||
//
|
||||
// Save it to disk.
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "Style.h"
|
||||
#include "ActorUtil.h"
|
||||
#include "PrefsManager.h"
|
||||
#include "CharacterManager.h"
|
||||
|
||||
static const ThemeMetric<CString> STEPFILE ("ScreenHowToPlay","Stepfile");
|
||||
static const ThemeMetric<int> NUM_PERFECTS ("ScreenHowToPlay","NumPerfects");
|
||||
@@ -91,11 +92,11 @@ void ScreenHowToPlay::Init()
|
||||
}
|
||||
|
||||
// Display random character
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
if( (bool)USECHARACTER && apCharacters.size() && HaveAllCharAnimations() )
|
||||
vector<Character*> vpCharacters;
|
||||
CHARMAN->GetCharacters( vpCharacters );
|
||||
if( (bool)USECHARACTER && vpCharacters.size() && HaveAllCharAnimations() )
|
||||
{
|
||||
Character* rndchar = GAMESTATE->GetRandomCharacter();
|
||||
Character* rndchar = CHARMAN->GetRandomCharacter();
|
||||
|
||||
CString sModelPath = rndchar->GetModelPath();
|
||||
if( sModelPath != "" )
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "PrefsManager.h"
|
||||
#include "RageTextureManager.h"
|
||||
#include "Command.h"
|
||||
#include "CharacterManager.h"
|
||||
|
||||
|
||||
#define TITLE_ON_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("TitleP%dOnCommand",p+1))
|
||||
@@ -58,7 +59,7 @@ void ScreenSelectCharacter::Init()
|
||||
ScreenWithMenuElements::Init();
|
||||
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
CHARMAN->GetCharacters( apCharacters );
|
||||
if( apCharacters.empty() )
|
||||
{
|
||||
this->PostScreenMessage( SM_GoToNextScreen, 0 );
|
||||
@@ -240,7 +241,7 @@ void ScreenSelectCharacter::AfterValueChange( PlayerNumber pn )
|
||||
case CHOOSING_HUMAN_CHARACTER:
|
||||
{
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
CHARMAN->GetCharacters( apCharacters );
|
||||
Character* pChar = apCharacters[ m_iSelectedCharacter[pnAffected] ];
|
||||
m_sprCard[pnAffected].UnloadTexture();
|
||||
m_sprCard[pnAffected].Load( pChar->GetCardPath() );
|
||||
@@ -307,7 +308,7 @@ void ScreenSelectCharacter::Move( PlayerNumber pn, int deltaValue )
|
||||
case CHOOSING_CPU_CHARACTER:
|
||||
case CHOOSING_HUMAN_CHARACTER:
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
CHARMAN->GetCharacters( apCharacters );
|
||||
m_iSelectedCharacter[pnAffected] += deltaValue;
|
||||
wrap( m_iSelectedCharacter[pnAffected], apCharacters.size() );
|
||||
AfterValueChange(pn);
|
||||
@@ -350,7 +351,7 @@ void ScreenSelectCharacter::MenuStart( PlayerNumber pn )
|
||||
FOREACH_PlayerNumber( p )
|
||||
{
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
CHARMAN->GetCharacters( apCharacters );
|
||||
Character* pChar = apCharacters[ m_iSelectedCharacter[p] ];
|
||||
GAMESTATE->m_pCurCharacters[p] = pChar;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "GameState.h"
|
||||
#include "ThemeManager.h"
|
||||
#include "ActorUtil.h"
|
||||
#include "CharacterManager.h"
|
||||
|
||||
/* Constants */
|
||||
|
||||
@@ -81,25 +82,25 @@ void ScreenSelectMode::Init()
|
||||
}
|
||||
|
||||
// check for character availability
|
||||
vector<Character*> apCharacters;
|
||||
if(ENABLE_CHAR_SELECT)
|
||||
vector<Character*> vpCharacters;
|
||||
if( ENABLE_CHAR_SELECT )
|
||||
{
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
CHARMAN->GetCharacters( vpCharacters );
|
||||
|
||||
for(unsigned i=0; i<apCharacters.size(); i++)
|
||||
for(unsigned i=0; i<vpCharacters.size(); i++)
|
||||
{
|
||||
if(apCharacters[i] != NULL) // check its not null
|
||||
if(vpCharacters[i] != NULL) // check its not null
|
||||
{
|
||||
m_bCharsAvailable = true;
|
||||
if(apCharacters[i]->Has2DElems())
|
||||
if(vpCharacters[i]->Has2DElems())
|
||||
{
|
||||
CString mpath = apCharacters[i]->GetSongSelectIconPath();
|
||||
CString mpath = vpCharacters[i]->GetSongSelectIconPath();
|
||||
LOG->Trace("Char: %d, %s, 2D: true",i,mpath.c_str());
|
||||
m_b2DAvailable = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
CString mpath = apCharacters[i]->GetSongSelectIconPath();
|
||||
CString mpath = vpCharacters[i]->GetSongSelectIconPath();
|
||||
LOG->Trace("Char: %d, %s, 2D: false",i,mpath.c_str());
|
||||
}
|
||||
}
|
||||
@@ -260,34 +261,34 @@ void ScreenSelectMode::HandleScreenMessage( const ScreenMessage SM )
|
||||
|
||||
void ScreenSelectMode::SetCharacters()
|
||||
{
|
||||
vector<Character*> apCharactersToUse;
|
||||
vector<Character*> vpCharactersToUse;
|
||||
if(ENABLE_CHAR_SELECT && m_bCharsAvailable)
|
||||
{
|
||||
if(ONLY_2D_CHARS && m_b2DAvailable)
|
||||
{
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
for(unsigned i=0; i<apCharacters.size(); i++)
|
||||
vector<Character*> vpCharacters;
|
||||
CHARMAN->GetCharacters( vpCharacters );
|
||||
for(unsigned i=0; i<vpCharacters.size(); i++)
|
||||
{
|
||||
if(apCharacters[i] != NULL) // check its not null
|
||||
if(vpCharacters[i] != NULL) // check its not null
|
||||
{
|
||||
if(apCharacters[i]->Has2DElems())
|
||||
if(vpCharacters[i]->Has2DElems())
|
||||
{
|
||||
apCharactersToUse.push_back(apCharacters[i]);
|
||||
vpCharactersToUse.push_back(vpCharacters[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(m_bCharsAvailable)
|
||||
{
|
||||
GAMESTATE->GetCharacters( apCharactersToUse );
|
||||
CHARMAN->GetCharacters( vpCharactersToUse );
|
||||
}
|
||||
}
|
||||
FOREACH_EnabledPlayer( pn )
|
||||
{
|
||||
if(ENABLE_CHAR_SELECT && m_iCurrentChar[pn] != -1)
|
||||
{
|
||||
Character* pChar = apCharactersToUse[m_iCurrentChar[pn]];
|
||||
Character* pChar = vpCharactersToUse[m_iCurrentChar[pn]];
|
||||
GAMESTATE->m_pCurCharacters[pn] = pChar;
|
||||
}
|
||||
}
|
||||
@@ -360,27 +361,27 @@ void ScreenSelectMode::DrawPrimitives()
|
||||
|
||||
void ScreenSelectMode::MenuUp(PlayerNumber pn)
|
||||
{
|
||||
vector<Character*> apCharactersToUse;
|
||||
vector<Character*> vpCharactersToUse;
|
||||
if(ENABLE_CHAR_SELECT && m_bCharsAvailable)
|
||||
{
|
||||
if(ONLY_2D_CHARS && m_b2DAvailable)
|
||||
{
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
for(unsigned i=0; i<apCharacters.size(); i++)
|
||||
vector<Character*> vpCharacters;
|
||||
CHARMAN->GetCharacters( vpCharacters );
|
||||
for(unsigned i=0; i<vpCharacters.size(); i++)
|
||||
{
|
||||
if(apCharacters[i] != NULL) // check its not null
|
||||
if(vpCharacters[i] != NULL) // check its not null
|
||||
{
|
||||
if(apCharacters[i]->Has2DElems())
|
||||
if(vpCharacters[i]->Has2DElems())
|
||||
{
|
||||
apCharactersToUse.push_back(apCharacters[i]);
|
||||
vpCharactersToUse.push_back(vpCharacters[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(m_bCharsAvailable)
|
||||
{
|
||||
GAMESTATE->GetCharacters( apCharactersToUse );
|
||||
CHARMAN->GetCharacters( vpCharactersToUse );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -388,14 +389,14 @@ void ScreenSelectMode::MenuUp(PlayerNumber pn)
|
||||
if(ENABLE_CHAR_SELECT && m_bCharsAvailable)
|
||||
{
|
||||
if(m_iCurrentChar[pn] <= -1)
|
||||
m_iCurrentChar[pn] = apCharactersToUse.size() -1;
|
||||
m_iCurrentChar[pn] = vpCharactersToUse.size() -1;
|
||||
else
|
||||
m_iCurrentChar[pn]--; // set to no character
|
||||
|
||||
if(m_iCurrentChar[pn] != -1)
|
||||
{
|
||||
if(apCharactersToUse[m_iCurrentChar[pn]]->GetSongSelectIconPath() != "")
|
||||
m_CurChar[pn].Load( apCharactersToUse[m_iCurrentChar[pn]]->GetSongSelectIconPath() );
|
||||
if(vpCharactersToUse[m_iCurrentChar[pn]]->GetSongSelectIconPath() != "")
|
||||
m_CurChar[pn].Load( vpCharactersToUse[m_iCurrentChar[pn]]->GetSongSelectIconPath() );
|
||||
else
|
||||
m_CurChar[pn].Load( THEME->GetPathG("ScreenSelectMode","chariconmissing") );
|
||||
}
|
||||
@@ -406,41 +407,41 @@ void ScreenSelectMode::MenuUp(PlayerNumber pn)
|
||||
|
||||
void ScreenSelectMode::MenuDown(PlayerNumber pn)
|
||||
{
|
||||
vector<Character*> apCharactersToUse;
|
||||
vector<Character*> vpCharactersToUse;
|
||||
if(ENABLE_CHAR_SELECT && m_bCharsAvailable)
|
||||
{
|
||||
if(ONLY_2D_CHARS && m_b2DAvailable)
|
||||
{
|
||||
vector<Character*> apCharacters;
|
||||
GAMESTATE->GetCharacters( apCharacters );
|
||||
for(unsigned i=0; i<apCharacters.size(); i++)
|
||||
vector<Character*> vpCharacters;
|
||||
CHARMAN->GetCharacters( vpCharacters );
|
||||
for(unsigned i=0; i<vpCharacters.size(); i++)
|
||||
{
|
||||
if(apCharacters[i] != NULL) // check its not null
|
||||
if(vpCharacters[i] != NULL) // check its not null
|
||||
{
|
||||
if(apCharacters[i]->Has2DElems())
|
||||
if(vpCharacters[i]->Has2DElems())
|
||||
{
|
||||
apCharactersToUse.push_back(apCharacters[i]);
|
||||
vpCharactersToUse.push_back(vpCharacters[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(m_bCharsAvailable)
|
||||
{
|
||||
GAMESTATE->GetCharacters( apCharactersToUse );
|
||||
CHARMAN->GetCharacters( vpCharactersToUse );
|
||||
}
|
||||
}
|
||||
|
||||
m_CurChar[pn].UnloadTexture();
|
||||
if(ENABLE_CHAR_SELECT && m_bCharsAvailable)
|
||||
{
|
||||
if(m_iCurrentChar[pn] < (int)apCharactersToUse.size() - 1 || m_iCurrentChar[pn] == -1)
|
||||
if(m_iCurrentChar[pn] < (int)vpCharactersToUse.size() - 1 || m_iCurrentChar[pn] == -1)
|
||||
m_iCurrentChar[pn]++;
|
||||
else
|
||||
m_iCurrentChar[pn] = -1; // set to no character
|
||||
if(m_iCurrentChar[pn] != -1)
|
||||
{
|
||||
if(apCharactersToUse[m_iCurrentChar[pn]]->GetSongSelectIconPath() != "")
|
||||
m_CurChar[pn].Load( apCharactersToUse[m_iCurrentChar[pn]]->GetSongSelectIconPath() );
|
||||
if(vpCharactersToUse[m_iCurrentChar[pn]]->GetSongSelectIconPath() != "")
|
||||
m_CurChar[pn].Load( vpCharactersToUse[m_iCurrentChar[pn]]->GetSongSelectIconPath() );
|
||||
else
|
||||
m_CurChar[pn].Load( THEME->GetPathG("ScreenSelectMode","chariconmissing") );
|
||||
}
|
||||
|
||||
@@ -2495,6 +2495,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
|
||||
<File
|
||||
RelativePath="Bookkeeper.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\CharacterManager.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\CharacterManager.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="CryptManager.cpp">
|
||||
</File>
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "NoteSkinManager.h"
|
||||
#include "PrefsManager.h"
|
||||
#include "SongManager.h"
|
||||
#include "CharacterManager.h"
|
||||
#include "GameState.h"
|
||||
#include "AnnouncerManager.h"
|
||||
#include "ProfileManager.h"
|
||||
@@ -228,6 +229,7 @@ void ShutdownGame()
|
||||
SAFE_DELETE( INPUTFILTER );
|
||||
SAFE_DELETE( MODELMAN );
|
||||
SAFE_DELETE( PROFILEMAN ); // PROFILEMAN needs the songs still loaded
|
||||
SAFE_DELETE( CHARMAN );
|
||||
SAFE_DELETE( UNLOCKMAN );
|
||||
SAFE_DELETE( CRYPTMAN );
|
||||
SAFE_DELETE( MEMCARDMAN );
|
||||
@@ -1102,6 +1104,7 @@ int main(int argc, char* argv[])
|
||||
SONGMAN->InitAll( loading_window ); // this takes a long time
|
||||
CRYPTMAN = new CryptManager; // need to do this before ProfileMan
|
||||
MEMCARDMAN = new MemoryCardManager;
|
||||
CHARMAN = new CharacterManager;
|
||||
PROFILEMAN = new ProfileManager;
|
||||
PROFILEMAN->Init(); // must load after SONGMAN
|
||||
UNLOCKMAN = new UnlockManager;
|
||||
|
||||
@@ -62,7 +62,7 @@ IntDir=.\../Debug6
|
||||
TargetDir=\cvs\stepmania\Program
|
||||
TargetName=StepMania-debug
|
||||
SOURCE="$(InputPath)"
|
||||
PreLink_Cmds=archutils\Win32\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
||||
PreLink_Cmds=archutils\Win32\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
||||
PostBuild_Cmds=archutils\Win32\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi
|
||||
# End Special Build Tool
|
||||
|
||||
@@ -99,7 +99,7 @@ IntDir=.\../Release6
|
||||
TargetDir=\cvs\stepmania\Program
|
||||
TargetName=StepMania
|
||||
SOURCE="$(InputPath)"
|
||||
PreLink_Cmds=archutils\Win32\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
||||
PreLink_Cmds=archutils\Win32\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\
|
||||
PostBuild_Cmds=archutils\Win32\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi
|
||||
# End Special Build Tool
|
||||
|
||||
@@ -3084,6 +3084,14 @@ SOURCE=.\Bookkeeper.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\CharacterManager.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\CharacterManager.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\CryptManager.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -2481,6 +2481,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
|
||||
<File
|
||||
RelativePath="Bookkeeper.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="CharacterManager.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="CharacterManager.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="CryptManager.cpp">
|
||||
</File>
|
||||
|
||||
Reference in New Issue
Block a user