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 )
{
case CODE_MIRROR: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_MIRROR, PlayerOptions::TURN_NONE ); break;
case CODE_LEFT: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_LEFT, PlayerOptions::TURN_NONE ); break;
case CODE_RIGHT: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_RIGHT, PlayerOptions::TURN_NONE ); break;
case CODE_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_SHUFFLE, PlayerOptions::TURN_NONE ); break;
case CODE_SUPER_SHUFFLE: TOGGLE( GAMESTATE->m_PlayerOptions[pn].m_Turn, PlayerOptions::TURN_SUPER_SHUFFLE, PlayerOptions::TURN_NONE ); break;
case CODE_MIRROR: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_MIRROR ); break;
case CODE_LEFT: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_LEFT ); break;
case CODE_RIGHT: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_RIGHT ); break;
case CODE_SHUFFLE: GAMESTATE->m_PlayerOptions[pn].ToggleOneTurn( PlayerOptions::TURN_SHUFFLE ); 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_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;
+6 -3
View File
@@ -424,10 +424,13 @@ void ConditionalBGA::CheckBgaRequirements(BgaCondInfo info)
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++)
{
bModsValid=false;
LOG->Info("Found Invalid Turn Mod");
if(po.m_bTurns[md] != 0.0f && GAMESTATE->m_PlayerOptions[pn].m_bTurns[md] != 0.0f)
{
bModsValid=false;
LOG->Info("Found Invalid Turn Mod");
}
}
for(md=0;md<PlayerOptions::NUM_TRANSFORMS;md++)
{
+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 )
{
switch( po.m_Turn )
{
case PlayerOptions::TURN_NONE: break;
case PlayerOptions::TURN_MIRROR: NoteDataUtil::Turn( nd, st, NoteDataUtil::mirror, fStartBeat, fEndBeat ); break;
case PlayerOptions::TURN_LEFT: NoteDataUtil::Turn( nd, st, NoteDataUtil::left, fStartBeat, fEndBeat ); break;
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);
}
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 );
if( po.m_bTurns[PlayerOptions::TURN_RIGHT] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::right, fStartBeat, fEndBeat );
if( po.m_bTurns[PlayerOptions::TURN_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::shuffle, fStartBeat, fEndBeat );
if( po.m_bTurns[PlayerOptions::TURN_SUPER_SHUFFLE] ) NoteDataUtil::Turn( nd, st, NoteDataUtil::super_shuffle, fStartBeat, fEndBeat );
// apply little before others
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_fSkew = 0; m_SpeedfSkew = 1.0f;
m_fPassmark = 0; m_SpeedfPassmark = 1.0f;
m_Turn = TURN_NONE;
ZERO( m_bTurns );
ZERO( m_bTransforms );
m_bTimingAssist = false;
m_bProTiming = false;
@@ -135,16 +135,11 @@ CString PlayerOptions::GetString() const
sReturn += AddPart( m_fPassmark, "Passmark");
switch( m_Turn )
{
case TURN_NONE: break;
case TURN_MIRROR: sReturn += "Mirror, "; break;
case TURN_LEFT: sReturn += "Left, "; break;
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_bTurns[TURN_MIRROR] ) sReturn += "Mirror, ";
if( m_bTurns[TURN_LEFT] ) sReturn += "Left, ";
if( m_bTurns[TURN_RIGHT] ) sReturn += "Right, ";
if( m_bTurns[TURN_SHUFFLE] ) sReturn += "Shuffle, ";
if( m_bTurns[TURN_SUPER_SHUFFLE] ) sReturn += "SuperShuffle, ";
if( m_bTransforms[TRANSFORM_NOHOLDS] ) sReturn += "NoHolds, ";
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 == "blink" ) SET_FLOAT( fAppearances[APPEARANCE_BLINK] )
else if( sBit == "randomvanish" ) SET_FLOAT( fAppearances[APPEARANCE_RANDOMVANISH] )
else if( sBit == "turn" && !on )m_Turn = TURN_NONE; /* "no turn" */
else if( sBit == "mirror" ) m_Turn = TURN_MIRROR;
else if( sBit == "left" ) m_Turn = TURN_LEFT;
else if( sBit == "right" ) m_Turn = TURN_RIGHT;
else if( sBit == "shuffle" ) m_Turn = TURN_SHUFFLE;
else if( sBit == "supershuffle" )m_Turn = TURN_SUPER_SHUFFLE;
else if( sBit == "turn" && !on ) ZERO( m_bTurns ); /* "no turn" */
else if( sBit == "mirror" ) m_bTurns[TURN_MIRROR] = on;
else if( sBit == "left" ) m_bTurns[TURN_LEFT] = on;
else if( sBit == "right" ) m_bTurns[TURN_RIGHT] = on;
else if( sBit == "shuffle" ) m_bTurns[TURN_SHUFFLE] = on;
else if( sBit == "supershuffle" )m_bTurns[TURN_SUPER_SHUFFLE] = on;
else if( sBit == "little" ) m_bTransforms[TRANSFORM_LITTLE] = on;
else if( sBit == "wide" ) m_bTransforms[TRANSFORM_WIDE] = 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 )
{
int index = -1;
@@ -342,6 +336,28 @@ void NextFloat( float fValues[], int size )
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()
{
NextFloat( m_fAccels, NUM_ACCELS );
@@ -359,13 +375,12 @@ void PlayerOptions::NextAppearance()
void PlayerOptions::NextTurn()
{
m_Turn = (Turn) ((m_Turn+1)%NUM_TURNS);
NextBool( m_bTurns, NUM_TURNS );
}
void PlayerOptions::NextTransform()
{
// It's dumb to use a code to change transforms because there are so many of them. -Chris
//m_Transforms = (Transform) ((m_Transform+1)%NUM_TRANSFORMS);
NextBool( m_bTransforms, NUM_TRANSFORMS );
}
void PlayerOptions::NextScroll()
@@ -460,6 +475,13 @@ void PlayerOptions::SetOneScroll( Scroll s )
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 f = 0;
@@ -493,7 +515,6 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const
COMPARE(m_fScrollBPM);
COMPARE(m_fDark);
COMPARE(m_fBlind);
COMPARE(m_Turn);
COMPARE(m_bTimingAssist);
COMPARE(m_bProTiming);
COMPARE(m_fPerspectiveTilt);
@@ -509,6 +530,8 @@ bool PlayerOptions::operator==( const PlayerOptions &other ) const
COMPARE(m_fAppearances[i]);
for( i = 0; i < PlayerOptions::NUM_SCROLLS; ++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 )
COMPARE(m_bTransforms[i]);
#undef COMPARE
+2 -1
View File
@@ -109,7 +109,7 @@ struct PlayerOptions
* the song to pass. This is independent of SongOptions::m_FailType. */
float m_fPassmark, m_SpeedfPassmark;
Turn m_Turn;
bool m_bTurns[NUM_TURNS];
bool m_bTransforms[NUM_TRANSFORMS];
bool m_bTimingAssist;
bool m_bProTiming;
@@ -133,6 +133,7 @@ struct PlayerOptions
void SetOneEffect( Effect e );
void SetOneAppearance( Appearance a );
void SetOneScroll( Scroll s );
void ToggleOneTurn( Turn t );
};
#endif