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,16=mod,1.8xmusic;name,1.8x
|
||||||
Rate,17=mod,1.9xmusic;name,1.9x
|
Rate,17=mod,1.9xmusic;name,1.9x
|
||||||
Rate,18=mod,2.0xmusic;name,2.0x
|
Rate,18=mod,2.0xmusic;name,2.0x
|
||||||
AutoAdjust=2;together
|
AutoAdjust=3;together
|
||||||
AutoAdjustDefault=
|
AutoAdjustDefault=
|
||||||
AutoAdjust,1=mod,no autosync;name,Off
|
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
|
SaveScores=2;together
|
||||||
SaveScoresDefault=
|
SaveScoresDefault=
|
||||||
SaveScores,1=mod,no savescore;name,Off
|
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)
|
void Player::HandleAutosync(float fNoteOffset)
|
||||||
{
|
{
|
||||||
if( !GAMESTATE->m_SongOptions.m_bAutoSync )
|
if( GAMESTATE->m_SongOptions.m_AutosyncType == SongOptions::AUTOSYNC_OFF )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_fOffset[m_iOffsetSample++] = fNoteOffset;
|
m_fOffset[m_iOffsetSample++] = fNoteOffset;
|
||||||
if (m_iOffsetSample < SAMPLE_COUNT)
|
if( m_iOffsetSample < SAMPLE_COUNT )
|
||||||
return; /* need more */
|
return; /* need more */
|
||||||
|
|
||||||
const float mean = calc_mean(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);
|
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
|
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;
|
GAMESTATE->m_pCurSong->m_Timing.m_fBeat0OffsetInSeconds += mean;
|
||||||
|
break;
|
||||||
|
case SongOptions::AUTOSYNC_MACHINE:
|
||||||
|
PREFSMAN->m_fGlobalOffsetSeconds = PREFSMAN->m_fGlobalOffsetSeconds + mean;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT(0);
|
||||||
|
}
|
||||||
|
|
||||||
LOG->Trace("Offset corrected by %f. Error in steps: %f seconds.", mean, stddev);
|
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);
|
LOG->Trace("Offset NOT corrected. Average offset: %f seconds. Error: %f seconds.", mean, stddev);
|
||||||
|
}
|
||||||
|
|
||||||
m_iOffsetSample = 0;
|
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;
|
m_DancingState = STATE_INTRO;
|
||||||
|
|
||||||
@@ -1800,9 +1800,20 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
|
|||||||
this->HandleScreenMessage( SM_NotesEnded );
|
this->HandleScreenMessage( SM_NotesEnded );
|
||||||
break;
|
break;
|
||||||
case KEY_F6:
|
case KEY_F6:
|
||||||
m_bChangedOffsetOrBPM = true;
|
{
|
||||||
GAMESTATE->m_SongOptions.m_bAutoSync = !GAMESTATE->m_SongOptions.m_bAutoSync; // toggle
|
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();
|
UpdateAutoPlayText();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_F7:
|
case KEY_F7:
|
||||||
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
|
GAMESTATE->m_SongOptions.m_bAssistTick ^= 1;
|
||||||
@@ -1934,8 +1945,13 @@ void ScreenGameplay::UpdateAutoPlayText()
|
|||||||
|
|
||||||
if( PREFSMAN->m_bAutoPlay )
|
if( PREFSMAN->m_bAutoPlay )
|
||||||
sText += "AutoPlay ";
|
sText += "AutoPlay ";
|
||||||
if( GAMESTATE->m_SongOptions.m_bAutoSync )
|
switch( GAMESTATE->m_SongOptions.m_AutosyncType )
|
||||||
sText += "AutoSync ";
|
{
|
||||||
|
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 )
|
if( sText.length() > 0 )
|
||||||
sText.resize( sText.length()-5 );
|
sText.resize( sText.length()-5 );
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ void SongOptions::Init()
|
|||||||
m_FailType = FAIL_IMMEDIATE;
|
m_FailType = FAIL_IMMEDIATE;
|
||||||
m_bAssistTick = false;
|
m_bAssistTick = false;
|
||||||
m_fMusicRate = 1.0f;
|
m_fMusicRate = 1.0f;
|
||||||
m_bAutoSync = false;
|
m_AutosyncType = AUTOSYNC_OFF;
|
||||||
m_bSaveScore = true;
|
m_bSaveScore = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,6 +32,7 @@ CString SongOptions::GetString() const
|
|||||||
case LIFE_BATTERY:
|
case LIFE_BATTERY:
|
||||||
sReturn += ssprintf( "%dLives, ", m_iBatteryLives );
|
sReturn += ssprintf( "%dLives, ", m_iBatteryLives );
|
||||||
break;
|
break;
|
||||||
|
default: ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -41,6 +42,7 @@ CString SongOptions::GetString() const
|
|||||||
case FAIL_COMBO_OF_30_MISSES: sReturn += "Fail30Misses, "; break;
|
case FAIL_COMBO_OF_30_MISSES: sReturn += "Fail30Misses, "; break;
|
||||||
case FAIL_END_OF_SONG: sReturn += "FailEndOfSong, "; break;
|
case FAIL_END_OF_SONG: sReturn += "FailEndOfSong, "; break;
|
||||||
case FAIL_OFF: sReturn += "FailOff, "; break;
|
case FAIL_OFF: sReturn += "FailOff, "; break;
|
||||||
|
default: ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_fMusicRate != 1 )
|
if( m_fMusicRate != 1 )
|
||||||
@@ -51,8 +53,13 @@ CString SongOptions::GetString() const
|
|||||||
sReturn += s + "xMusic, ";
|
sReturn += s + "xMusic, ";
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_bAutoSync )
|
switch( m_AutosyncType )
|
||||||
sReturn += "AutoSync, ";
|
{
|
||||||
|
case AUTOSYNC_OFF: break;
|
||||||
|
case AUTOSYNC_SONG: sReturn += "AutosyncSong, "; break;
|
||||||
|
case AUTOSYNC_MACHINE: sReturn += "AutosyncMachine, "; break;
|
||||||
|
default: ASSERT(0);
|
||||||
|
}
|
||||||
|
|
||||||
if( sReturn.GetLength() > 2 )
|
if( sReturn.GetLength() > 2 )
|
||||||
sReturn.erase( sReturn.GetLength()-2 ); // delete the trailing ", "
|
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 == "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 == "savescore" ) m_bSaveScore = on;
|
||||||
else if( sBit == "bar" ) m_LifeType = LIFE_BAR;
|
else if( sBit == "bar" ) m_LifeType = LIFE_BAR;
|
||||||
else if( sBit == "battery" ) m_LifeType = LIFE_BATTERY;
|
else if( sBit == "battery" ) m_LifeType = LIFE_BATTERY;
|
||||||
@@ -138,7 +148,7 @@ bool SongOptions::operator==( const SongOptions &other ) const
|
|||||||
COMPARE( m_FailType );
|
COMPARE( m_FailType );
|
||||||
COMPARE( m_fMusicRate );
|
COMPARE( m_fMusicRate );
|
||||||
COMPARE( m_bAssistTick );
|
COMPARE( m_bAssistTick );
|
||||||
COMPARE( m_bAutoSync );
|
COMPARE( m_AutosyncType );
|
||||||
COMPARE( m_bSaveScore );
|
COMPARE( m_bSaveScore );
|
||||||
#undef COMPARE
|
#undef COMPARE
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -17,7 +17,14 @@ struct SongOptions
|
|||||||
FAIL_OFF }; // never fail
|
FAIL_OFF }; // never fail
|
||||||
FailType m_FailType;
|
FailType m_FailType;
|
||||||
float m_fMusicRate;
|
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(); };
|
SongOptions() { Init(); };
|
||||||
void Init();
|
void Init();
|
||||||
|
|||||||
Reference in New Issue
Block a user