diff --git a/stepmania/src/CodeSet.cpp b/stepmania/src/CodeSet.cpp new file mode 100644 index 0000000000..23645c6e1d --- /dev/null +++ b/stepmania/src/CodeSet.cpp @@ -0,0 +1,79 @@ +#include "global.h" +#include "CodeSet.h" +#include "ThemeManager.h" +#include "InputEventPlus.h" +#include "MessageManager.h" + +#define CODE_NAMES THEME->GetMetric (sType,"CodeNames") +#define CODE( s ) THEME->GetMetric (sType,ssprintf("Code%s",s.c_str())) +void InputQueueCodeSet::Load( const RString &sType ) +{ + // + // Load codes + // + split( CODE_NAMES, ",", m_asCodeNames, true ); + + for( unsigned c=0; c asBits; + split( m_asCodeNames[c], "=", asBits, true ); + RString sCodeName = asBits[0]; + if( asBits.size() > 1 ) + m_asCodeNames[c] = asBits[1]; + + InputQueueCode code; + if( !code.Load(CODE(sCodeName)) ) + continue; + + m_aCodes.push_back( code ); + } +} + +RString InputQueueCodeSet::Input( const InputEventPlus &input ) const +{ + for( unsigned i = 0; i < m_aCodes.size(); ++i ) + { + if( !m_aCodes[i].EnteredCode(input.GameI.controller) ) + continue; + + return m_asCodeNames[i]; + } + return ""; +} + +bool InputQueueCodeSet::InputMessage( const InputEventPlus &input, Message &msg ) const +{ + RString sCodeName = Input( input ); + if( sCodeName.empty() ) + return false; + + msg = Message("Code"); + msg.SetParam( "PlayerNumber", input.pn ); + msg.SetParam( "Name", sCodeName ); + return true; +} + +/* + * (c) 2007 Glenn Maynard + * 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/CodeSet.h b/stepmania/src/CodeSet.h new file mode 100644 index 0000000000..9da45ad45a --- /dev/null +++ b/stepmania/src/CodeSet.h @@ -0,0 +1,44 @@ +#ifndef CODE_SET_H +#define CODE_SET_H + +#include "InputQueue.h" + +struct Message; +class InputQueueCodeSet +{ +public: + void Load( const RString &sType ); + RString Input( const InputEventPlus &input ) const; + bool InputMessage( const InputEventPlus &input, Message &msg ) const; + +private: + vector m_aCodes; + vector m_asCodeNames; +}; + +#endif + +/* + * (c) 2007 Glenn Maynard + * 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/Screen.cpp b/stepmania/src/Screen.cpp index 605770eb55..60d760db9c 100644 --- a/stepmania/src/Screen.cpp +++ b/stepmania/src/Screen.cpp @@ -13,8 +13,6 @@ #define PREPARE_SCREENS THEME->GetMetric (m_sName,"PrepareScreens") #define PERSIST_SCREENS THEME->GetMetric (m_sName,"PersistScreens") #define GROUPED_SCREENS THEME->GetMetric (m_sName,"GroupedScreens") -#define CODE_NAMES THEME->GetMetric (m_sName,"CodeNames") -#define CODE( s ) THEME->GetMetric (m_sName,ssprintf("Code%s",s.c_str())) void Screen::InitScreen( Screen *pScreen ) { @@ -38,27 +36,7 @@ void Screen::Init() REPEAT_RATE.Load( m_sName, "RepeatRate" ); REPEAT_DELAY.Load( m_sName, "RepeatDelay" ); - // - // Load codes - // - { - split( CODE_NAMES, ",", m_asCodeNames, true ); - - for( unsigned c=0; c asBits; - split( m_asCodeNames[c], "=", asBits, true ); - RString sCodeName = asBits[0]; - if( asBits.size() > 1 ) - m_asCodeNames[c] = asBits[1]; - - InputQueueCode code; - if( !code.Load(CODE(sCodeName)) ) - continue; - - m_aCodes.push_back( code ); - } - } + m_Codes.Load( m_sName ); SetFOV( 0 ); @@ -184,16 +162,9 @@ bool Screen::OverlayInput( const InputEventPlus &input ) void Screen::Input( const InputEventPlus &input ) { - for( unsigned i = 0; i < m_aCodes.size(); ++i ) - { - if( !m_aCodes[i].EnteredCode(input.GameI.controller) ) - continue; - - Message msg("Code"); - msg.SetParam( "PlayerNumber", input.pn ); - msg.SetParam( "Name", m_asCodeNames[i] ); + Message msg(""); + if( m_Codes.InputMessage(input, msg) ) this->HandleMessage( msg ); - } /* Don't send release messages with the default handler. */ switch( input.type ) diff --git a/stepmania/src/Screen.h b/stepmania/src/Screen.h index e9cbb1ced2..27f03e234e 100644 --- a/stepmania/src/Screen.h +++ b/stepmania/src/Screen.h @@ -9,6 +9,7 @@ #include "ThemeMetric.h" #include "PlayerNumber.h" #include "InputQueue.h" +#include "CodeSet.h" class InputEventPlus; class Screen; @@ -72,8 +73,7 @@ protected: vector m_QueuedMessages; static bool SortMessagesByDelayRemaining(const QueuedScreenMessage &m1, const QueuedScreenMessage &m2); - vector m_aCodes; - vector m_asCodeNames; + InputQueueCodeSet m_Codes; ThemeMetric ALLOW_OPERATOR_MENU_BUTTON; ThemeMetric REPEAT_RATE;