NoteField::m_fBeginMarker, m_fEndMarker -> m_iBeginMarker, m_iEndMarker
go back to storing BPM as a float, until I'm sure it won't cause precision problems
This commit is contained in:
+17
-14
@@ -31,7 +31,7 @@ NoteField::NoteField()
|
||||
m_sprBars.Load( THEME->GetPathToG("NoteField bars") );
|
||||
m_sprBars.StopAnimating();
|
||||
|
||||
m_fBeginMarker = m_fEndMarker = -1;
|
||||
m_iBeginMarker = m_iEndMarker = -1;
|
||||
|
||||
m_fPercentFadeToFail = -1;
|
||||
LastDisplay = NULL;
|
||||
@@ -267,8 +267,9 @@ void NoteField::DrawBeatBar( const float fBeat )
|
||||
}
|
||||
}
|
||||
|
||||
void NoteField::DrawMarkerBar( const float fBeat )
|
||||
void NoteField::DrawMarkerBar( int iBeat )
|
||||
{
|
||||
float fBeat = NoteRowToBeat( iBeat );
|
||||
const float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat );
|
||||
const float fYPos = ArrowEffects::GetYPos( m_pPlayerState, 0, fYOffset, m_fYReverseOffsetPixels );
|
||||
|
||||
@@ -277,8 +278,10 @@ void NoteField::DrawMarkerBar( const float fBeat )
|
||||
m_rectMarkerBar.Draw();
|
||||
}
|
||||
|
||||
void NoteField::DrawAreaHighlight( const float fStartBeat, const float fEndBeat )
|
||||
void NoteField::DrawAreaHighlight( int iStartBeat, int iEndBeat )
|
||||
{
|
||||
float fStartBeat = NoteRowToBeat( iStartBeat );
|
||||
float fEndBeat = NoteRowToBeat( iEndBeat );
|
||||
float fYStartOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fStartBeat );
|
||||
float fYStartPos = ArrowEffects::GetYPos( m_pPlayerState, 0, fYStartOffset, m_fYReverseOffsetPixels );
|
||||
float fYEndOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fEndBeat );
|
||||
@@ -524,12 +527,12 @@ void NoteField::DrawPrimitives()
|
||||
//
|
||||
// Draw marker bars
|
||||
//
|
||||
if( m_fBeginMarker != -1 && m_fEndMarker != -1 )
|
||||
DrawAreaHighlight( m_fBeginMarker, m_fEndMarker );
|
||||
else if( m_fBeginMarker != -1 )
|
||||
DrawMarkerBar( m_fBeginMarker );
|
||||
else if( m_fEndMarker != -1 )
|
||||
DrawMarkerBar( m_fEndMarker );
|
||||
if( m_iBeginMarker != -1 && m_iEndMarker != -1 )
|
||||
DrawAreaHighlight( m_iBeginMarker, m_iEndMarker );
|
||||
else if( m_iBeginMarker != -1 )
|
||||
DrawMarkerBar( m_iBeginMarker );
|
||||
else if( m_iEndMarker != -1 )
|
||||
DrawMarkerBar( m_iEndMarker );
|
||||
|
||||
}
|
||||
|
||||
@@ -590,8 +593,8 @@ void NoteField::DrawPrimitives()
|
||||
SearchForBeat( CurDisplay, NextDisplay, NoteRowToBeat(hn.iStartRow) );
|
||||
|
||||
bool bIsInSelectionRange = false;
|
||||
if( m_fBeginMarker!=-1 && m_fEndMarker!=-1 )
|
||||
bIsInSelectionRange = hn.ContainedByRange( BeatToNoteRow( m_fBeginMarker ), BeatToNoteRow( m_fEndMarker ) );
|
||||
if( m_iBeginMarker!=-1 && m_iEndMarker!=-1 )
|
||||
bIsInSelectionRange = hn.ContainedByRange( m_iBeginMarker, m_iEndMarker );
|
||||
|
||||
NoteDisplayCols *nd = CurDisplay->second;
|
||||
nd->display[c].DrawHold( hn, bIsHoldingNote, bIsActive, Result, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail, false, m_fYReverseOffsetPixels );
|
||||
@@ -652,10 +655,10 @@ void NoteField::DrawPrimitives()
|
||||
}
|
||||
|
||||
bool bIsInSelectionRange = false;
|
||||
if( m_fBeginMarker!=-1 && m_fEndMarker!=-1 )
|
||||
if( m_iBeginMarker!=-1 && m_iEndMarker!=-1 )
|
||||
{
|
||||
float fBeat = NoteRowToBeat(i);
|
||||
bIsInSelectionRange = m_fBeginMarker<=fBeat && fBeat<=m_fEndMarker;
|
||||
int iBeat = i;
|
||||
bIsInSelectionRange = m_iBeginMarker<=iBeat && iBeat<=m_iEndMarker;
|
||||
}
|
||||
|
||||
bool bIsAddition = (tn.source == TapNote::addition);
|
||||
|
||||
@@ -30,7 +30,7 @@ public:
|
||||
float fYReverseOffsetPixels );
|
||||
virtual void Unload();
|
||||
|
||||
float m_fBeginMarker, m_fEndMarker; // only used with MODE_EDIT
|
||||
int m_iBeginMarker, m_iEndMarker; // only used with MODE_EDIT
|
||||
|
||||
void FadeToFail();
|
||||
void CacheAllUsedNoteSkins( bool bDeleteUnused );
|
||||
@@ -44,8 +44,8 @@ public:
|
||||
|
||||
protected:
|
||||
void DrawBeatBar( const float fBeat );
|
||||
void DrawMarkerBar( const float fBeat );
|
||||
void DrawAreaHighlight( const float fStartBeat, const float fEndBeat );
|
||||
void DrawMarkerBar( int fBeat );
|
||||
void DrawAreaHighlight( int iStartBeat, int iEndBeat );
|
||||
void DrawBPMText( const float fBeat, const float fBPM );
|
||||
void DrawFreezeText( const float fBeat, const float fBPM );
|
||||
void DrawBGChangeText( const float fBeat, const CString sNewBGName );
|
||||
|
||||
@@ -603,7 +603,7 @@ void BMSLoader::ReadGlobalTags( const NameToData_t &mapNameToData, Song &out )
|
||||
|
||||
if( GetTagFromMap( mapNameToData, "#bpm", sData ) )
|
||||
{
|
||||
BPMSegment newSeg( 0, BeatToNoteRow(strtof(sData, NULL)) );
|
||||
BPMSegment newSeg( 0, strtof(sData, NULL) );
|
||||
out.AddBPMSegment( newSeg );
|
||||
|
||||
LOG->Trace( "Inserting new BPM change at beat %f, BPM %f", NoteRowToBeat(newSeg.m_iStartIndex), newSeg.GetBPM() );
|
||||
|
||||
@@ -375,7 +375,7 @@ bool DWILoader::LoadFromDWIFile( CString sPath, Song &out )
|
||||
out.m_sCDTitleFile = sParams[1];
|
||||
|
||||
else if( 0==stricmp(sValueName,"BPM") )
|
||||
out.AddBPMSegment( BPMSegment(0, BeatToNoteRow(strtof(sParams[1], NULL))) );
|
||||
out.AddBPMSegment( BPMSegment(0, strtof(sParams[1], NULL)) );
|
||||
|
||||
else if( 0==stricmp(sValueName,"DISPLAYBPM") )
|
||||
{
|
||||
|
||||
@@ -146,8 +146,7 @@ bool KSFLoader::LoadFromKSFFile( const CString &sPath, Steps &out, const Song &s
|
||||
}
|
||||
|
||||
int iHoldStartRow[13];
|
||||
int t;
|
||||
for( t=0; t<13; t++ )
|
||||
for( int t=0; t<13; t++ )
|
||||
iHoldStartRow[t] = -1;
|
||||
|
||||
for( unsigned r=0; r<asRows.size(); r++ )
|
||||
@@ -203,7 +202,10 @@ bool KSFLoader::LoadFromKSFFile( const CString &sPath, Steps &out, const Song &s
|
||||
{
|
||||
case '0': tap = TAP_EMPTY; break;
|
||||
case '1': tap = TAP_ORIGINAL_TAP; break;
|
||||
default: ASSERT(0); tap = TAP_EMPTY; break;
|
||||
default:
|
||||
LOG->Warn( "File %s had an invalid row (\"%s\"); corrupt notes ignored",
|
||||
sPath.c_str(), sRowString.c_str() );
|
||||
return false;
|
||||
}
|
||||
|
||||
notedata.SetTapNote(t, row, tap);
|
||||
@@ -283,7 +285,7 @@ bool KSFLoader::LoadGlobalData( const CString &sPath, Song &out )
|
||||
if( 0==stricmp(sValueName,"TITLE") )
|
||||
LoadTags(sParams[1], out);
|
||||
else if( 0==stricmp(sValueName,"BPM") )
|
||||
out.AddBPMSegment( BPMSegment(0, BeatToNoteRow(strtof(sParams[1], NULL))) );
|
||||
out.AddBPMSegment( BPMSegment(0, strtof(sParams[1], NULL)) );
|
||||
else if( 0==stricmp(sValueName,"BPM2") )
|
||||
BPM2 = strtof( sParams[1], NULL );
|
||||
else if( 0==stricmp(sValueName,"BPM3") )
|
||||
@@ -310,7 +312,7 @@ bool KSFLoader::LoadGlobalData( const CString &sPath, Song &out )
|
||||
const float beat = BPMPos2 * BeatsPerSecond;
|
||||
LOG->Trace("BPM %f, BPS %f, BPMPos2 %f, beat %f",
|
||||
out.GetBPMAtBeat(0), BeatsPerSecond, BPMPos2, beat);
|
||||
out.AddBPMSegment( BPMSegment(BeatToNoteRow(beat), BeatToNoteRow(BPM2)) );
|
||||
out.AddBPMSegment( BPMSegment(BeatToNoteRow(beat), BPM2) );
|
||||
}
|
||||
|
||||
if( BPM3 > 0 && BPMPos3 > 0 )
|
||||
@@ -319,7 +321,7 @@ bool KSFLoader::LoadGlobalData( const CString &sPath, Song &out )
|
||||
const float beat = BPMPos3 * BeatsPerSecond;
|
||||
LOG->Trace("BPM %f, BPS %f, BPMPos3 %f, beat %f",
|
||||
out.GetBPMAtBeat(0), BeatsPerSecond, BPMPos3, beat);
|
||||
out.AddBPMSegment( BPMSegment(BeatToNoteRow(beat), BeatToNoteRow(BPM3)) );
|
||||
out.AddBPMSegment( BPMSegment(BeatToNoteRow(beat), BPM3) );
|
||||
}
|
||||
|
||||
/* Try to fill in missing bits of information from the pathname. */
|
||||
|
||||
@@ -489,7 +489,7 @@ ScreenEdit::ScreenEdit( CString sName ) : Screen( sName )
|
||||
GAMESTATE->ResetNoteSkins();
|
||||
GAMESTATE->StoreSelectedOptions();
|
||||
|
||||
g_fShiftAnchor = -1;
|
||||
g_iShiftAnchor = -1;
|
||||
|
||||
|
||||
m_SnapDisplay.SetXY( EDIT_X, PLAYER_Y_STANDARD );
|
||||
@@ -664,7 +664,7 @@ void ScreenEdit::Update( float fDeltaTime )
|
||||
|
||||
// check for end of playback/record
|
||||
|
||||
if( GAMESTATE->m_fSongBeat > m_NoteFieldEdit.m_fEndMarker + 4 ) // give a one measure lead out
|
||||
if( GAMESTATE->m_fSongBeat > NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker) + 4 ) // give a one measure lead out
|
||||
{
|
||||
if( m_EditMode == MODE_RECORDING )
|
||||
{
|
||||
@@ -674,7 +674,7 @@ void ScreenEdit::Update( float fDeltaTime )
|
||||
{
|
||||
TransitionToEdit();
|
||||
}
|
||||
GAMESTATE->m_fSongBeat = m_NoteFieldEdit.m_fEndMarker;
|
||||
GAMESTATE->m_fSongBeat = NoteRowToBeat( m_NoteFieldEdit.m_iEndMarker );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -742,8 +742,8 @@ void ScreenEdit::UpdateTextInfo()
|
||||
sText += ssprintf( "Current Beat:\n %.2f\n", GAMESTATE->m_fSongBeat );
|
||||
sText += ssprintf( "Current Second:\n %.2f\n", m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat) );
|
||||
sText += ssprintf( "Snap to:\n %s\n", sNoteType.c_str() );
|
||||
sText += ssprintf( "Selection begin:\n %s\n", m_NoteFieldEdit.m_fBeginMarker==-1 ? "not set" : ssprintf("%.2f",m_NoteFieldEdit.m_fBeginMarker).c_str() );
|
||||
sText += ssprintf( "Selection end:\n %s\n", m_NoteFieldEdit.m_fEndMarker==-1 ? "not set" : ssprintf("%.2f",m_NoteFieldEdit.m_fEndMarker).c_str() );
|
||||
sText += ssprintf( "Selection begin:\n %s\n", m_NoteFieldEdit.m_iBeginMarker==-1 ? "not set" : ssprintf("%.2f",NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker)).c_str() );
|
||||
sText += ssprintf( "Selection end:\n %s\n", m_NoteFieldEdit.m_iEndMarker==-1 ? "not set" : ssprintf("%.2f",NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker)).c_str() );
|
||||
sText += ssprintf( "Difficulty:\n %s\n", DifficultyToString( m_pSteps->GetDifficulty() ).c_str() );
|
||||
sText += ssprintf( "Description:\n %s\n", GAMESTATE->m_pCurSteps[PLAYER_1] ? GAMESTATE->m_pCurSteps[PLAYER_1]->GetDescription().c_str() : "no description" );
|
||||
sText += ssprintf( "Main title:\n %s\n", m_pSong->m_sMainTitle.c_str() );
|
||||
@@ -834,9 +834,6 @@ void ScreenEdit::Input( const DeviceInput& DeviceI, const InputEventType type, c
|
||||
|
||||
void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB )
|
||||
{
|
||||
if( DeviceI.device != DEVICE_KEYBOARD )
|
||||
return;
|
||||
|
||||
if( type == IET_LEVEL_CHANGED )
|
||||
return; // don't care
|
||||
|
||||
@@ -845,12 +842,13 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
switch( EditB )
|
||||
{
|
||||
case EDIT_BUTTON_SCROLL_SELECT:
|
||||
g_fShiftAnchor = -1;
|
||||
g_iShiftAnchor = -1;
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const int iSongBeat = BeatToNoteRow(GAMESTATE->m_fSongBeat);
|
||||
switch( EditB )
|
||||
{
|
||||
case EDIT_BUTTON_COLUMN_0:
|
||||
@@ -1008,21 +1006,21 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
*
|
||||
* If this is the first time we've moved since shift was depressed,
|
||||
* the old position (before this move) becomes the start pos: */
|
||||
|
||||
if( g_fShiftAnchor == -1 )
|
||||
g_fShiftAnchor = fStartBeat;
|
||||
int iEndBeat = BeatToNoteRow( fEndBeat );
|
||||
if( g_iShiftAnchor == -1 )
|
||||
g_iShiftAnchor = BeatToNoteRow(fStartBeat);
|
||||
|
||||
if(fEndBeat == g_fShiftAnchor)
|
||||
if( iEndBeat == g_iShiftAnchor )
|
||||
{
|
||||
/* We're back at the anchor, so we have nothing selected. */
|
||||
m_NoteFieldEdit.m_fBeginMarker = m_NoteFieldEdit.m_fEndMarker = -1;
|
||||
m_NoteFieldEdit.m_iBeginMarker = m_NoteFieldEdit.m_iEndMarker = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_NoteFieldEdit.m_fBeginMarker = g_fShiftAnchor;
|
||||
m_NoteFieldEdit.m_fEndMarker = fEndBeat;
|
||||
if(m_NoteFieldEdit.m_fBeginMarker > m_NoteFieldEdit.m_fEndMarker)
|
||||
swap(m_NoteFieldEdit.m_fBeginMarker, m_NoteFieldEdit.m_fEndMarker);
|
||||
m_NoteFieldEdit.m_iBeginMarker = g_iShiftAnchor;
|
||||
m_NoteFieldEdit.m_iEndMarker = iEndBeat;
|
||||
if( m_NoteFieldEdit.m_iBeginMarker > m_NoteFieldEdit.m_iEndMarker )
|
||||
swap( m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1041,38 +1039,38 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
OnSnapModeChange();
|
||||
break;
|
||||
case EDIT_BUTTON_LAY_SELECT:
|
||||
if( m_NoteFieldEdit.m_fBeginMarker==-1 && m_NoteFieldEdit.m_fEndMarker==-1 )
|
||||
if( m_NoteFieldEdit.m_iBeginMarker==-1 && m_NoteFieldEdit.m_iEndMarker==-1 )
|
||||
{
|
||||
// lay begin marker
|
||||
m_NoteFieldEdit.m_fBeginMarker = GAMESTATE->m_fSongBeat;
|
||||
m_NoteFieldEdit.m_iBeginMarker = BeatToNoteRow(GAMESTATE->m_fSongBeat);
|
||||
}
|
||||
else if( m_NoteFieldEdit.m_fEndMarker==-1 ) // only begin marker is laid
|
||||
else if( m_NoteFieldEdit.m_iEndMarker==-1 ) // only begin marker is laid
|
||||
{
|
||||
if( GAMESTATE->m_fSongBeat == m_NoteFieldEdit.m_fBeginMarker )
|
||||
if( iSongBeat == m_NoteFieldEdit.m_iBeginMarker )
|
||||
{
|
||||
m_NoteFieldEdit.m_fBeginMarker = -1;
|
||||
m_NoteFieldEdit.m_iBeginMarker = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_NoteFieldEdit.m_fEndMarker = max( m_NoteFieldEdit.m_fBeginMarker, GAMESTATE->m_fSongBeat );
|
||||
m_NoteFieldEdit.m_fBeginMarker = min( m_NoteFieldEdit.m_fBeginMarker, GAMESTATE->m_fSongBeat );
|
||||
m_NoteFieldEdit.m_iEndMarker = max( m_NoteFieldEdit.m_iBeginMarker, iSongBeat );
|
||||
m_NoteFieldEdit.m_iBeginMarker = min( m_NoteFieldEdit.m_iBeginMarker, iSongBeat );
|
||||
}
|
||||
}
|
||||
else // both markers are laid
|
||||
{
|
||||
m_NoteFieldEdit.m_fBeginMarker = GAMESTATE->m_fSongBeat;
|
||||
m_NoteFieldEdit.m_fEndMarker = -1;
|
||||
m_NoteFieldEdit.m_iBeginMarker = iSongBeat;
|
||||
m_NoteFieldEdit.m_iEndMarker = -1;
|
||||
}
|
||||
m_soundMarker.Play();
|
||||
break;
|
||||
case EDIT_BUTTON_OPEN_AREA_MENU:
|
||||
{
|
||||
// update enabled/disabled in g_AreaMenu
|
||||
bool bAreaSelected = m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1;
|
||||
bool bAreaSelected = m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1;
|
||||
g_AreaMenu.rows[cut].enabled = bAreaSelected;
|
||||
g_AreaMenu.rows[copy].enabled = bAreaSelected;
|
||||
g_AreaMenu.rows[paste_at_current_beat].enabled = this->m_Clipboard.GetLastBeat() != 0;
|
||||
g_AreaMenu.rows[paste_at_begin_marker].enabled = this->m_Clipboard.GetLastBeat() != 0 && m_NoteFieldEdit.m_fBeginMarker!=-1;
|
||||
g_AreaMenu.rows[paste_at_begin_marker].enabled = this->m_Clipboard.GetLastBeat() != 0 && m_NoteFieldEdit.m_iBeginMarker!=-1;
|
||||
g_AreaMenu.rows[clear].enabled = bAreaSelected;
|
||||
g_AreaMenu.rows[quantize].enabled = bAreaSelected;
|
||||
g_AreaMenu.rows[turn].enabled = bAreaSelected;
|
||||
@@ -1306,13 +1304,13 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
||||
break;
|
||||
|
||||
case EDIT_BUTTON_PLAY_SELECTION:
|
||||
if( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 )
|
||||
if( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 )
|
||||
HandleAreaMenuChoice( play, NULL );
|
||||
else
|
||||
HandleMainMenuChoice( play_current_beat_to_end, NULL );
|
||||
break;
|
||||
case EDIT_BUTTON_RECORD:
|
||||
if( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 )
|
||||
if( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 )
|
||||
HandleAreaMenuChoice( record, NULL );
|
||||
break;
|
||||
case EDIT_BUTTON_INSERT:
|
||||
@@ -1464,13 +1462,10 @@ void ScreenEdit::TransitionFromRecordToEdit()
|
||||
{
|
||||
TransitionToEdit();
|
||||
|
||||
int rowBegin = BeatToNoteRow( m_NoteFieldEdit.m_fBeginMarker );
|
||||
int rowEnd = BeatToNoteRow( m_NoteFieldEdit.m_fEndMarker );
|
||||
|
||||
// delete old TapNotes in the range
|
||||
m_NoteDataEdit.ClearRange( rowBegin, rowEnd );
|
||||
m_NoteDataEdit.ClearRange( m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||
|
||||
m_NoteDataEdit.CopyRange( m_NoteDataRecord, rowBegin, rowEnd, rowBegin );
|
||||
m_NoteDataEdit.CopyRange( m_NoteDataRecord, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker, m_NoteFieldEdit.m_iBeginMarker );
|
||||
|
||||
m_NoteDataRecord.ClearAll();
|
||||
}
|
||||
@@ -1736,15 +1731,15 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
|
||||
break;
|
||||
case play_whole_song:
|
||||
{
|
||||
m_NoteFieldEdit.m_fBeginMarker = 0;
|
||||
m_NoteFieldEdit.m_fEndMarker = m_NoteDataEdit.GetLastBeat();
|
||||
m_NoteFieldEdit.m_iBeginMarker = 0;
|
||||
m_NoteFieldEdit.m_iEndMarker = m_NoteDataEdit.GetLastRow();
|
||||
HandleAreaMenuChoice( play, NULL );
|
||||
}
|
||||
break;
|
||||
case play_current_beat_to_end:
|
||||
{
|
||||
m_NoteFieldEdit.m_fBeginMarker = GAMESTATE->m_fSongBeat;
|
||||
m_NoteFieldEdit.m_fEndMarker = m_NoteDataEdit.GetLastBeat();
|
||||
m_NoteFieldEdit.m_iBeginMarker = BeatToNoteRow(GAMESTATE->m_fSongBeat);
|
||||
m_NoteFieldEdit.m_iEndMarker = m_NoteDataEdit.GetLastRow();
|
||||
HandleAreaMenuChoice( play, NULL );
|
||||
}
|
||||
break;
|
||||
@@ -1915,11 +1910,9 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
break;
|
||||
case copy:
|
||||
{
|
||||
ASSERT( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 );
|
||||
int iFirstRow = BeatToNoteRow( m_NoteFieldEdit.m_fBeginMarker );
|
||||
int iLastRow = BeatToNoteRow( m_NoteFieldEdit.m_fEndMarker );
|
||||
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 );
|
||||
m_Clipboard.ClearAll();
|
||||
m_Clipboard.CopyRange( m_NoteDataEdit, iFirstRow, iLastRow );
|
||||
m_Clipboard.CopyRange( m_NoteDataEdit, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||
}
|
||||
break;
|
||||
case paste_at_current_beat:
|
||||
@@ -1932,25 +1925,20 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
break;
|
||||
case paste_at_begin_marker:
|
||||
{
|
||||
ASSERT( m_NoteFieldEdit.m_fBeginMarker!=-1 );
|
||||
int iSrcFirstRow = 0;
|
||||
int iSrcLastRow = BeatToNoteRow( m_Clipboard.GetLastBeat() );
|
||||
int iDestFirstRow = BeatToNoteRow( m_NoteFieldEdit.m_fBeginMarker );
|
||||
m_NoteDataEdit.CopyRange( m_Clipboard, iSrcFirstRow, iSrcLastRow, iDestFirstRow );
|
||||
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 );
|
||||
m_NoteDataEdit.CopyRange( m_Clipboard, 0, m_Clipboard.GetLastRow(), m_NoteFieldEdit.m_iBeginMarker );
|
||||
}
|
||||
break;
|
||||
case clear:
|
||||
{
|
||||
ASSERT( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 );
|
||||
int iFirstRow = BeatToNoteRow( m_NoteFieldEdit.m_fBeginMarker );
|
||||
int iLastRow = BeatToNoteRow( m_NoteFieldEdit.m_fEndMarker );
|
||||
m_NoteDataEdit.ClearRange( iFirstRow, iLastRow );
|
||||
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 );
|
||||
m_NoteDataEdit.ClearRange( m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||
}
|
||||
break;
|
||||
case quantize:
|
||||
{
|
||||
NoteType nt = (NoteType)iAnswers[c];
|
||||
NoteDataUtil::SnapToNearestNoteType( m_NoteDataEdit, nt, nt, BeatToNoteRow(m_NoteFieldEdit.m_fBeginMarker), BeatToNoteRow(m_NoteFieldEdit.m_fEndMarker) );
|
||||
NoteDataUtil::SnapToNearestNoteType( m_NoteDataEdit, nt, nt, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||
}
|
||||
break;
|
||||
case turn:
|
||||
@@ -1976,8 +1964,8 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
break;
|
||||
case transform:
|
||||
{
|
||||
int iBeginRow = BeatToNoteRow( m_NoteFieldEdit.m_fBeginMarker );
|
||||
int iEndRow = BeatToNoteRow( m_NoteFieldEdit.m_fEndMarker );
|
||||
int iBeginRow = m_NoteFieldEdit.m_iBeginMarker;
|
||||
int iEndRow = m_NoteFieldEdit.m_iEndMarker;
|
||||
TransformType tt = (TransformType)iAnswers[c];
|
||||
StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType;
|
||||
|
||||
@@ -2066,13 +2054,12 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
|
||||
m_Clipboard.Convert2sAnd3sToHoldNotes();
|
||||
|
||||
// float fOldClipboardEndBeat = m_NoteFieldEdit.m_fEndMarker;
|
||||
float fOldClipboardBeats = m_NoteFieldEdit.m_fEndMarker - m_NoteFieldEdit.m_fBeginMarker;
|
||||
float fNewClipboardBeats = fOldClipboardBeats * fScale;
|
||||
float fDeltaBeats = fNewClipboardBeats - fOldClipboardBeats;
|
||||
float fNewClipboardEndBeat = m_NoteFieldEdit.m_fBeginMarker + fNewClipboardBeats;
|
||||
NoteDataUtil::ShiftRows( m_NoteDataEdit, BeatToNoteRow(m_NoteFieldEdit.m_fBeginMarker), BeatToNoteRow(fDeltaBeats) );
|
||||
m_pSong->m_Timing.ScaleRegion( fScale, BeatToNoteRow(m_NoteFieldEdit.m_fBeginMarker), BeatToNoteRow(m_NoteFieldEdit.m_fEndMarker) );
|
||||
int iOldClipboardBeats = m_NoteFieldEdit.m_iEndMarker - m_NoteFieldEdit.m_iBeginMarker;
|
||||
int iNewClipboardBeats = lrintf( iOldClipboardBeats * fScale );
|
||||
int iDeltaBeats = iNewClipboardBeats - iOldClipboardBeats;
|
||||
int iNewClipboardEndBeat = m_NoteFieldEdit.m_iBeginMarker + iNewClipboardBeats;
|
||||
NoteDataUtil::ShiftRows( m_NoteDataEdit, m_NoteFieldEdit.m_iBeginMarker, iDeltaBeats );
|
||||
m_pSong->m_Timing.ScaleRegion( fScale, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||
|
||||
HandleAreaMenuChoice( paste_at_begin_marker, NULL );
|
||||
|
||||
@@ -2091,22 +2078,22 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
|
||||
sIter[i]->GetNoteData( ndTemp );
|
||||
ndTemp.ConvertHoldNotesTo2sAnd3s();
|
||||
NoteDataUtil::ScaleRegion( ndTemp, fScale, BeatToNoteRow(m_NoteFieldEdit.m_fBeginMarker), BeatToNoteRow(m_NoteFieldEdit.m_fEndMarker) );
|
||||
NoteDataUtil::ScaleRegion( ndTemp, fScale, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||
ndTemp.Convert2sAnd3sToHoldNotes();
|
||||
sIter[i]->SetNoteData( ndTemp );
|
||||
}
|
||||
|
||||
m_NoteFieldEdit.m_fEndMarker = fNewClipboardEndBeat;
|
||||
m_NoteFieldEdit.m_iEndMarker = iNewClipboardEndBeat;
|
||||
|
||||
float fOldBPM = m_pSong->GetBPMAtBeat( m_NoteFieldEdit.m_fBeginMarker );
|
||||
float fOldBPM = m_pSong->GetBPMAtBeat( NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker) );
|
||||
float fNewBPM = fOldBPM * fScale;
|
||||
m_pSong->SetBPMAtBeat( m_NoteFieldEdit.m_fBeginMarker, fNewBPM );
|
||||
m_pSong->SetBPMAtBeat( fNewClipboardEndBeat, fOldBPM );
|
||||
m_pSong->SetBPMAtBeat( NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker), fNewBPM );
|
||||
m_pSong->SetBPMAtBeat( NoteRowToBeat(iNewClipboardEndBeat), fOldBPM );
|
||||
}
|
||||
break;
|
||||
case play:
|
||||
{
|
||||
ASSERT( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 );
|
||||
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 );
|
||||
|
||||
SOUND->PlayMusic("");
|
||||
|
||||
@@ -2120,7 +2107,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
|
||||
/* Give a 1 measure lead-in. Set this before loading Player, so it knows
|
||||
* where we're starting. */
|
||||
float fSeconds = m_pSong->m_Timing.GetElapsedTimeFromBeat( m_NoteFieldEdit.m_fBeginMarker - 4 );
|
||||
float fSeconds = m_pSong->m_Timing.GetElapsedTimeFromBeat( NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker) - 4 );
|
||||
GAMESTATE->UpdateSongPosition( fSeconds, m_pSong->m_Timing );
|
||||
|
||||
/* If we're in course display mode, set that up. */
|
||||
@@ -2161,7 +2148,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
break;
|
||||
case record:
|
||||
{
|
||||
ASSERT( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 );
|
||||
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 );
|
||||
|
||||
SOUND->PlayMusic("");
|
||||
|
||||
@@ -2181,7 +2168,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
m_rectRecordBack.BeginTweening( 0.5f );
|
||||
m_rectRecordBack.SetDiffuse( RageColor(0,0,0,0.8f) );
|
||||
|
||||
GAMESTATE->m_fSongBeat = m_NoteFieldEdit.m_fBeginMarker - 4; // give a 1 measure lead-in
|
||||
GAMESTATE->m_fSongBeat = NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker - ROWS_PER_MEASURE ); // give a 1 measure lead-in
|
||||
float fStartSeconds = m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat);
|
||||
LOG->Trace( "Starting playback at %f", fStartSeconds );
|
||||
|
||||
@@ -2208,19 +2195,18 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
// MD 11/02/03 - Converting selected region to a pause of the same length.
|
||||
case convert_beat_to_pause:
|
||||
{
|
||||
ASSERT( m_NoteFieldEdit.m_fBeginMarker!=-1 && m_NoteFieldEdit.m_fEndMarker!=-1 );
|
||||
// This was written horribly, using beats and not converting to time at all.
|
||||
float fMarkerStart = m_pSong->m_Timing.GetElapsedTimeFromBeat(m_NoteFieldEdit.m_fBeginMarker);
|
||||
float fMarkerEnd = m_pSong->m_Timing.GetElapsedTimeFromBeat(m_NoteFieldEdit.m_fEndMarker);
|
||||
ASSERT( m_NoteFieldEdit.m_iBeginMarker!=-1 && m_NoteFieldEdit.m_iEndMarker!=-1 );
|
||||
float fMarkerStart = m_pSong->m_Timing.GetElapsedTimeFromBeat( NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker) );
|
||||
float fMarkerEnd = m_pSong->m_Timing.GetElapsedTimeFromBeat( NoteRowToBeat(m_NoteFieldEdit.m_iEndMarker) );
|
||||
float fStopLength = fMarkerEnd - fMarkerStart;
|
||||
// be sure not to clobber the row at the start - a row at the end
|
||||
// can be dropped safely, though
|
||||
NoteDataUtil::ShiftRows( m_NoteDataEdit,
|
||||
BeatToNoteRow(m_NoteFieldEdit.m_fBeginMarker) + 1,
|
||||
BeatToNoteRow(-m_NoteFieldEdit.m_fEndMarker+m_NoteFieldEdit.m_fBeginMarker)
|
||||
m_NoteFieldEdit.m_iBeginMarker + 1,
|
||||
-m_NoteFieldEdit.m_iEndMarker+m_NoteFieldEdit.m_iBeginMarker
|
||||
);
|
||||
m_pSong->m_Timing.ShiftRows( BeatToNoteRow(m_NoteFieldEdit.m_fBeginMarker) + 1,
|
||||
BeatToNoteRow(-m_NoteFieldEdit.m_fEndMarker+m_NoteFieldEdit.m_fBeginMarker)
|
||||
m_pSong->m_Timing.ShiftRows( m_NoteFieldEdit.m_iBeginMarker + 1,
|
||||
-m_NoteFieldEdit.m_iEndMarker+m_NoteFieldEdit.m_iBeginMarker
|
||||
);
|
||||
unsigned i;
|
||||
for( i=0; i<m_pSong->m_Timing.m_StopSegments.size(); i++ )
|
||||
@@ -2231,15 +2217,15 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, int* iAnswers )
|
||||
continue;
|
||||
else {
|
||||
if( fStart > fMarkerStart )
|
||||
m_pSong->m_Timing.m_StopSegments[i].m_iStartRow = BeatToNoteRow(m_NoteFieldEdit.m_fBeginMarker);
|
||||
m_pSong->m_Timing.m_StopSegments[i].m_iStartRow = m_NoteFieldEdit.m_iBeginMarker;
|
||||
m_pSong->m_Timing.m_StopSegments[i].m_fStopSeconds = fStopLength;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( i == m_pSong->m_Timing.m_StopSegments.size() ) // there is no BPMSegment at the current beat
|
||||
m_pSong->AddStopSegment( StopSegment(BeatToNoteRow(m_NoteFieldEdit.m_fBeginMarker), fStopLength) );
|
||||
m_NoteFieldEdit.m_fEndMarker = -1;
|
||||
m_pSong->AddStopSegment( StopSegment(m_NoteFieldEdit.m_iBeginMarker, fStopLength) );
|
||||
m_NoteFieldEdit.m_iEndMarker = -1;
|
||||
break;
|
||||
}
|
||||
// MD 11/02/03 - Converting a pause at the current beat into beats.
|
||||
|
||||
@@ -162,7 +162,7 @@ protected:
|
||||
float m_fTrailingBeat; // this approaches GAMESTATE->m_fSongBeat, which is the actual beat
|
||||
/* The location we were at when shift was pressed, or
|
||||
* -1 when shift isn't pressed: */
|
||||
float g_fShiftAnchor;
|
||||
int g_iShiftAnchor;
|
||||
|
||||
NoteData m_Clipboard;
|
||||
|
||||
|
||||
@@ -1829,7 +1829,7 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
|
||||
fOffsetDelta *= 10;
|
||||
BPMSegment& seg = GAMESTATE->m_pCurSong->GetBPMSegmentAtBeat( GAMESTATE->m_fSongBeat );
|
||||
|
||||
seg.m_iBPS += BeatToNoteRow(fOffsetDelta);
|
||||
seg.m_fBPS += fOffsetDelta;
|
||||
|
||||
m_textDebug.SetText( ssprintf("Cur BPM = %.2f", seg.GetBPM()) );
|
||||
m_textDebug.StopTweening();
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
|
||||
void BPMSegment::SetBPM( float f )
|
||||
{
|
||||
m_iBPS = BeatToNoteRow( f / 60.0f );
|
||||
m_fBPS = f / 60.0f;
|
||||
}
|
||||
|
||||
float BPMSegment::GetBPM() const
|
||||
{
|
||||
return NoteRowToBeat(m_iBPS * 60);
|
||||
return m_fBPS * 60.0f;
|
||||
}
|
||||
|
||||
TimingData::TimingData()
|
||||
@@ -42,16 +42,14 @@ void SortStopSegmentsArray( vector<StopSegment> &arrayStopSegments )
|
||||
|
||||
void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut ) const
|
||||
{
|
||||
int iMinBPS = MAX_NOTE_ROW;
|
||||
int iMaxBPS = 0;
|
||||
fMinBPMOut = 99999;
|
||||
fMaxBPMOut = 0;
|
||||
for( unsigned i=0; i<m_BPMSegments.size(); i++ )
|
||||
{
|
||||
const BPMSegment &seg = m_BPMSegments[i];
|
||||
iMaxBPS = max( seg.m_iBPS, iMaxBPS );
|
||||
iMinBPS = min( seg.m_iBPS, iMinBPS );
|
||||
fMaxBPMOut = max( seg.m_fBPS * 60.0f, fMaxBPMOut );
|
||||
fMinBPMOut = min( seg.m_fBPS * 60.0f, fMinBPMOut );
|
||||
}
|
||||
fMinBPMOut = NoteRowToBeat( iMinBPS );
|
||||
fMaxBPMOut = NoteRowToBeat( iMaxBPS );
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +69,7 @@ void TimingData::AddStopSegment( const StopSegment &seg )
|
||||
void TimingData::SetBPMAtBeat( float fBeat, float fBPM )
|
||||
{
|
||||
int iNoteRow = BeatToNoteRow( fBeat );
|
||||
int iBPS = BeatToNoteRow( fBPM ) / 60;
|
||||
float fBPS = fBPM / 60.0f;
|
||||
unsigned i;
|
||||
for( i=0; i<m_BPMSegments.size(); i++ )
|
||||
if( m_BPMSegments[i].m_iStartIndex >= iNoteRow )
|
||||
@@ -81,16 +79,16 @@ void TimingData::SetBPMAtBeat( float fBeat, float fBPM )
|
||||
{
|
||||
// There is no BPMSegment at the specified beat. If the BPM being set differs
|
||||
// from the last BPMSegment's BPM, create a new BPMSegment.
|
||||
if( i == 0 || m_BPMSegments[i-1].m_iBPS != iBPS )
|
||||
AddBPMSegment( BPMSegment(iNoteRow, iBPS) );
|
||||
if( i == 0 || fabsf(m_BPMSegments[i-1].m_fBPS - fBPS) > 0.003f )
|
||||
AddBPMSegment( BPMSegment(iNoteRow, fBPS) );
|
||||
}
|
||||
else // BPMSegment being modified is m_BPMSegments[i]
|
||||
{
|
||||
if( i > 0 && m_BPMSegments[i-1].m_iBPS == iBPS )
|
||||
if( i > 0 && fabsf(m_BPMSegments[i-1].m_fBPS - fBPS) < 0.003f )
|
||||
m_BPMSegments.erase( m_BPMSegments.begin()+i,
|
||||
m_BPMSegments.begin()+i+1);
|
||||
else
|
||||
m_BPMSegments[i].m_iBPS = iBPS;
|
||||
m_BPMSegments[i].m_fBPS = fBPS;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,7 +150,7 @@ void TimingData::MultiplyBPMInBeatRange( int iStartIndex, int iEndIndex, float f
|
||||
else if( iStartIndexNextSegment > iEndIndex )
|
||||
continue;
|
||||
|
||||
m_BPMSegments[i].m_iBPS = lrintf( m_BPMSegments[i].m_iBPS * fFactor );
|
||||
m_BPMSegments[i].m_fBPS = m_BPMSegments[i].m_fBPS * fFactor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,8 +192,7 @@ void TimingData::GetBeatAndBPSFromElapsedTime( float fElapsedTime, float &fBeatO
|
||||
const bool bIsLastBPMSegment = i==m_BPMSegments.size()-1;
|
||||
const int iStartRowNextSegment = bIsLastBPMSegment ? MAX_NOTE_ROW : m_BPMSegments[i+1].m_iStartIndex;
|
||||
const float fStartBeatNextSegment = NoteRowToBeat( iStartRowNextSegment );
|
||||
const int iBPS = m_BPMSegments[i].m_iBPS;
|
||||
const float fBPS = NoteRowToBeat( iBPS );
|
||||
const float fBPS = m_BPMSegments[i].m_fBPS;
|
||||
|
||||
for( unsigned j=0; j<m_StopSegments.size(); j++ ) // foreach freeze
|
||||
{
|
||||
@@ -204,7 +201,7 @@ void TimingData::GetBeatAndBPSFromElapsedTime( float fElapsedTime, float &fBeatO
|
||||
if( !bIsLastBPMSegment && m_StopSegments[j].m_iStartRow > iStartRowNextSegment )
|
||||
continue;
|
||||
|
||||
// this freeze lies within this BPMSegment
|
||||
// this freeze lies within this BPMSegment
|
||||
const int iRowsBeatsSinceStartOfSegment = m_StopSegments[j].m_iStartRow - iStartRowThisSegment;
|
||||
const float fBeatsSinceStartOfSegment = NoteRowToBeat(iRowsBeatsSinceStartOfSegment);
|
||||
const float fFreezeStartSecond = fBeatsSinceStartOfSegment / fBPS;
|
||||
@@ -260,24 +257,22 @@ float TimingData::GetElapsedTimeFromBeat( float fBeat ) const
|
||||
for( unsigned i=0; i<m_BPMSegments.size(); i++ ) // foreach BPMSegment
|
||||
{
|
||||
const bool bIsLastBPMSegment = i==m_BPMSegments.size()-1;
|
||||
const float fBPS = NoteRowToBeat( m_BPMSegments[i].m_iBPS );
|
||||
const float fBPS = m_BPMSegments[i].m_fBPS;
|
||||
|
||||
if( bIsLastBPMSegment )
|
||||
{
|
||||
fElapsedTime += fBeat / fBPS;
|
||||
fElapsedTime += NoteRowToBeat( iRow ) / fBPS;
|
||||
}
|
||||
else
|
||||
{
|
||||
const int iStartIndexThisSegment = m_BPMSegments[i].m_iStartIndex;
|
||||
const float fStartBeatThisSegment = NoteRowToBeat( iStartIndexThisSegment );
|
||||
const int iStartIndexNextSegment = m_BPMSegments[i+1].m_iStartIndex;
|
||||
const float fStartBeatNextSegment = NoteRowToBeat( iStartIndexNextSegment );
|
||||
const float fBeatsInThisSegment = fStartBeatNextSegment - fStartBeatThisSegment;
|
||||
fElapsedTime += min(fBeat, fBeatsInThisSegment) / fBPS;
|
||||
fBeat -= fBeatsInThisSegment;
|
||||
const int iRowsInThisSegment = min( iStartIndexNextSegment - iStartIndexThisSegment, iRow );
|
||||
fElapsedTime += NoteRowToBeat( iRowsInThisSegment ) / fBPS;
|
||||
iRow -= iRowsInThisSegment;
|
||||
}
|
||||
|
||||
if( fBeat <= 0 )
|
||||
if( iRow <= 0 )
|
||||
return fElapsedTime;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
|
||||
struct BPMSegment
|
||||
{
|
||||
BPMSegment() { m_iStartIndex = -1; m_iBPS = -1; }
|
||||
BPMSegment( int s, int b ) { m_iStartIndex = s; m_iBPS = b; }
|
||||
BPMSegment() { m_iStartIndex = -1; m_fBPS = -1; }
|
||||
BPMSegment( int s, float b ) { m_iStartIndex = s; m_fBPS = b/60.0f; }
|
||||
int m_iStartIndex;
|
||||
int m_iBPS; /* rows per second */
|
||||
float m_fBPS;
|
||||
|
||||
void SetBPM( float f );
|
||||
float GetBPM() const;
|
||||
|
||||
Reference in New Issue
Block a user