From e50a4013411590a7a4e534ccb96b006ad08a2c2b Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 14 Aug 2005 12:06:40 +0000 Subject: [PATCH] move Character stuff out of messy GAMESTATE and into CHARMAN --- stepmania/src/Banner.cpp | 4 +- stepmania/src/CharacterManager.cpp | 156 ++++++++++++++++++++++++ stepmania/src/CharacterManager.h | 57 +++++++++ stepmania/src/GameState.cpp | 105 +--------------- stepmania/src/GameState.h | 13 -- stepmania/src/Makefile.am | 11 +- stepmania/src/OptionRowHandler.cpp | 11 +- stepmania/src/Profile.cpp | 6 +- stepmania/src/ProfileManager.cpp | 5 +- stepmania/src/ScreenHowToPlay.cpp | 9 +- stepmania/src/ScreenSelectCharacter.cpp | 9 +- stepmania/src/ScreenSelectMode.cpp | 79 ++++++------ stepmania/src/StepMania-net2003.vcproj | 6 + stepmania/src/StepMania.cpp | 3 + stepmania/src/StepMania.dsp | 12 +- stepmania/src/StepMania.vcproj | 6 + 16 files changed, 315 insertions(+), 177 deletions(-) create mode 100644 stepmania/src/CharacterManager.cpp create mode 100644 stepmania/src/CharacterManager.h diff --git a/stepmania/src/Banner.cpp b/stepmania/src/Banner.cpp index fee390605f..d52f06a214 100644 --- a/stepmania/src/Banner.cpp +++ b/stepmania/src/Banner.cpp @@ -7,7 +7,7 @@ #include "Course.h" #include "Character.h" #include "ThemeMetric.h" -#include "GameState.h" +#include "CharacterManager.h" ThemeMetric SCROLL_RANDOM ("Banner","ScrollRandom"); ThemeMetric 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 diff --git a/stepmania/src/CharacterManager.cpp b/stepmania/src/CharacterManager.cpp new file mode 100644 index 0000000000..0032b58914 --- /dev/null +++ b/stepmania/src/CharacterManager.cpp @@ -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; iLoad( 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 &apCharactersOut ) +{ + for( unsigned i=0; iIsDefaultCharacter() ) + apCharactersOut.push_back( m_pCharacters[i] ); +} + +Character* CharacterManager::GetRandomCharacter() +{ + vector apCharacters; + GetCharacters( apCharacters ); + if( apCharacters.size() ) + return apCharacters[rand()%apCharacters.size()]; + else + return GetDefaultCharacter(); +} + +Character* CharacterManager::GetDefaultCharacter() +{ + for( unsigned i=0; iIsDefaultCharacter() ) + return m_pCharacters[i]; + } + + /* We always have the default character. */ + ASSERT(0); + return NULL; +} + +Character* CharacterManager::GetCharacterFromID( CString sCharacterID ) +{ + for( unsigned i=0; im_sCharacterID == sCharacterID ) + return m_pCharacters[i]; + } + + return NULL; +} + + +// lua start +#include "LuaBinding.h" + +class LunaCharacterManager: public Luna +{ +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::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. + */ diff --git a/stepmania/src/CharacterManager.h b/stepmania/src/CharacterManager.h new file mode 100644 index 0000000000..45320eaecd --- /dev/null +++ b/stepmania/src/CharacterManager.h @@ -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 &vpCharactersOut ); + Character* GetRandomCharacter(); + Character* GetDefaultCharacter(); + Character* GetCharacterFromID( CString sCharacterID ); + + // Lua + void PushSelf( lua_State *L ); + +private: + vector 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. + */ diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 392033b4e7..7c1fe6e9fd 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -39,6 +39,7 @@ #include "CommonMetrics.h" #include "ScreenManager.h" #include "Screen.h" +#include "CharacterManager.h" #include #include @@ -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 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; im_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; iLoad( 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 &apCharactersOut ) -{ - for( unsigned i=0; iIsDefaultCharacter() ) - apCharactersOut.push_back( m_pCharacters[i] ); -} - -Character* GameState::GetRandomCharacter() -{ - vector apCharacters; - GetCharacters( apCharacters ); - if( apCharacters.size() ) - return apCharacters[rand()%apCharacters.size()]; - else - return GetDefaultCharacter(); -} - -Character* GameState::GetDefaultCharacter() -{ - for( unsigned i=0; iIsDefaultCharacter() ) - return m_pCharacters[i]; - } - - /* We always have the default character. */ - ASSERT(0); - return NULL; -} - -Character* GameState::GetCharacterFromID( CString sCharacterID ) -{ - for( unsigned i=0; im_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 ) diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index 568c9c9873..bb9c483ae6 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -92,11 +92,6 @@ public: bool IsCpuPlayer( PlayerNumber pn ) const; bool AnyPlayersAreCpu() const; - void GetCharacters( vector &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 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" diff --git a/stepmania/src/Makefile.am b/stepmania/src/Makefile.am index a2ac51a196..e33de41f2d 100644 --- a/stepmania/src/Makefile.am +++ b/stepmania/src/Makefile.am @@ -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 \ diff --git a/stepmania/src/OptionRowHandler.cpp b/stepmania/src/OptionRowHandler.cpp index fd1a9c9dd4..1708d7707c 100644 --- a/stepmania/src/OptionRowHandler.cpp +++ b/stepmania/src/OptionRowHandler.cpp @@ -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 apCharacters; - GAMESTATE->GetCharacters( apCharacters ); - for( unsigned i=0; i vpCharacters; + CHARMAN->GetCharacters( vpCharacters ); + for( unsigned i=0; iGetDisplayName(); s.MakeUpper(); diff --git a/stepmania/src/Profile.cpp b/stepmania/src/Profile.cpp index 5c1e130f34..ce07d4ddbc 100644 --- a/stepmania/src/Profile.cpp +++ b/stepmania/src/Profile.cpp @@ -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 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 ) diff --git a/stepmania/src/ProfileManager.cpp b/stepmania/src/ProfileManager.cpp index 66a838143d..5e1b7570bb 100644 --- a/stepmania/src/ProfileManager.cpp +++ b/stepmania/src/ProfileManager.cpp @@ -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(); iGetCharacterFromID( 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. diff --git a/stepmania/src/ScreenHowToPlay.cpp b/stepmania/src/ScreenHowToPlay.cpp index 2c3ec619d0..e27f1fd1d9 100644 --- a/stepmania/src/ScreenHowToPlay.cpp +++ b/stepmania/src/ScreenHowToPlay.cpp @@ -18,6 +18,7 @@ #include "Style.h" #include "ActorUtil.h" #include "PrefsManager.h" +#include "CharacterManager.h" static const ThemeMetric STEPFILE ("ScreenHowToPlay","Stepfile"); static const ThemeMetric NUM_PERFECTS ("ScreenHowToPlay","NumPerfects"); @@ -91,11 +92,11 @@ void ScreenHowToPlay::Init() } // Display random character - vector apCharacters; - GAMESTATE->GetCharacters( apCharacters ); - if( (bool)USECHARACTER && apCharacters.size() && HaveAllCharAnimations() ) + vector vpCharacters; + CHARMAN->GetCharacters( vpCharacters ); + if( (bool)USECHARACTER && vpCharacters.size() && HaveAllCharAnimations() ) { - Character* rndchar = GAMESTATE->GetRandomCharacter(); + Character* rndchar = CHARMAN->GetRandomCharacter(); CString sModelPath = rndchar->GetModelPath(); if( sModelPath != "" ) diff --git a/stepmania/src/ScreenSelectCharacter.cpp b/stepmania/src/ScreenSelectCharacter.cpp index 6b9ebb88cc..a4dae8a2e8 100644 --- a/stepmania/src/ScreenSelectCharacter.cpp +++ b/stepmania/src/ScreenSelectCharacter.cpp @@ -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 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 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 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 apCharacters; - GAMESTATE->GetCharacters( apCharacters ); + CHARMAN->GetCharacters( apCharacters ); Character* pChar = apCharacters[ m_iSelectedCharacter[p] ]; GAMESTATE->m_pCurCharacters[p] = pChar; } diff --git a/stepmania/src/ScreenSelectMode.cpp b/stepmania/src/ScreenSelectMode.cpp index 38f3874f16..285567a977 100644 --- a/stepmania/src/ScreenSelectMode.cpp +++ b/stepmania/src/ScreenSelectMode.cpp @@ -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 apCharacters; - if(ENABLE_CHAR_SELECT) + vector vpCharacters; + if( ENABLE_CHAR_SELECT ) { - GAMESTATE->GetCharacters( apCharacters ); + CHARMAN->GetCharacters( vpCharacters ); - for(unsigned i=0; iHas2DElems()) + 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 apCharactersToUse; + vector vpCharactersToUse; if(ENABLE_CHAR_SELECT && m_bCharsAvailable) { if(ONLY_2D_CHARS && m_b2DAvailable) { - vector apCharacters; - GAMESTATE->GetCharacters( apCharacters ); - for(unsigned i=0; i vpCharacters; + CHARMAN->GetCharacters( vpCharacters ); + for(unsigned i=0; iHas2DElems()) + 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 apCharactersToUse; + vector vpCharactersToUse; if(ENABLE_CHAR_SELECT && m_bCharsAvailable) { if(ONLY_2D_CHARS && m_b2DAvailable) { - vector apCharacters; - GAMESTATE->GetCharacters( apCharacters ); - for(unsigned i=0; i vpCharacters; + CHARMAN->GetCharacters( vpCharacters ); + for(unsigned i=0; iHas2DElems()) + 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 apCharactersToUse; + vector vpCharactersToUse; if(ENABLE_CHAR_SELECT && m_bCharsAvailable) { if(ONLY_2D_CHARS && m_b2DAvailable) { - vector apCharacters; - GAMESTATE->GetCharacters( apCharacters ); - for(unsigned i=0; i vpCharacters; + CHARMAN->GetCharacters( vpCharacters ); + for(unsigned i=0; iHas2DElems()) + 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") ); } diff --git a/stepmania/src/StepMania-net2003.vcproj b/stepmania/src/StepMania-net2003.vcproj index aff069c3a4..7c31a56f81 100644 --- a/stepmania/src/StepMania-net2003.vcproj +++ b/stepmania/src/StepMania-net2003.vcproj @@ -2495,6 +2495,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + + diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index 1c36bf5df9..40225b7045 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -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; diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index f5ddca234b..da4d22c1e6 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -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 diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index 01cafa9345..01e99f685a 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -2481,6 +2481,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + +