Optimise carousel memory usage by unloading off-screen panels

This commit is contained in:
Dean Herbert
2018-09-06 13:27:17 +09:00
parent 9b753bb429
commit e63f60231a
3 changed files with 29 additions and 4 deletions

View File

@ -30,6 +30,7 @@ namespace osu.Game.Screens.Select.Carousel
private DialogOverlay dialogOverlay;
private readonly BeatmapSetInfo beatmapSet;
private DelayedLoadUnloadWrapper delayed;
public DrawableCarouselBeatmapSet(CarouselBeatmapSet set)
: base(set)
@ -37,6 +38,10 @@ namespace osu.Game.Screens.Select.Carousel
beatmapSet = set.BeatmapSet;
}
public override bool CanBeRemoved => delayed?.DelayedLoadCompleted != true;
protected override bool RequiresChildrenUpdate => true;
[BackgroundDependencyLoader(true)]
private void load(LocalisationEngine localisation, BeatmapManager manager, BeatmapSetOverlay beatmapOverlay, DialogOverlay overlay)
{
@ -50,12 +55,12 @@ namespace osu.Game.Screens.Select.Carousel
Children = new Drawable[]
{
new DelayedLoadWrapper(
delayed = new DelayedLoadUnloadWrapper(() =>
new PanelBackground(manager.GetWorkingBeatmap(beatmapSet.Beatmaps.FirstOrDefault()))
{
RelativeSizeAxes = Axes.Both,
OnLoadComplete = d => d.FadeInFromZero(1000, Easing.OutQuint),
}, 300
}, 300, 5000
),
new FillFlowContainer
{