Move sync offset application to song load (as early as possible)
This commit is contained in:
@@ -655,9 +655,19 @@ void Song::TidyUpData( bool from_cache, bool /* duringCache */ )
|
|||||||
|
|
||||||
m_SongTiming.TidyUpData(false);
|
m_SongTiming.TidyUpData(false);
|
||||||
|
|
||||||
|
// Apply the group offset to the song timing before we do anything else.
|
||||||
|
float fOffset = PREFSMAN->m_fMachineSyncBias;
|
||||||
|
if (SONGMAN->GetGroupFromName(m_sGroupName) != nullptr)
|
||||||
|
{
|
||||||
|
fOffset = SONGMAN->GetGroupFromName(m_sGroupName)->GetSyncOffset();
|
||||||
|
}
|
||||||
|
m_SongTiming.m_fBeat0GroupOffsetInSeconds = fOffset;
|
||||||
|
|
||||||
for (Steps *s : m_vpSteps)
|
for (Steps *s : m_vpSteps)
|
||||||
{
|
{
|
||||||
s->m_Timing.TidyUpData(true);
|
s->m_Timing.TidyUpData(true);
|
||||||
|
// Apply the group offset to the step timing as well.
|
||||||
|
s->m_Timing.m_fBeat0GroupOffsetInSeconds = fOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!from_cache)
|
if(!from_cache)
|
||||||
|
|||||||
+16
-19
@@ -341,11 +341,6 @@ void SongManager::AddGroup( RString sDir, RString sGroupDirName, Group* group )
|
|||||||
m_sSongGroupBannerPaths.push_back( sBannerPath );
|
m_sSongGroupBannerPaths.push_back( sBannerPath );
|
||||||
m_sSongGroupNames.push_back( sGroupDirName );
|
m_sSongGroupNames.push_back( sGroupDirName );
|
||||||
|
|
||||||
if (m_mapNameToGroup.find(sGroupDirName) == m_mapNameToGroup.end())
|
|
||||||
{
|
|
||||||
m_mapNameToGroup[sGroupDirName] = group;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the group to its series if the group has one and if the series exists
|
// Add the group to its series if the group has one and if the series exists
|
||||||
if( group->GetSeries() != "" )
|
if( group->GetSeries() != "" )
|
||||||
{
|
{
|
||||||
@@ -435,6 +430,12 @@ void SongManager::LoadSongDir( RString sDir, LoadingWindow *ld, bool onlyAdditio
|
|||||||
RString group_base_name= Basename(sGroupDirName);
|
RString group_base_name= Basename(sGroupDirName);
|
||||||
Group* group = new Group(sDir, sGroupDirName);
|
Group* group = new Group(sDir, sGroupDirName);
|
||||||
|
|
||||||
|
// Add the group to the group mapping
|
||||||
|
if (m_mapNameToGroup.find(sGroupDirName) == m_mapNameToGroup.end())
|
||||||
|
{
|
||||||
|
m_mapNameToGroup[sGroupDirName] = group;
|
||||||
|
}
|
||||||
|
|
||||||
for( unsigned j=0; j< arraySongDirs.size(); ++j ) // for each song dir
|
for( unsigned j=0; j< arraySongDirs.size(); ++j ) // for each song dir
|
||||||
{
|
{
|
||||||
RString sSongDirName = arraySongDirs[j];
|
RString sSongDirName = arraySongDirs[j];
|
||||||
@@ -468,19 +469,6 @@ void SongManager::LoadSongDir( RString sDir, LoadingWindow *ld, bool onlyAdditio
|
|||||||
delete pNewSong;
|
delete pNewSong;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Apply Group Offset if applicable
|
|
||||||
if( group->GetSyncOffset() != 0.0f )
|
|
||||||
{
|
|
||||||
pNewSong->m_SongTiming.m_fBeat0GroupOffsetInSeconds = group->GetSyncOffset();
|
|
||||||
const std::vector<Steps*>& vpSteps = pNewSong->GetAllSteps();
|
|
||||||
for (Steps* s : vpSteps)
|
|
||||||
{
|
|
||||||
if( s->m_Timing.empty() )
|
|
||||||
continue;
|
|
||||||
s->m_Timing.m_fBeat0GroupOffsetInSeconds = group->GetSyncOffset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
AddSongToList(pNewSong);
|
AddSongToList(pNewSong);
|
||||||
|
|
||||||
@@ -492,7 +480,16 @@ void SongManager::LoadSongDir( RString sDir, LoadingWindow *ld, bool onlyAdditio
|
|||||||
LOG->Trace("Loaded %i songs from \"%s\"", loaded, (sDir+sGroupDirName).c_str() );
|
LOG->Trace("Loaded %i songs from \"%s\"", loaded, (sDir+sGroupDirName).c_str() );
|
||||||
|
|
||||||
// Don't add the group name if we didn't load any songs in this group.
|
// Don't add the group name if we didn't load any songs in this group.
|
||||||
if(!loaded) continue;
|
if(!loaded) {
|
||||||
|
// Remove the group from the group mapping
|
||||||
|
auto it = m_mapNameToGroup.find(sGroupDirName);
|
||||||
|
if (it != m_mapNameToGroup.end())
|
||||||
|
{
|
||||||
|
m_mapNameToGroup.erase(it);
|
||||||
|
}
|
||||||
|
delete group;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Add this group to the group array.
|
// Add this group to the group array.
|
||||||
AddGroup(sDir, sGroupDirName, group);
|
AddGroup(sDir, sGroupDirName, group);
|
||||||
|
|||||||
Reference in New Issue
Block a user