Make spatial AudioServers prefer inactive voices
instead of unconditionally playing on the next voice slot; that will be the fallback if no inactive voice is found
This commit is contained in:
parent
12749dd67a
commit
0501f3a901
2 changed files with 24 additions and 6 deletions
|
@ -398,9 +398,18 @@ SpatialSoundServer::SourceVoiceID SpatialSoundServerSW::source_play_sample(RID p
|
|||
int to_play = 0;
|
||||
|
||||
if (p_voice == SOURCE_NEXT_VOICE) {
|
||||
to_play = source->last_voice + 1;
|
||||
if (to_play >= source->voices.size())
|
||||
to_play = 0;
|
||||
const int num_voices = source->voices.size();
|
||||
bool free_found = false;
|
||||
for (int i = 0; i < num_voices; i++) {
|
||||
const int candidate = (source->last_voice + 1 + i) % num_voices;
|
||||
if (!source->voices[candidate].active && !source->voices[candidate].restart) {
|
||||
free_found = true;
|
||||
to_play = candidate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!free_found)
|
||||
to_play = (source->last_voice + 1) % num_voices;
|
||||
|
||||
} else
|
||||
to_play = p_voice;
|
||||
|
|
|
@ -395,9 +395,18 @@ SpatialSound2DServer::SourceVoiceID SpatialSound2DServerSW::source_play_sample(R
|
|||
int to_play = 0;
|
||||
|
||||
if (p_voice == SOURCE_NEXT_VOICE) {
|
||||
to_play = source->last_voice + 1;
|
||||
if (to_play >= source->voices.size())
|
||||
to_play = 0;
|
||||
const int num_voices = source->voices.size();
|
||||
bool free_found = false;
|
||||
for (int i = 0; i < num_voices; i++) {
|
||||
const int candidate = (source->last_voice + 1 + i) % num_voices;
|
||||
if (!source->voices[candidate].active && !source->voices[candidate].restart) {
|
||||
free_found = true;
|
||||
to_play = candidate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!free_found)
|
||||
to_play = (source->last_voice + 1) % num_voices;
|
||||
|
||||
} else
|
||||
to_play = p_voice;
|
||||
|
|
Loading…
Reference in a new issue