From f0c56cadac897b87bf937bbe2d0c4e80cc1f0eb9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 22 Jan 2025 18:47:48 +0900 Subject: [PATCH] Change the method of finding a drawable representation of items to be on-demand --- osu.Game/Screens/SelectV2/BeatmapCarousel.cs | 11 +++++----- osu.Game/Screens/SelectV2/Carousel.cs | 22 ++++++++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs index 45fd7e0a2edd..7e8a3397febb 100644 --- a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs +++ b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs @@ -70,9 +70,9 @@ protected override void HandleItemDeselected(List allItems, Carous } } - protected override void HandleItemSelected(List allItems, CarouselItem item, Drawable? drawableItem) + protected override void HandleItemSelected(List allItems, CarouselItem item) { - base.HandleItemSelected(allItems, item, drawableItem); + base.HandleItemSelected(allItems, item); // Selecting a set isn't valid – let's re-select the first difficulty. if (item.Model is BeatmapSetInfo setInfo) @@ -92,11 +92,12 @@ protected override void HandleItemSelected(List allItems, Carousel UpdateYPositions(allItems, VisibleHalfHeight, SpacingBetweenPanels); } - protected override void HandleItemActivated(CarouselItem item, Drawable? drawableItem) + protected override void HandleItemActivated(CarouselItem item) { - base.HandleItemActivated(item, drawableItem); + base.HandleItemActivated(item); - if (drawableItem is BeatmapCarouselPanel drawable) + // TODO: maybe this should be handled by the panel itself? + if (GetMaterialisedDrawableForItem(item) is BeatmapCarouselPanel drawable) drawable.FlashFromActivation(); } diff --git a/osu.Game/Screens/SelectV2/Carousel.cs b/osu.Game/Screens/SelectV2/Carousel.cs index 392f1e33dc87..1fade4189b2b 100644 --- a/osu.Game/Screens/SelectV2/Carousel.cs +++ b/osu.Game/Screens/SelectV2/Carousel.cs @@ -120,7 +120,7 @@ public void ActivateSelection() return; } - HandleItemActivated(currentSelectionCarouselItem, scroll.Panels.SingleOrDefault(p => ((ICarouselPanel)p).Item == currentSelectionCarouselItem)); + HandleItemActivated(currentSelectionCarouselItem); } #endregion @@ -171,6 +171,17 @@ public void ActivateSelection() /// A representing the model. protected abstract CarouselItem CreateCarouselItemForModel(T model); + /// + /// Given a , find a drawable representation if it is currently displayed in the carousel. + /// + /// + /// This will only return a drawable if it is "on-screen". + /// + /// The item to find a related drawable representation. + /// The drawable representation if it exists. + protected Drawable? GetMaterialisedDrawableForItem(CarouselItem item) => + scroll.Panels.SingleOrDefault(p => ((ICarouselPanel)p).Item == currentSelectionCarouselItem); + /// /// Called when an item is "activated". /// @@ -180,22 +191,21 @@ public void ActivateSelection() /// - Start gameplay on a beatmap difficulty. /// /// The carousel item which was activated. - /// The drawable representation of the item, if manifested. - protected virtual void HandleItemActivated(CarouselItem item, Drawable? drawableItem) + protected virtual void HandleItemActivated(CarouselItem item) { } /// /// Called when an item is "deselected". /// - protected virtual void HandleItemDeselected(List carouselItems, CarouselItem carouselItem) + protected virtual void HandleItemDeselected(List allItems, CarouselItem item) { } /// /// Called when an item is "selected". /// - protected virtual void HandleItemSelected(List allItems, CarouselItem item, Drawable? drawableItem) + protected virtual void HandleItemSelected(List allItems, CarouselItem item) { } @@ -458,7 +468,7 @@ private void updateSelection() if (currentSelectionCarouselItem != null) HandleItemDeselected(displayedCarouselItems, currentSelectionCarouselItem); currentSelectionCarouselItem = item; - HandleItemSelected(displayedCarouselItems, item, scroll.Panels.SingleOrDefault(p => ((ICarouselPanel)p).Item == currentSelectionCarouselItem)); + HandleItemSelected(displayedCarouselItems, item); } } }