add AutosyncMachine (shift + F6)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user