1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-23 22:47:33 +08:00

Merge pull request #11429 from peppy/fix-transform-carousel

This commit is contained in:
Bartłomiej Dach 2021-01-06 14:22:06 +01:00 committed by GitHub
commit cb4e6ac0b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,6 +5,8 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using JetBrains.Annotations;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -36,10 +38,14 @@ namespace osu.Game.Screens.Select.Carousel
public IEnumerable<DrawableCarouselItem> DrawableBeatmaps => beatmapContainer?.Children ?? Enumerable.Empty<DrawableCarouselItem>(); public IEnumerable<DrawableCarouselItem> DrawableBeatmaps => beatmapContainer?.Children ?? Enumerable.Empty<DrawableCarouselItem>();
[CanBeNull]
private Container<DrawableCarouselItem> beatmapContainer; private Container<DrawableCarouselItem> beatmapContainer;
private BeatmapSetInfo beatmapSet; private BeatmapSetInfo beatmapSet;
[CanBeNull]
private Task beatmapsLoadTask;
[Resolved] [Resolved]
private BeatmapManager manager { get; set; } private BeatmapManager manager { get; set; }
@ -85,7 +91,9 @@ namespace osu.Game.Screens.Select.Carousel
base.UpdateItem(); base.UpdateItem();
Content.Clear(); Content.Clear();
beatmapContainer = null; beatmapContainer = null;
beatmapsLoadTask = null;
if (Item == null) if (Item == null)
return; return;
@ -122,11 +130,7 @@ namespace osu.Game.Screens.Select.Carousel
MovementContainer.MoveToX(0, 500, Easing.OutExpo); MovementContainer.MoveToX(0, 500, Easing.OutExpo);
if (beatmapContainer != null) updateBeatmapYPositions();
{
foreach (var beatmap in beatmapContainer)
beatmap.MoveToY(0, 800, Easing.OutQuint);
}
} }
protected override void Selected() protected override void Selected()
@ -163,7 +167,7 @@ namespace osu.Game.Screens.Select.Carousel
ChildrenEnumerable = visibleBeatmaps.Select(c => c.CreateDrawableRepresentation()) ChildrenEnumerable = visibleBeatmaps.Select(c => c.CreateDrawableRepresentation())
}; };
LoadComponentAsync(beatmapContainer, loaded => beatmapsLoadTask = LoadComponentAsync(beatmapContainer, loaded =>
{ {
// make sure the pooled target hasn't changed. // make sure the pooled target hasn't changed.
if (beatmapContainer != loaded) if (beatmapContainer != loaded)
@ -173,16 +177,29 @@ namespace osu.Game.Screens.Select.Carousel
updateBeatmapYPositions(); updateBeatmapYPositions();
}); });
} }
}
void updateBeatmapYPositions() private void updateBeatmapYPositions()
{
if (beatmapContainer == null)
return;
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; if (isSelected)
foreach (var panel in beatmapContainer.Children)
{ {
panel.MoveToY(yPos, 800, Easing.OutQuint); panel.MoveToY(yPos, 800, Easing.OutQuint);
yPos += panel.Item.TotalHeight; yPos += panel.Item.TotalHeight;
} }
else
panel.MoveToY(0, 800, Easing.OutQuint);
} }
} }