From 52731adc2916882f998956f222f64759bf64d92c Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 23 Jan 2005 23:17:12 +0000 Subject: [PATCH] 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 --- stepmania/src/NoteField.cpp | 31 ++++--- stepmania/src/NoteField.h | 6 +- stepmania/src/NotesLoaderBMS.cpp | 2 +- stepmania/src/NotesLoaderDWI.cpp | 2 +- stepmania/src/NotesLoaderKSF.cpp | 14 +-- stepmania/src/ScreenEdit.cpp | 152 ++++++++++++++----------------- stepmania/src/ScreenEdit.h | 2 +- stepmania/src/ScreenGameplay.cpp | 2 +- stepmania/src/TimingData.cpp | 45 ++++----- stepmania/src/TimingData.h | 6 +- 10 files changed, 124 insertions(+), 138 deletions(-) diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index 2b6a3c9eb7..3e4f8893ba 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -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); diff --git a/stepmania/src/NoteField.h b/stepmania/src/NoteField.h index 7fc2307259..9a7f3e0ee5 100644 --- a/stepmania/src/NoteField.h +++ b/stepmania/src/NoteField.h @@ -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 ); diff --git a/stepmania/src/NotesLoaderBMS.cpp b/stepmania/src/NotesLoaderBMS.cpp index 97952ba66c..f1f0a6704e 100644 --- a/stepmania/src/NotesLoaderBMS.cpp +++ b/stepmania/src/NotesLoaderBMS.cpp @@ -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() ); diff --git a/stepmania/src/NotesLoaderDWI.cpp b/stepmania/src/NotesLoaderDWI.cpp index 864531996a..3efaf9061e 100644 --- a/stepmania/src/NotesLoaderDWI.cpp +++ b/stepmania/src/NotesLoaderDWI.cpp @@ -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") ) { diff --git a/stepmania/src/NotesLoaderKSF.cpp b/stepmania/src/NotesLoaderKSF.cpp index a3c6f6d862..637ac527d0 100644 --- a/stepmania/src/NotesLoaderKSF.cpp +++ b/stepmania/src/NotesLoaderKSF.cpp @@ -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; rWarn( "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. */ diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index bab647ce86..23120714ef 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -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; im_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. diff --git a/stepmania/src/ScreenEdit.h b/stepmania/src/ScreenEdit.h index c301ec9bd8..ef9c3addb2 100644 --- a/stepmania/src/ScreenEdit.h +++ b/stepmania/src/ScreenEdit.h @@ -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; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index ba7505bc14..2363d4ce89 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -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(); diff --git a/stepmania/src/TimingData.cpp b/stepmania/src/TimingData.cpp index 7b58a310ab..f81b509438 100644 --- a/stepmania/src/TimingData.cpp +++ b/stepmania/src/TimingData.cpp @@ -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 &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= 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 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