2005-02-12 21:03:39 +00:00
#include "global.h"
#include "CommonMetrics.h"
#include "RageUtil.h"
2005-03-10 19:57:43 +00:00
#include "Foreach.h"
2005-03-24 21:44:03 +00:00
#include "GameManager.h"
#include "RageLog.h"
#include "GameState.h"
2006-01-13 00:28:48 +00:00
#include "ProductInfo.h"
2006-09-29 09:54:50 +00:00
#include "LuaManager.h"
2005-02-12 21:03:39 +00:00
2006-01-22 01:00:06 +00:00
static RString PLAYER_COLOR_NAME ( size_t p ) { return ssprintf ( "ColorP%dCommand" , int ( p + 1 )); }
2005-02-12 21:03:39 +00:00
2007-04-10 17:51:21 +00:00
ThemeMetric < RString > CommonMetrics :: INITIAL_SCREEN ( "Common" , "InitialScreen" );
2006-01-29 22:13:36 +00:00
ThemeMetric < RString > CommonMetrics :: FIRST_ATTRACT_SCREEN ( "Common" , "FirstAttractScreen" );
ThemeMetric < RString > CommonMetrics :: DEFAULT_MODIFIERS ( "Common" , "DefaultModifiers" );
ThemeMetric1D < apActorCommands > CommonMetrics :: PLAYER_COLOR ( "Common" , PLAYER_COLOR_NAME , NUM_PLAYERS );
LocalizedString CommonMetrics :: WINDOW_TITLE ( "Common" , "WindowTitle" );
ThemeMetric < int > CommonMetrics :: MAX_COURSE_ENTRIES_BEFORE_VARIOUS ( "Common" , "MaxCourseEntriesBeforeShowVarious" );
ThemeMetric < float > CommonMetrics :: TICK_EARLY_SECONDS ( "ScreenGameplay" , "TickEarlySeconds" );
2007-02-04 04:07:14 +00:00
ThemeMetric < RString > CommonMetrics :: DEFAULT_NOTESKIN_NAME ( "Common" , "DefaultNoteSkinName" );
2006-01-29 22:13:36 +00:00
ThemeMetricDifficultiesToShow CommonMetrics :: DIFFICULTIES_TO_SHOW ( "Common" , "DifficultiesToShow" );
ThemeMetricCourseDifficultiesToShow CommonMetrics :: COURSE_DIFFICULTIES_TO_SHOW ( "Common" , "CourseDifficultiesToShow" );
2007-02-26 06:04:52 +00:00
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
2007-03-06 10:05:51 +00:00
ThemeMetric < bool > CommonMetrics :: AUTO_SET_STYLE ( "Common" , "AutoSetStyle" );
2007-09-14 08:50:29 +00:00
ThemeMetric < int > CommonMetrics :: PERCENT_SCORE_DECIMAL_PLACES ( "Common" , "PercentScoreDecimalPlaces" );
2005-02-12 21:03:39 +00:00
2006-01-22 01:00:06 +00:00
ThemeMetricDifficultiesToShow :: ThemeMetricDifficultiesToShow ( const RString & sGroup , const RString & sName ) :
ThemeMetric < RString > ( sGroup , sName )
2005-03-10 19:57:43 +00:00
{
2005-03-27 00:32:25 +00:00
// re-read because ThemeMetric::ThemeMetric calls ThemeMetric::Read, not the derived one
if ( IsLoaded () )
Read ();
2005-03-24 21:44:03 +00:00
}
void ThemeMetricDifficultiesToShow :: Read ()
2005-03-10 19:57:43 +00:00
{
2005-10-07 03:24:22 +00:00
ASSERT ( GetName (). Right ( 6 ) == "ToShow" );
2006-01-22 01:00:06 +00:00
ThemeMetric < RString >:: Read ();
2005-03-10 19:57:43 +00:00
2005-03-24 21:44:03 +00:00
m_v . clear ();
2006-01-22 01:00:06 +00:00
vector < RString > v ;
split ( ThemeMetric < RString >:: GetValue (), "," , v );
2005-03-24 21:44:03 +00:00
ASSERT ( v . size () > 0 );
2006-01-22 01:00:06 +00:00
FOREACH_CONST ( RString , v , i )
2005-03-10 19:57:43 +00:00
{
2005-03-24 21:44:03 +00:00
Difficulty d = StringToDifficulty ( * i );
2006-10-07 04:39:48 +00:00
if ( d == Difficulty_Invalid )
2006-09-17 01:19:19 +00:00
RageException :: Throw ( "Unknown difficulty \" %s \" in CourseDifficultiesToShow." , i -> c_str () );
2005-03-24 21:44:03 +00:00
m_v . push_back ( d );
2005-03-10 19:57:43 +00:00
}
2005-03-24 21:44:03 +00:00
}
2006-09-02 19:33:49 +00:00
const vector < Difficulty >& ThemeMetricDifficultiesToShow :: GetValue () const { return m_v ; }
2005-03-24 21:44:03 +00:00
2006-01-22 01:00:06 +00:00
ThemeMetricCourseDifficultiesToShow :: ThemeMetricCourseDifficultiesToShow ( const RString & sGroup , const RString & sName ) :
ThemeMetric < RString > ( sGroup , sName )
2005-03-24 21:44:03 +00:00
{
2005-03-27 00:32:25 +00:00
// re-read because ThemeMetric::ThemeMetric calls ThemeMetric::Read, not the derived one
if ( IsLoaded () )
Read ();
2005-03-24 21:44:03 +00:00
}
void ThemeMetricCourseDifficultiesToShow :: Read ()
{
2005-10-07 03:24:22 +00:00
ASSERT ( GetName (). Right ( 6 ) == "ToShow" );
2006-01-22 01:00:06 +00:00
ThemeMetric < RString >:: Read ();
2005-03-24 21:44:03 +00:00
m_v . clear ();
2006-01-22 01:00:06 +00:00
vector < RString > v ;
split ( ThemeMetric < RString >:: GetValue (), "," , v );
2005-03-24 21:44:03 +00:00
ASSERT ( v . size () > 0 );
2006-01-22 01:00:06 +00:00
FOREACH_CONST ( RString , v , i )
2005-03-24 21:44:03 +00:00
{
2006-10-07 22:42:47 +00:00
CourseDifficulty d = StringToDifficulty ( * i );
2006-10-07 22:33:24 +00:00
if ( d == Difficulty_Invalid )
2006-09-17 01:19:19 +00:00
RageException :: Throw ( "Unknown CourseDifficulty \" %s \" in CourseDifficultiesToShow." , i -> c_str () );
2005-03-24 21:44:03 +00:00
m_v . push_back ( d );
}
}
2006-09-02 19:33:49 +00:00
const vector < CourseDifficulty >& ThemeMetricCourseDifficultiesToShow :: GetValue () const { return m_v ; }
2005-03-24 21:44:03 +00:00
2006-01-22 01:00:06 +00:00
static void RemoveStepsTypes ( vector < StepsType >& inout , RString sStepsTypesToRemove )
2005-03-24 21:44:03 +00:00
{
2006-01-22 01:00:06 +00:00
vector < RString > v ;
2005-03-24 21:44:03 +00:00
split ( sStepsTypesToRemove , "," , v );
ASSERT ( v . size () > 0 );
// subtract StepsTypes
2006-01-22 01:00:06 +00:00
FOREACH_CONST ( RString , v , i )
2005-03-24 21:44:03 +00:00
{
StepsType st = GameManager :: StringToStepsType ( * i );
2006-09-26 20:28:46 +00:00
if ( st == StepsType_Invalid )
2007-06-01 05:04:01 +00:00
{
2005-03-24 21:44:03 +00:00
LOG -> Warn ( "Invalid StepsType value '%s' in '%s'" , i -> c_str (), sStepsTypesToRemove . c_str () );
2007-06-01 05:04:01 +00:00
continue ;
}
2005-03-24 21:44:03 +00:00
const vector < StepsType >:: iterator iter = find ( inout . begin (), inout . end (), st );
if ( iter != inout . end () )
inout . erase ( iter );
}
}
2006-01-22 01:00:06 +00:00
ThemeMetricStepsTypesToShow :: ThemeMetricStepsTypesToShow ( const RString & sGroup , const RString & sName ) :
ThemeMetric < RString > ( sGroup , sName )
2005-03-24 21:44:03 +00:00
{
2005-03-27 00:32:25 +00:00
// re-read because ThemeMetric::ThemeMetric calls ThemeMetric::Read, not the derived one
if ( IsLoaded () )
Read ();
2005-03-24 21:44:03 +00:00
}
void ThemeMetricStepsTypesToShow :: Read ()
{
2005-10-07 03:24:22 +00:00
ASSERT ( GetName (). Right ( 6 ) == "ToHide" );
2006-01-22 01:00:06 +00:00
ThemeMetric < RString >:: Read ();
2005-03-24 21:44:03 +00:00
m_v . clear ();
GAMEMAN -> GetStepsTypesForGame ( GAMESTATE -> m_pCurGame , m_v );
2006-01-22 01:00:06 +00:00
RemoveStepsTypes ( m_v , ThemeMetric < RString >:: GetValue () );
2005-03-24 21:44:03 +00:00
}
2006-09-02 19:33:49 +00:00
const vector < StepsType >& ThemeMetricStepsTypesToShow :: GetValue () const { return m_v ; }
2005-03-24 21:44:03 +00:00
2005-03-10 19:57:43 +00:00
2006-01-29 22:13:36 +00:00
RString CommonMetrics :: LocalizeOptionItem ( const RString & s , bool bOptional )
2005-03-20 20:16:32 +00:00
{
2006-06-24 05:13:54 +00:00
if ( bOptional && ! THEME -> HasString ( "OptionNames" , s ) )
2005-03-20 20:16:32 +00:00
return s ;
2006-01-08 18:40:20 +00:00
return THEME -> GetString ( "OptionNames" , s );
2005-03-20 20:16:32 +00:00
}
2005-03-10 19:57:43 +00:00
2006-06-24 05:13:54 +00:00
LuaFunction ( LocalizeOptionItem , CommonMetrics :: LocalizeOptionItem ( SArg ( 1 ), true ) );
2005-03-10 19:57:43 +00:00
2005-02-12 21:03:39 +00:00
/*
* (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.
*/