From 62c5e096f60801a5fac05ebcd4ae13de092783e8 Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Sat, 5 Aug 2006 05:50:11 +0000 Subject: [PATCH] Remove Toggle and make the members private. Now, when setting a lower level, it must be applied to the higher levels. --- stepmania/src/ModsGroup.h | 33 +++++++++++++++----------------- stepmania/src/ScreenEdit.cpp | 7 +++---- stepmania/src/ScreenGameplay.cpp | 2 +- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/stepmania/src/ModsGroup.h b/stepmania/src/ModsGroup.h index 050afbea11..7e6dc7ce2c 100644 --- a/stepmania/src/ModsGroup.h +++ b/stepmania/src/ModsGroup.h @@ -16,15 +16,16 @@ enum ModsLevel #define MODS_GROUP_ASSIGN( group, level, member, val ) \ (group).Assign( (level), &(group).GroupType::member, (val) ) #define MODS_GROUP_CALL( group, level, fun ) (group).Call( (level), &(group).GroupType::fun ) -#define MODS_GROUP_TOGGLE( group, level, member ) (group).Call( (level), &(group).GroupType::member ) template -struct ModsGroup +class ModsGroup { - typedef T GroupType; T m_[NUM_ModsLevel]; - RageTimer m_timer; - T m_current; // approaches ModsLevel_Song + RageTimer m_Timer; + T m_Current; // approaches ModsLevel_Song + +public: + typedef T GroupType; void Init() { @@ -35,15 +36,15 @@ struct ModsGroup { // Don't let the mod approach speed be affected by Tab. // TODO: Find a more elegant way of handling this. - fDelta = m_timer.GetDeltaTime(); - m_current.Approach( m_[ModsLevel_Song], fDelta ); + fDelta = m_Timer.GetDeltaTime(); + m_Current.Approach( m_[ModsLevel_Song], fDelta ); } template void Assign( ModsLevel level, U T::*member, const U &val ) { if( level != ModsLevel_Song ) - m_current.*member = val; + m_Current.*member = val; for( ; level < NUM_ModsLevel; enum_add(level, 1) ) m_[level].*member = val; } @@ -51,7 +52,7 @@ struct ModsGroup void Assign( ModsLevel level, const T &val ) { if( level != ModsLevel_Song ) - m_current = val; + m_Current = val; for( ; level < NUM_ModsLevel; enum_add(level, 1) ) m_[level] = val; } @@ -59,7 +60,7 @@ struct ModsGroup void Call( ModsLevel level, void (T::*fun)() ) { if( level != ModsLevel_Song ) - (m_current.*fun)(); + (m_Current.*fun)(); for( ; level < NUM_ModsLevel; enum_add(level, 1) ) (m_[level].*fun)(); } @@ -67,24 +68,20 @@ struct ModsGroup void FromString( ModsLevel level, const RString &str ) { if( level != ModsLevel_Song ) - m_current.FromString( str ); + m_Current.FromString( str ); for( ; level < NUM_ModsLevel; enum_add(level, 1) ) m_[level].FromString( str ); } - // This seems like a very strange thing to do. - void Toggle( ModsLevel level, bool T::*member ) + void SetCurrentToLevel( ModsLevel level ) { - if( level != ModsLevel_Song ) - m_current.*member ^= 1; - for( ; level < NUM_ModsLevel; enum_add(level, 1) ) - m_[level].*member ^= 1; + m_Current = m_[level]; } const T &GetPreferred() const { return m_[ModsLevel_Preferred]; } const T &GetStage() const { return m_[ModsLevel_Stage]; } const T &GetSong() const { return m_[ModsLevel_Song]; } - const T &GetCurrent() const { return m_current; } + const T &GetCurrent() const { return m_Current; } }; #endif diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index c6e2de67d4..e8c2a5046d 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -1389,7 +1389,7 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) DoHelp(); break; case EDIT_BUTTON_TOGGLE_ASSIST_TICK: - MODS_GROUP_TOGGLE( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_bAssistTick ); + MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_bAssistTick, !GAMESTATE->m_SongOptions.GetStage().m_bAssistTick ); break; case EDIT_BUTTON_OPEN_NEXT_STEPS: case EDIT_BUTTON_OPEN_PREV_STEPS: @@ -2028,7 +2028,7 @@ void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) TransitionEditState( STATE_EDITING ); break; case EDIT_BUTTON_TOGGLE_ASSIST_TICK: - MODS_GROUP_TOGGLE( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_bAssistTick ); + MODS_GROUP_ASSIGN( GAMESTATE->m_SongOptions, ModsLevel_Stage, m_bAssistTick, !GAMESTATE->m_SongOptions.GetStage().m_bAssistTick ); break; case EDIT_BUTTON_TOGGLE_AUTOPLAY: { @@ -2156,8 +2156,7 @@ void ScreenEdit::TransitionEditState( EditState em ) } /* Snap to current options. */ - - GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.m_current = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.GetStage(); + GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions.SetCurrentToLevel( ModsLevel_Stage ); } switch( em ) diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index 22ccc6b3e2..697f4007ed 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -975,7 +975,7 @@ void ScreenGameplay::SetupSong( int iSongIndex ) pi->GetPlayerState()->Update( 0 ); /* Hack: Course modifiers that are set to start immediately shouldn't tween on. */ - pi->GetPlayerState()->m_PlayerOptions.m_current = pi->GetPlayerState()->m_PlayerOptions.GetStage(); + pi->GetPlayerState()->m_PlayerOptions.SetCurrentToLevel( ModsLevel_Stage ); } }