#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 CommonMetrics::OPERATOR_MENU_SCREEN ("Common","OperatorMenuScreen"); ThemeMetric CommonMetrics::FIRST_ATTRACT_SCREEN ("Common","FirstAttractScreen"); ThemeMetric CommonMetrics::DEFAULT_MODIFIERS ("Common","DefaultModifiers" ); LocalizedString CommonMetrics::WINDOW_TITLE ("Common","WindowTitle"); ThemeMetric CommonMetrics::MAX_COURSE_ENTRIES_BEFORE_VARIOUS("Common","MaxCourseEntriesBeforeShowVarious"); ThemeMetric CommonMetrics::TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); ThemeMetric 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"); ThemeMetric CommonMetrics::AUTO_SET_STYLE ("Common","AutoSetStyle"); ThemeMetric CommonMetrics::PERCENT_SCORE_DECIMAL_PLACES ("Common","PercentScoreDecimalPlaces"); ThemeMetricDifficultiesToShow::ThemeMetricDifficultiesToShow( const RString& sGroup, const RString& sName ) : ThemeMetric(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::Read(); m_v.clear(); vector v; split( ThemeMetric::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& ThemeMetricDifficultiesToShow::GetValue() const { return m_v; } ThemeMetricCourseDifficultiesToShow::ThemeMetricCourseDifficultiesToShow( const RString& sGroup, const RString& sName ) : ThemeMetric(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::Read(); m_v.clear(); vector v; split( ThemeMetric::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& ThemeMetricCourseDifficultiesToShow::GetValue() const { return m_v; } static void RemoveStepsTypes( vector& inout, RString sStepsTypesToRemove ) { vector 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::iterator iter = find( inout.begin(), inout.end(), st ); if( iter != inout.end() ) inout.erase( iter ); } } ThemeMetricStepsTypesToShow::ThemeMetricStepsTypesToShow( const RString& sGroup, const RString& sName ) : ThemeMetric(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::Read(); m_v.clear(); GAMEMAN->GetStepsTypesForGame( GAMESTATE->m_pCurGame, m_v ); RemoveStepsTypes( m_v, ThemeMetric::GetValue() ); } const vector& 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. */