Made announcers repeat their lines less
This commit is contained in:
@@ -83,6 +83,8 @@ static RageThread MusicThread;
|
||||
vector<RString> g_SoundsToPlayOnce;
|
||||
vector<RString> g_SoundsToPlayOnceFromDir;
|
||||
vector<RString> g_SoundsToPlayOnceFromAnnouncer;
|
||||
// This should get updated to unordered_map when once C++11 is supported
|
||||
std::map<RString, vector<int>> g_DirSoundOrder;
|
||||
|
||||
struct MusicToPlay
|
||||
{
|
||||
@@ -298,9 +300,31 @@ static void DoPlayOnceFromDir( RString sPath )
|
||||
GetDirListing( sPath + "*.oga", arraySoundFiles );
|
||||
|
||||
if( arraySoundFiles.empty() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if (arraySoundFiles.size() == 1)
|
||||
{
|
||||
DoPlayOnce( sPath + arraySoundFiles[0] );
|
||||
return;
|
||||
}
|
||||
|
||||
g_Mutex->Lock();
|
||||
vector<int> &order = g_DirSoundOrder.insert({sPath, vector<int>()}).first->second;
|
||||
// If order is exhausted, repopulate and reshuffle
|
||||
if (order.size() == 0)
|
||||
{
|
||||
for (int i = 0; i < arraySoundFiles.size(); ++i)
|
||||
{
|
||||
order.push_back(i);
|
||||
}
|
||||
std::random_shuffle(order.begin(), order.end());
|
||||
}
|
||||
|
||||
int index = order.back();
|
||||
order.pop_back();
|
||||
g_Mutex->Unlock();
|
||||
|
||||
int index = RandomInt( arraySoundFiles.size( ));
|
||||
DoPlayOnce( sPath + arraySoundFiles[index] );
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user