2010-01-26 21:00:30 -06:00
# include "global.h"
# include "CommonMetrics.h"
# include "RageUtil.h"
# include "Foreach.h"
# include "GameManager.h"
# include "RageLog.h"
# include "GameState.h"
# include "ProductInfo.h"
# include "LuaManager.h"
ThemeMetric < RString > CommonMetrics : : FIRST_ATTRACT_SCREEN ( " Common " , " FirstAttractScreen " ) ;
ThemeMetric < RString > CommonMetrics : : DEFAULT_MODIFIERS ( " Common " , " DefaultModifiers " ) ;
LocalizedString CommonMetrics : : WINDOW_TITLE ( " Common " , " WindowTitle " ) ;
ThemeMetric < int > CommonMetrics : : MAX_COURSE_ENTRIES_BEFORE_VARIOUS ( " Common " , " MaxCourseEntriesBeforeShowVarious " ) ;
ThemeMetric < float > CommonMetrics : : TICK_EARLY_SECONDS ( " ScreenGameplay " , " TickEarlySeconds " ) ;
ThemeMetric < RString > CommonMetrics : : DEFAULT_NOTESKIN_NAME ( " Common " , " DefaultNoteSkinName " ) ;
ThemeMetricDifficultiesToShow CommonMetrics : : DIFFICULTIES_TO_SHOW ( " Common " , " DifficultiesToShow " ) ;
ThemeMetricCourseDifficultiesToShow CommonMetrics : : COURSE_DIFFICULTIES_TO_SHOW ( " Common " , " CourseDifficultiesToShow " ) ;
ThemeMetricStepsTypesToShow CommonMetrics : : STEPS_TYPES_TO_SHOW ( " Common " , " StepsTypesToHide " ) ; // This metric takes a list of StepsTypes to hide and returns a list of StepsTypes to show
ThemeMetric < bool > CommonMetrics : : AUTO_SET_STYLE ( " Common " , " AutoSetStyle " ) ;
ThemeMetric < int > CommonMetrics : : PERCENT_SCORE_DECIMAL_PLACES ( " Common " , " PercentScoreDecimalPlaces " ) ;
ThemeMetricDifficultiesToShow : : ThemeMetricDifficultiesToShow ( const RString & sGroup , const RString & sName ) :
ThemeMetric < RString > ( sGroup , sName )
{
// re-read because ThemeMetric::ThemeMetric calls ThemeMetric::Read, not the derived one
if ( IsLoaded ( ) )
Read ( ) ;
}
void ThemeMetricDifficultiesToShow : : Read ( )
{
ASSERT ( GetName ( ) . Right ( 6 ) = = " ToShow " ) ;
ThemeMetric < RString > : : Read ( ) ;
m_v . clear ( ) ;
vector < RString > v ;
split ( ThemeMetric < RString > : : GetValue ( ) , " , " , v ) ;
ASSERT ( v . size ( ) > 0 ) ;
FOREACH_CONST ( RString , v , i )
{
Difficulty d = StringToDifficulty ( * i ) ;
if ( d = = Difficulty_Invalid )
RageException : : Throw ( " Unknown difficulty \" %s \" in CourseDifficultiesToShow. " , i - > c_str ( ) ) ;
m_v . push_back ( d ) ;
}
}
const vector < Difficulty > & ThemeMetricDifficultiesToShow : : GetValue ( ) const { return m_v ; }
ThemeMetricCourseDifficultiesToShow : : ThemeMetricCourseDifficultiesToShow ( const RString & sGroup , const RString & sName ) :
ThemeMetric < RString > ( sGroup , sName )
{
// re-read because ThemeMetric::ThemeMetric calls ThemeMetric::Read, not the derived one
if ( IsLoaded ( ) )
Read ( ) ;
}
void ThemeMetricCourseDifficultiesToShow : : Read ( )
{
ASSERT ( GetName ( ) . Right ( 6 ) = = " ToShow " ) ;
ThemeMetric < RString > : : Read ( ) ;
m_v . clear ( ) ;
vector < RString > v ;
split ( ThemeMetric < RString > : : GetValue ( ) , " , " , v ) ;
ASSERT ( v . size ( ) > 0 ) ;
FOREACH_CONST ( RString , v , i )
{
CourseDifficulty d = StringToDifficulty ( * i ) ;
if ( d = = Difficulty_Invalid )
RageException : : Throw ( " Unknown CourseDifficulty \" %s \" in CourseDifficultiesToShow. " , i - > c_str ( ) ) ;
m_v . push_back ( d ) ;
}
}
const vector < CourseDifficulty > & ThemeMetricCourseDifficultiesToShow : : GetValue ( ) const { return m_v ; }
static void RemoveStepsTypes ( vector < StepsType > & inout , RString sStepsTypesToRemove )
{
vector < RString > v ;
split ( sStepsTypesToRemove , " , " , v ) ;
ASSERT ( v . size ( ) > 0 ) ;
// subtract StepsTypes
FOREACH_CONST ( RString , v , i )
{
StepsType st = GAMEMAN - > StringToStepsType ( * i ) ;
if ( st = = StepsType_Invalid )
{
LOG - > Warn ( " Invalid StepsType value '%s' in '%s' " , i - > c_str ( ) , sStepsTypesToRemove . c_str ( ) ) ;
continue ;
}
const vector < StepsType > : : iterator iter = find ( inout . begin ( ) , inout . end ( ) , st ) ;
if ( iter ! = inout . end ( ) )
inout . erase ( iter ) ;
}
}
ThemeMetricStepsTypesToShow : : ThemeMetricStepsTypesToShow ( const RString & sGroup , const RString & sName ) :
ThemeMetric < RString > ( sGroup , sName )
{
// re-read because ThemeMetric::ThemeMetric calls ThemeMetric::Read, not the derived one
if ( IsLoaded ( ) )
Read ( ) ;
}
void ThemeMetricStepsTypesToShow : : Read ( )
{
ASSERT ( GetName ( ) . Right ( 6 ) = = " ToHide " ) ;
ThemeMetric < RString > : : Read ( ) ;
m_v . clear ( ) ;
GAMEMAN - > GetStepsTypesForGame ( GAMESTATE - > m_pCurGame , m_v ) ;
RemoveStepsTypes ( m_v , ThemeMetric < RString > : : GetValue ( ) ) ;
}
const vector < StepsType > & ThemeMetricStepsTypesToShow : : GetValue ( ) const { return m_v ; }
RString CommonMetrics : : LocalizeOptionItem ( const RString & s , bool bOptional )
{
if ( bOptional & & ! THEME - > HasString ( " OptionNames " , s ) )
return s ;
return THEME - > GetString ( " OptionNames " , s ) ;
}
LuaFunction ( LocalizeOptionItem , CommonMetrics : : LocalizeOptionItem ( SArg ( 1 ) , true ) ) ;
/*
* (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.
*/