The old algorithm for generating courses has a tendency to repeat songs.
This commit prevents that from happening. Songs will instead shuffle, and will
only repeat if the current song list has finished.
This is a partial fix, since for some reason, the method responsible
for getting all the songs in a song group is not doing its work properly.
That means for a course that's supposed to have a 100 songs, only 95 of them
would appear. The other 5 will never appear, and the last 5 will be a repeat
of the first 5 songs.
Added delay_save_cache to SongCacheIndex so that it doesn't write the entire cache index file after every song is loaded when loading songs.
Added m_SongsByDir to SongManager so that GetSongFromDir doesn't have to walk the entire list of songs.
Minor changes to when LoadEnabledSongsFromPref occurs and how SanityCheckGroupDir works to speed up loading.
Song::ReloadFromSongDir removes cache file to force an actual reload from the song dir instead of reloading from the cache. ReloadFromSongDir exposed to lua.
Reordered Actor::LoadFromNode to put Command first because that case is more common.
Course::GetTrailUnsorted reserves entries before starting to save time reallocating.
join in RageUtil calculates the final size of the concatenated strings reserves it to save time reallocating.
Added time log file to RageLog for profiling.
This is meant to be a safer alternative since
NULL can often be 0. Let's not rely on that.
And yes, I know this is a lot of files. This is
a safer thing to do in big commits vs for loops.
IsSecret() - returns a bool
IsFixedSong() - returns a bool
GetGainSeconds() - returns a float
GetGainLives() - returns a int
GetNormalModifiers() - returns a string
GetNumModChanges() - returns a int
GetTextDescription() - returns a string
[Course.cpp] HasTimedMods() now actually checks for timed mods (technically non-global) instead of being a clone of HasMods()
[Player.cpp] add MAX_HOLD_LIFE/[Player] MaxHoldLife metric
[ScreenGameplay] looking into places to put loading of replay data, perhaps?
[elsewhere] lots of cleanup, and I'm sure there's lots more to be done.
add a todo to ProductivityHelpers.