1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-15 06:33:20 +08:00

Fix carousel beatmap set panels applying transforms to difficulties while they are loading

This commit is contained in:
Dean Herbert 2021-01-05 18:41:45 +09:00
parent 3b98782964
commit 83dbba3cbf

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
@ -40,6 +41,8 @@ namespace osu.Game.Screens.Select.Carousel
private BeatmapSetInfo beatmapSet;
private Task beatmapsLoadTask;
[Resolved]
private BeatmapManager manager { get; set; }
@ -85,7 +88,9 @@ namespace osu.Game.Screens.Select.Carousel
base.UpdateItem();
Content.Clear();
beatmapContainer = null;
beatmapsLoadTask = null;
if (Item == null)
return;
@ -122,11 +127,7 @@ namespace osu.Game.Screens.Select.Carousel
MovementContainer.MoveToX(0, 500, Easing.OutExpo);
if (beatmapContainer != null)
{
foreach (var beatmap in beatmapContainer)
beatmap.MoveToY(0, 800, Easing.OutQuint);
}
updateBeatmapYPositions();
}
protected override void Selected()
@ -163,7 +164,7 @@ namespace osu.Game.Screens.Select.Carousel
ChildrenEnumerable = visibleBeatmaps.Select(c => c.CreateDrawableRepresentation())
};
LoadComponentAsync(beatmapContainer, loaded =>
beatmapsLoadTask = LoadComponentAsync(beatmapContainer, loaded =>
{
// make sure the pooled target hasn't changed.
if (beatmapContainer != loaded)
@ -173,16 +174,26 @@ namespace osu.Game.Screens.Select.Carousel
updateBeatmapYPositions();
});
}
}
void updateBeatmapYPositions()
private void updateBeatmapYPositions()
{
if (beatmapsLoadTask == null || !beatmapsLoadTask.IsCompleted)
return;
float yPos = DrawableCarouselBeatmap.CAROUSEL_BEATMAP_SPACING;
bool isSelected = Item.State.Value == CarouselItemState.Selected;
foreach (var panel in beatmapContainer.Children)
{
float yPos = DrawableCarouselBeatmap.CAROUSEL_BEATMAP_SPACING;
foreach (var panel in beatmapContainer.Children)
if (isSelected)
{
panel.MoveToY(yPos, 800, Easing.OutQuint);
yPos += panel.Item.TotalHeight;
}
else
panel.MoveToY(0, 800, Easing.OutQuint);
}
}