move Character stuff out of messy GAMESTATE and into CHARMAN

This commit is contained in:
Chris Danford
2005-08-14 12:06:40 +00:00
parent 70d1f0eadb
commit e50a401341
16 changed files with 315 additions and 177 deletions
+2 -2
View File
@@ -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
+156
View File
@@ -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.
*/
+57
View File
@@ -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
View File
@@ -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 )
-13
View File
@@ -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"
+8 -3
View File
@@ -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 \
+6 -5
View File
@@ -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();
+3 -3
View File
@@ -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 )
+3 -2
View File
@@ -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.
+5 -4
View File
@@ -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 != "" )
+5 -4
View File
@@ -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;
}
+40 -39
View File
@@ -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") );
}
+6
View File
@@ -2495,6 +2495,12 @@ cl /Zl /nologo /c verstub.cpp /Fo&quot;$(IntDir)&quot;\
<File
RelativePath="Bookkeeper.h">
</File>
<File
RelativePath=".\CharacterManager.cpp">
</File>
<File
RelativePath=".\CharacterManager.h">
</File>
<File
RelativePath="CryptManager.cpp">
</File>
+3
View 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;
+10 -2
View File
@@ -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
+6
View File
@@ -2481,6 +2481,12 @@ cl /Zl /nologo /c verstub.cpp /Fo&quot;$(IntDir)&quot;\
<File
RelativePath="Bookkeeper.h">
</File>
<File
RelativePath="CharacterManager.cpp">
</File>
<File
RelativePath="CharacterManager.h">
</File>
<File
RelativePath="CryptManager.cpp">
</File>