make Turns multi-selectable
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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++)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user