make Turns multi-selectable

This commit is contained in:
Chris Danford
2004-03-01 00:09:07 +00:00
parent dac8a9231d
commit d733b7a7b2
5 changed files with 63 additions and 41 deletions
+5 -5
View File
@@ -244,11 +244,11 @@ bool CodeDetector::DetectAndAdjustMusicOptions( GameController controller )
{ {
switch( code ) switch( code )
{ {
case CODE_MIRROR: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_MIRROR, PlayerOptions::TURN_NONE ); break; case CODE_MIRROR: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_MIRROR ); break;
case CODE_LEFT: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_LEFT, PlayerOptions::TURN_NONE ); break; case CODE_LEFT: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_LEFT ); break;
case CODE_RIGHT: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_RIGHT, PlayerOptions::TURN_NONE ); break; case CODE_RIGHT: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_RIGHT ); break;
case CODE_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_SHUFFLE, PlayerOptions::TURN_NONE ); break; case CODE_SHUFFLE: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_SHUFFLE ); break;
case CODE_SUPER_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_SUPER_SHUFFLE, PlayerOptions::TURN_NONE ); break; case CODE_SUPER_SHUFFLE: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_SUPER_SHUFFLE ); break;
case CODE_NEXT_TRANSFORM: GAMESTATE->m_PlayerOptions[pn].NextTransform(); break; case CODE_NEXT_TRANSFORM: GAMESTATE->m_PlayerOptions[pn].NextTransform(); break;
case CODE_NEXT_SCROLL_SPEED:INCREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed ); break; case CODE_NEXT_SCROLL_SPEED:INCREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed ); break;
case CODE_PREVIOUS_SCROLL_SPEED:DECREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed ); break; case CODE_PREVIOUS_SCROLL_SPEED:DECREMENT_SCROLL_SPEED( GAMESTATE->m_PlayerOptions[pn].m_fScrollSpeed ); break;
+4 -1
View File
@@ -424,11 +424,14 @@ void ConditionalBGA::CheckBgaRequirements(BgaCondInfo info)
LOG->Info("Found Invalid Appearance Mod"); LOG->Info("Found Invalid Appearance Mod");
} }
} }
if((po.m_Turn != PlayerOptions::TURN_NONE) && (po.m_Turn == GAMESTATE->m_PlayerOptions[pn].m_Turn)) for(md=0;md<PlayerOptions::NUM_TURNS;md++)
{
if(po.m_bTurns[md] != 0.0f && GAMESTATE->m_PlayerOptions[pn].m_bTurns[md] != 0.0f)
{ {
bModsValid=false; bModsValid=false;
LOG->Info("Found Invalid Turn Mod"); LOG->Info("Found Invalid Turn Mod");
} }
}
for(md=0;md<PlayerOptions::NUM_TRANSFORMS;md++) for(md=0;md<PlayerOptions::NUM_TRANSFORMS;md++)
{ {
if(po.m_bTransforms[md] != 0.0f && GAMESTATE->m_PlayerOptions[pn].m_bTransforms[md] != 0.0f) if(po.m_bTransforms[md] != 0.0f && GAMESTATE->m_PlayerOptions[pn].m_bTransforms[md] != 0.0f)
+5 -10
View File
@@ -1369,16 +1369,11 @@ void NoteDataUtil::ConvertAdditionsToRegular( NoteData &in )
void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, StepsType st, float fStartBeat, float fEndBeat ) void NoteDataUtil::TransformNoteData( NoteData &nd, const PlayerOptions &po, StepsType st, float fStartBeat, float fEndBeat )
{ {
switch( po.m_Turn ) if( po.m_bTurns[PlayerOptions::TURN_MIRROR] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::mirror, fStartBeat, fEndBeat );
{ if( po.m_bTurns[PlayerOptions::TURN_LEFT] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::left, fStartBeat, fEndBeat );
case PlayerOptions::TURN_NONE: break; if( po.m_bTurns[PlayerOptions::TURN_RIGHT] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::right, fStartBeat, fEndBeat );
case PlayerOptions::TURN_MIRROR: NoteDataUtil::Turn( nd, st, NoteDataUtil::mirror, fStartBeat, fEndBeat ); break; if( po.m_bTurns[PlayerOptions::TURN_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::shuffle, fStartBeat, fEndBeat );
case PlayerOptions::TURN_LEFT: NoteDataUtil::Turn( nd, st, NoteDataUtil::left, fStartBeat, fEndBeat ); break; if( po.m_bTurns[PlayerOptions::TURN_SUPER_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::super_shuffle, fStartBeat, fEndBeat );
case PlayerOptions::TURN_RIGHT: NoteDataUtil::Turn( nd, st, NoteDataUtil::right, fStartBeat, fEndBeat ); break;
case PlayerOptions::TURN_SHUFFLE: NoteDataUtil::Turn( nd, st, NoteDataUtil::shuffle, fStartBeat, fEndBeat ); break;
case PlayerOptions::TURN_SUPER_SHUFFLE: NoteDataUtil::Turn( nd, st, NoteDataUtil::super_shuffle, fStartBeat, fEndBeat ); break;
default: ASSERT(0);
}
// apply little before others // apply little before others
if( po.m_bTransforms[PlayerOptions::TRANSFORM_LITTLE] ) NoteDataUtil::Little(nd, fStartBeat, fEndBeat); if( po.m_bTransforms[PlayerOptions::TRANSFORM_LITTLE] ) NoteDataUtil::Little(nd, fStartBeat, fEndBeat);
+45 -22
View File
@@ -35,7 +35,7 @@ void PlayerOptions::Init()
m_fPerspectiveTilt = 0; m_SpeedfPerspectiveTilt = 1.0f; m_fPerspectiveTilt = 0; m_SpeedfPerspectiveTilt = 1.0f;
m_fSkew = 0; m_SpeedfSkew = 1.0f; m_fSkew = 0; m_SpeedfSkew = 1.0f;
m_fPassmark = 0; m_SpeedfPassmark = 1.0f; m_fPassmark = 0; m_SpeedfPassmark = 1.0f;
m_Turn = TURN_NONE; ZERO( m_bTurns );
ZERO( m_bTransforms ); ZERO( m_bTransforms );
m_bTimingAssist = false; m_bTimingAssist = false;
m_bProTiming = false; m_bProTiming = false;
@@ -135,16 +135,11 @@ CString PlayerOptions::GetString() const
sReturn += AddPart( m_fPassmark, "Passmark"); sReturn += AddPart( m_fPassmark, "Passmark");
switch( m_Turn ) if( m_bTurns[TURN_MIRROR] ) sReturn += "Mirror, ";
{ if( m_bTurns[TURN_LEFT] ) sReturn += "Left, ";
case TURN_NONE: break; if( m_bTurns[TURN_RIGHT] ) sReturn += "Right, ";
case TURN_MIRROR: sReturn += "Mirror, "; break; if( m_bTurns[TURN_SHUFFLE] ) sReturn += "Shuffle, ";
case TURN_LEFT: sReturn += "Left, "; break; if( m_bTurns[TURN_SUPER_SHUFFLE] ) sReturn += "SuperShuffle, ";
case TURN_RIGHT: sReturn += "Right, "; break;
case TURN_SHUFFLE: sReturn += "Shuffle, "; break;
case TURN_SUPER_SHUFFLE:sReturn += "SuperShuffle, ";break;
default: ASSERT(0); // invalid
}
if( m_bTransforms[TRANSFORM_NOHOLDS] ) sReturn += "NoHolds, "; if( m_bTransforms[TRANSFORM_NOHOLDS] ) sReturn += "NoHolds, ";
if( m_bTransforms[TRANSFORM_NOMINES] ) sReturn += "NoMines, "; if( m_bTransforms[TRANSFORM_NOMINES] ) sReturn += "NoMines, ";
@@ -271,12 +266,12 @@ void PlayerOptions::FromString( CString sOptions )
else if( sBit == "stealth" ) SET_FLOAT( fAppearances[APPEARANCE_STEALTH] ) else if( sBit == "stealth" ) SET_FLOAT( fAppearances[APPEARANCE_STEALTH] )
else if( sBit == "blink" ) SET_FLOAT( fAppearances[APPEARANCE_BLINK] ) else if( sBit == "blink" ) SET_FLOAT( fAppearances[APPEARANCE_BLINK] )
else if( sBit == "randomvanish" ) SET_FLOAT( fAppearances[APPEARANCE_RANDOMVANISH] ) else if( sBit == "randomvanish" ) SET_FLOAT( fAppearances[APPEARANCE_RANDOMVANISH] )
else if( sBit == "turn" && !on )m_Turn = TURN_NONE; /* "no turn" */ else if( sBit == "turn" && !on ) ZERO( m_bTurns ); /* "no turn" */
else if( sBit == "mirror" ) m_Turn = TURN_MIRROR; else if( sBit == "mirror" ) m_bTurns[TURN_MIRROR] = on;
else if( sBit == "left" ) m_Turn = TURN_LEFT; else if( sBit == "left" ) m_bTurns[TURN_LEFT] = on;
else if( sBit == "right" ) m_Turn = TURN_RIGHT; else if( sBit == "right" ) m_bTurns[TURN_RIGHT] = on;
else if( sBit == "shuffle" ) m_Turn = TURN_SHUFFLE; else if( sBit == "shuffle" ) m_bTurns[TURN_SHUFFLE] = on;
else if( sBit == "supershuffle" )m_Turn = TURN_SUPER_SHUFFLE; else if( sBit == "supershuffle" )m_bTurns[TURN_SUPER_SHUFFLE] = on;
else if( sBit == "little" ) m_bTransforms[TRANSFORM_LITTLE] = on; else if( sBit == "little" ) m_bTransforms[TRANSFORM_LITTLE] = on;
else if( sBit == "wide" ) m_bTransforms[TRANSFORM_WIDE] = on; else if( sBit == "wide" ) m_bTransforms[TRANSFORM_WIDE] = on;
else if( sBit == "big" ) m_bTransforms[TRANSFORM_BIG] = on; else if( sBit == "big" ) m_bTransforms[TRANSFORM_BIG] = on;
@@ -319,7 +314,6 @@ void PlayerOptions::FromString( CString sOptions )
} }
} }
void NextFloat( float fValues[], int size ) void NextFloat( float fValues[], int size )
{ {
int index = -1; int index = -1;
@@ -342,6 +336,28 @@ void NextFloat( float fValues[], int size )
fValues[index+1] = 1; fValues[index+1] = 1;
} }
void NextBool( bool bValues[], int size )
{
int index = -1;
int i;
for( i=0; i<size; i++ )
{
if( bValues[i] )
{
index = i;
break;
}
}
for( i=0; i<size; i++ )
bValues[i] = false;
if( index == size-1 ) // if true, then the last float in the list was selected
; // leave all off
else
bValues[index+1] = 1;
}
void PlayerOptions::NextAccel() void PlayerOptions::NextAccel()
{ {
NextFloat( m_fAccels, NUM_ACCELS ); NextFloat( m_fAccels, NUM_ACCELS );
@@ -359,13 +375,12 @@ void PlayerOptions::NextAppearance()
void PlayerOptions::NextTurn() void PlayerOptions::NextTurn()
{ {
m_Turn = (Turn) ((m_Turn+1)%NUM_TURNS); NextBool( m_bTurns, NUM_TURNS );
} }
void PlayerOptions::NextTransform() void PlayerOptions::NextTransform()
{ {
// It's dumb to use a code to change transforms because there are so many of them. -Chris NextBool( m_bTransforms, NUM_TRANSFORMS );
//m_Transforms = (Transform) ((m_Transform+1)%NUM_TRANSFORMS);
} }
void PlayerOptions::NextScroll() void PlayerOptions::NextScroll()
@@ -460,6 +475,13 @@ void PlayerOptions::SetOneScroll( Scroll s )
m_fScrolls[s] = 1; m_fScrolls[s] = 1;
} }
void PlayerOptions::ToggleOneTurn( Turn t )
{
bool bWasOn = m_bTurns[t];
ZERO( m_bTurns );
m_bTurns[t] = !bWasOn;
}
float PlayerOptions::GetReversePercentForColumn( int iCol ) float PlayerOptions::GetReversePercentForColumn( int iCol )
{ {
float f = 0; float f = 0;
@@ -493,7 +515,6 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const
COMPARE(m_fScrollBPM); COMPARE(m_fScrollBPM);
COMPARE(m_fDark); COMPARE(m_fDark);
COMPARE(m_fBlind); COMPARE(m_fBlind);
COMPARE(m_Turn);
COMPARE(m_bTimingAssist); COMPARE(m_bTimingAssist);
COMPARE(m_bProTiming); COMPARE(m_bProTiming);
COMPARE(m_fPerspectiveTilt); COMPARE(m_fPerspectiveTilt);
@@ -509,6 +530,8 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const
COMPARE(m_fAppearances[i]); COMPARE(m_fAppearances[i]);
for( i = 0; i < PlayerOptions::NUM_SCROLLS; ++i ) for( i = 0; i < PlayerOptions::NUM_SCROLLS; ++i )
COMPARE(m_fScrolls[i]); COMPARE(m_fScrolls[i]);
for( i = 0; i < PlayerOptions::NUM_TURNS; ++i )
COMPARE(m_bTurns[i]);
for( i = 0; i < PlayerOptions::NUM_TRANSFORMS; ++i ) for( i = 0; i < PlayerOptions::NUM_TRANSFORMS; ++i )
COMPARE(m_bTransforms[i]); COMPARE(m_bTransforms[i]);
#undef COMPARE #undef COMPARE
+2 -1
View File
@@ -109,7 +109,7 @@ struct PlayerOptions
* the song to pass. This is independent of SongOptions::m_FailType. */ * the song to pass. This is independent of SongOptions::m_FailType. */
float m_fPassmark, m_SpeedfPassmark; float m_fPassmark, m_SpeedfPassmark;
Turn m_Turn; bool m_bTurns[NUM_TURNS];
bool m_bTransforms[NUM_TRANSFORMS]; bool m_bTransforms[NUM_TRANSFORMS];
bool m_bTimingAssist; bool m_bTimingAssist;
bool m_bProTiming; bool m_bProTiming;
@@ -133,6 +133,7 @@ struct PlayerOptions
void SetOneEffect( Effect e ); void SetOneEffect( Effect e );
void SetOneAppearance( Appearance a ); void SetOneAppearance( Appearance a );
void SetOneScroll( Scroll s ); void SetOneScroll( Scroll s );
void ToggleOneTurn( Turn t );
}; };
#endif #endif