add AutosyncMachine (shift + F6)

This commit is contained in:
Chris Danford
2005-04-11 04:50:39 +00:00
parent 42dbfa3557
commit ea31bb3f90
5 changed files with 70 additions and 21 deletions
+3 -2
View File
@@ -4043,10 +4043,11 @@ Rate,15=mod,1.7xmusic;name,1.7x
Rate,16=mod,1.8xmusic;name,1.8x
Rate,17=mod,1.9xmusic;name,1.9x
Rate,18=mod,2.0xmusic;name,2.0x
AutoAdjust=2;together
AutoAdjust=3;together
AutoAdjustDefault=
AutoAdjust,1=mod,no autosync;name,Off
AutoAdjust,2=mod,autosync;name,On
AutoAdjust,2=mod,autosyncsong;name,Sync Song
AutoAdjust,3=mod,autosyncmachine;name,Sync Machine
SaveScores=2;together
SaveScoresDefault=
SaveScores,1=mod,no savescore;name,Off
+22 -7
View File
@@ -1008,21 +1008,36 @@ void Player::HandleStep( int col, const RageTimer &tm, bool bHeld )
void Player::HandleAutosync(float fNoteOffset)
{
if( !GAMESTATE->m_SongOptions.m_bAutoSync )
if( GAMESTATE->m_SongOptions.m_AutosyncType == SongOptions::AUTOSYNC_OFF )
return;
m_fOffset[m_iOffsetSample++] = fNoteOffset;
if (m_iOffsetSample < SAMPLE_COUNT)
if( m_iOffsetSample < SAMPLE_COUNT )
return; /* need more */
const float mean = calc_mean(m_fOffset, m_fOffset+SAMPLE_COUNT);
const float stddev = calc_stddev(m_fOffset, m_fOffset+SAMPLE_COUNT);
const float mean = calc_mean( m_fOffset, m_fOffset+SAMPLE_COUNT );
const float stddev = calc_stddev( m_fOffset, m_fOffset+SAMPLE_COUNT );
if( stddev < .03 && stddev < fabsf(mean) ) // If they stepped with less than .03 error
{
switch( GAMESTATE->m_SongOptions.m_AutosyncType )
{
case SongOptions::AUTOSYNC_SONG:
GAMESTATE->m_pCurSong->m_Timing.m_fBeat0OffsetInSeconds += mean;
break;
case SongOptions::AUTOSYNC_MACHINE:
PREFSMAN->m_fGlobalOffsetSeconds = PREFSMAN->m_fGlobalOffsetSeconds + mean;
break;
default:
ASSERT(0);
}
if (stddev < .03 && stddev < fabsf(mean)) { //If they stepped with less than .03 error
GAMESTATE->m_pCurSong->m_Timing.m_fBeat0OffsetInSeconds += mean;
LOG->Trace("Offset corrected by %f. Error in steps: %f seconds.", mean, stddev);
} else
}
else
{
LOG->Trace("Offset NOT corrected. Average offset: %f seconds. Error: %f seconds.", mean, stddev);
}
m_iOffsetSample = 0;
}
+22 -6
View File
@@ -205,7 +205,7 @@ void ScreenGameplay::Init()
}
}
m_bChangedOffsetOrBPM = GAMESTATE->m_SongOptions.m_bAutoSync;
m_bChangedOffsetOrBPM = GAMESTATE->m_SongOptions.m_AutosyncType == SongOptions::AUTOSYNC_SONG;
m_DancingState = STATE_INTRO;
@@ -1800,9 +1800,20 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
this->HandleScreenMessage( SM_NotesEnded );
break;
case KEY_F6:
m_bChangedOffsetOrBPM = true;
GAMESTATE->m_SongOptions.m_bAutoSync = !GAMESTATE->m_SongOptions.m_bAutoSync; // toggle
UpdateAutoPlayText();
{
bool bHoldingShift =
INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT)) ||
INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT));
// toggle
if( GAMESTATE->m_SongOptions.m_AutosyncType != SongOptions::AUTOSYNC_OFF )
GAMESTATE->m_SongOptions.m_AutosyncType = SongOptions::AUTOSYNC_OFF;
else
GAMESTATE->m_SongOptions.m_AutosyncType = bHoldingShift ? SongOptions::AUTOSYNC_MACHINE : SongOptions::AUTOSYNC_SONG;
m_bChangedOffsetOrBPM |= !bHoldingShift;
UpdateAutoPlayText();
}
break;
case KEY_F7:
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
@@ -1934,8 +1945,13 @@ void ScreenGameplay::UpdateAutoPlayText()
if( PREFSMAN->m_bAutoPlay )
sText += "AutoPlay ";
if( GAMESTATE->m_SongOptions.m_bAutoSync )
sText += "AutoSync ";
switch( GAMESTATE->m_SongOptions.m_AutosyncType )
{
case SongOptions::AUTOSYNC_OFF: break;
case SongOptions::AUTOSYNC_SONG: sText += "AutosyncSong "; break;
case SongOptions::AUTOSYNC_MACHINE: sText += "AutosyncMachine "; break;
default: ASSERT(0);
}
if( sText.length() > 0 )
sText.resize( sText.length()-5 );
+15 -5
View File
@@ -11,7 +11,7 @@ void SongOptions::Init()
m_FailType = FAIL_IMMEDIATE;
m_bAssistTick = false;
m_fMusicRate = 1.0f;
m_bAutoSync = false;
m_AutosyncType = AUTOSYNC_OFF;
m_bSaveScore = true;
}
@@ -32,6 +32,7 @@ CString SongOptions::GetString() const
case LIFE_BATTERY:
sReturn += ssprintf( "%dLives, ", m_iBatteryLives );
break;
default: ASSERT(0);
}
@@ -41,6 +42,7 @@ CString SongOptions::GetString() const
case FAIL_COMBO_OF_30_MISSES: sReturn += "Fail30Misses, "; break;
case FAIL_END_OF_SONG: sReturn += "FailEndOfSong, "; break;
case FAIL_OFF: sReturn += "FailOff, "; break;
default: ASSERT(0);
}
if( m_fMusicRate != 1 )
@@ -51,8 +53,13 @@ CString SongOptions::GetString() const
sReturn += s + "xMusic, ";
}
if( m_bAutoSync )
sReturn += "AutoSync, ";
switch( m_AutosyncType )
{
case AUTOSYNC_OFF: break;
case AUTOSYNC_SONG: sReturn += "AutosyncSong, "; break;
case AUTOSYNC_MACHINE: sReturn += "AutosyncMachine, "; break;
default: ASSERT(0);
}
if( sReturn.GetLength() > 2 )
sReturn.erase( sReturn.GetLength()-2 ); // delete the trailing ", "
@@ -122,7 +129,10 @@ void SongOptions::FromString( CString sOptions )
}
else if( sBit == "assisttick" ) m_bAssistTick = on;
else if( sBit == "autosync" ) m_bAutoSync = on;
else if( sBit == "autosync" || sBit == "autosyncsong" )
m_AutosyncType = on ? AUTOSYNC_SONG : AUTOSYNC_OFF;
else if( sBit == "autosyncmachine" )
m_AutosyncType = on ? AUTOSYNC_MACHINE : AUTOSYNC_OFF;
else if( sBit == "savescore" ) m_bSaveScore = on;
else if( sBit == "bar" ) m_LifeType = LIFE_BAR;
else if( sBit == "battery" ) m_LifeType = LIFE_BATTERY;
@@ -138,7 +148,7 @@ bool SongOptions::operator==( const SongOptions &other ) const
COMPARE( m_FailType );
COMPARE( m_fMusicRate );
COMPARE( m_bAssistTick );
COMPARE( m_bAutoSync );
COMPARE( m_AutosyncType );
COMPARE( m_bSaveScore );
#undef COMPARE
return true;
+8 -1
View File
@@ -17,7 +17,14 @@ struct SongOptions
FAIL_OFF }; // never fail
FailType m_FailType;
float m_fMusicRate;
bool m_bAssistTick, m_bAutoSync, m_bSaveScore;
bool m_bAssistTick;
enum AutosyncType {
AUTOSYNC_OFF,
AUTOSYNC_SONG,
AUTOSYNC_MACHINE
};
AutosyncType m_AutosyncType;
bool m_bSaveScore;
SongOptions() { Init(); };
void Init();