Bläddra i källkod

Merge pull request #8292 from RandomShaper/spatial-audio-play-on-free-2.1

Make spatial AudioServers prefer inactive voices (2.1)
Rémi Verschelde 8 år sedan
förälder
incheckning
6ff1436fde

+ 12 - 3
servers/spatial_sound/spatial_sound_server_sw.cpp

@@ -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;

+ 12 - 3
servers/spatial_sound_2d/spatial_sound_2d_server_sw.cpp

@@ -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;