mirror of
https://github.com/ppy/osu.git
synced 2024-11-15 16:22:21 +08:00
Merge pull request #30277 from bdach/fix-shuffle-more
Fix shuffle not actually changing the track sometimes
This commit is contained in:
commit
790f863e06
@ -376,11 +376,19 @@ namespace osu.Game.Overlays
|
|||||||
{
|
{
|
||||||
Live<BeatmapSetInfo> result;
|
Live<BeatmapSetInfo> result;
|
||||||
|
|
||||||
var possibleSets = getBeatmapSets().Where(s => !s.Value.Protected || allowProtectedTracks).ToArray();
|
var possibleSets = getBeatmapSets().Where(s => !s.Value.Protected || allowProtectedTracks).ToList();
|
||||||
|
|
||||||
if (possibleSets.Length == 0)
|
if (possibleSets.Count == 0)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
// if there is only one possible set left, play it, even if it is the same as the current track.
|
||||||
|
// looping is preferable over playing nothing.
|
||||||
|
if (possibleSets.Count == 1)
|
||||||
|
return possibleSets.Single();
|
||||||
|
|
||||||
|
// now that we actually know there is a choice, do not allow the current track to be played again.
|
||||||
|
possibleSets.RemoveAll(s => s.Value.Equals(current?.BeatmapSetInfo));
|
||||||
|
|
||||||
// condition below checks if the signs of `randomHistoryDirection` and `direction` are opposite and not zero.
|
// condition below checks if the signs of `randomHistoryDirection` and `direction` are opposite and not zero.
|
||||||
// if that is the case, it means that the user had previously chosen next track `randomHistoryDirection` times and wants to go back,
|
// if that is the case, it means that the user had previously chosen next track `randomHistoryDirection` times and wants to go back,
|
||||||
// or that the user had previously chosen previous track `randomHistoryDirection` times and wants to go forward.
|
// or that the user had previously chosen previous track `randomHistoryDirection` times and wants to go forward.
|
||||||
@ -410,20 +418,20 @@ namespace osu.Game.Overlays
|
|||||||
switch (randomSelectAlgorithm.Value)
|
switch (randomSelectAlgorithm.Value)
|
||||||
{
|
{
|
||||||
case RandomSelectAlgorithm.Random:
|
case RandomSelectAlgorithm.Random:
|
||||||
result = possibleSets[RNG.Next(possibleSets.Length)];
|
result = possibleSets[RNG.Next(possibleSets.Count)];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RandomSelectAlgorithm.RandomPermutation:
|
case RandomSelectAlgorithm.RandomPermutation:
|
||||||
var notYetPlayedSets = possibleSets.Except(previousRandomSets).ToArray();
|
var notYetPlayedSets = possibleSets.Except(previousRandomSets).ToList();
|
||||||
|
|
||||||
if (notYetPlayedSets.Length == 0)
|
if (notYetPlayedSets.Count == 0)
|
||||||
{
|
{
|
||||||
notYetPlayedSets = possibleSets;
|
notYetPlayedSets = possibleSets;
|
||||||
previousRandomSets.Clear();
|
previousRandomSets.Clear();
|
||||||
randomHistoryDirection = 0;
|
randomHistoryDirection = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = notYetPlayedSets[RNG.Next(notYetPlayedSets.Length)];
|
result = notYetPlayedSets[RNG.Next(notYetPlayedSets.Count)];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user