mirror of
https://github.com/osukey/osukey.git
synced 2025-08-04 15:16:38 +09:00
Update with framework bindable changes
This commit is contained in:
@ -37,7 +37,7 @@ namespace osu.Game.Screens.Select
|
||||
/// </summary>
|
||||
public BeatmapInfo SelectedBeatmap => selectedBeatmap?.Beatmap;
|
||||
|
||||
private CarouselBeatmap selectedBeatmap => selectedBeatmapSet?.Beatmaps.FirstOrDefault(s => s.State == CarouselItemState.Selected);
|
||||
private CarouselBeatmap selectedBeatmap => selectedBeatmapSet?.Beatmaps.FirstOrDefault(s => s.State.Value == CarouselItemState.Selected);
|
||||
|
||||
/// <summary>
|
||||
/// The currently selected beatmap set.
|
||||
@ -130,7 +130,7 @@ namespace osu.Game.Screens.Select
|
||||
config.BindWith(OsuSetting.RandomSelectAlgorithm, RandomAlgorithm);
|
||||
config.BindWith(OsuSetting.SongSelectRightMouseScroll, RightClickScrollingEnabled);
|
||||
|
||||
RightClickScrollingEnabled.ValueChanged += v => RightMouseScrollbar = v;
|
||||
RightClickScrollingEnabled.ValueChanged += e => RightMouseScrollbar = e.NewValue;
|
||||
RightClickScrollingEnabled.TriggerChange();
|
||||
}
|
||||
|
||||
@ -196,7 +196,7 @@ namespace osu.Game.Screens.Select
|
||||
|
||||
foreach (CarouselBeatmapSet set in beatmapSets)
|
||||
{
|
||||
if (!bypassFilters && set.Filtered)
|
||||
if (!bypassFilters && set.Filtered.Value)
|
||||
continue;
|
||||
|
||||
var item = set.Beatmaps.FirstOrDefault(p => p.Beatmap.Equals(beatmap));
|
||||
@ -205,9 +205,9 @@ namespace osu.Game.Screens.Select
|
||||
// The beatmap that needs to be selected doesn't exist in this set
|
||||
continue;
|
||||
|
||||
if (!bypassFilters && item.Filtered)
|
||||
if (!bypassFilters && item.Filtered.Value)
|
||||
// The beatmap exists in this set but is filtered, so look for the first unfiltered map in the set
|
||||
item = set.Beatmaps.FirstOrDefault(b => !b.Filtered);
|
||||
item = set.Beatmaps.FirstOrDefault(b => !b.Filtered.Value);
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
@ -226,7 +226,7 @@ namespace osu.Game.Screens.Select
|
||||
/// <param name="skipDifficulties">Whether to skip individual difficulties and only increment over full groups.</param>
|
||||
public void SelectNext(int direction = 1, bool skipDifficulties = true)
|
||||
{
|
||||
var visibleItems = Items.Where(s => !s.Item.Filtered).ToList();
|
||||
var visibleItems = Items.Where(s => !s.Item.Filtered.Value).ToList();
|
||||
|
||||
if (!visibleItems.Any())
|
||||
return;
|
||||
@ -248,7 +248,7 @@ namespace osu.Game.Screens.Select
|
||||
{
|
||||
var item = visibleItems[currentIndex].Item;
|
||||
|
||||
if (item.Filtered || item.State == CarouselItemState.Selected) continue;
|
||||
if (item.Filtered.Value || item.State.Value == CarouselItemState.Selected) continue;
|
||||
|
||||
switch (item)
|
||||
{
|
||||
@ -260,7 +260,7 @@ namespace osu.Game.Screens.Select
|
||||
if (skipDifficulties)
|
||||
select(set);
|
||||
else
|
||||
select(direction > 0 ? set.Beatmaps.First(b => !b.Filtered) : set.Beatmaps.Last(b => !b.Filtered));
|
||||
select(direction > 0 ? set.Beatmaps.First(b => !b.Filtered.Value) : set.Beatmaps.Last(b => !b.Filtered.Value));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -272,7 +272,7 @@ namespace osu.Game.Screens.Select
|
||||
/// <returns>True if a selection could be made, else False.</returns>
|
||||
public bool SelectNextRandom()
|
||||
{
|
||||
var visibleSets = beatmapSets.Where(s => !s.Filtered).ToList();
|
||||
var visibleSets = beatmapSets.Where(s => !s.Filtered.Value).ToList();
|
||||
if (!visibleSets.Any())
|
||||
return false;
|
||||
|
||||
@ -288,7 +288,7 @@ namespace osu.Game.Screens.Select
|
||||
|
||||
CarouselBeatmapSet set;
|
||||
|
||||
if (RandomAlgorithm == RandomSelectAlgorithm.RandomPermutation)
|
||||
if (RandomAlgorithm.Value == RandomSelectAlgorithm.RandomPermutation)
|
||||
{
|
||||
var notYetVisitedSets = visibleSets.Except(previouslyVisitedRandomSets).ToList();
|
||||
if (!notYetVisitedSets.Any())
|
||||
@ -303,7 +303,7 @@ namespace osu.Game.Screens.Select
|
||||
else
|
||||
set = visibleSets.ElementAt(RNG.Next(visibleSets.Count));
|
||||
|
||||
var visibleBeatmaps = set.Beatmaps.Where(s => !s.Filtered).ToList();
|
||||
var visibleBeatmaps = set.Beatmaps.Where(s => !s.Filtered.Value).ToList();
|
||||
select(visibleBeatmaps[RNG.Next(visibleBeatmaps.Count)]);
|
||||
return true;
|
||||
}
|
||||
@ -314,9 +314,9 @@ namespace osu.Game.Screens.Select
|
||||
{
|
||||
var beatmap = randomSelectedBeatmaps.Pop();
|
||||
|
||||
if (!beatmap.Filtered)
|
||||
if (!beatmap.Filtered.Value)
|
||||
{
|
||||
if (RandomAlgorithm == RandomSelectAlgorithm.RandomPermutation)
|
||||
if (RandomAlgorithm.Value == RandomSelectAlgorithm.RandomPermutation)
|
||||
previouslyVisitedRandomSets.Remove(selectedBeatmapSet);
|
||||
select(beatmap);
|
||||
break;
|
||||
@ -509,9 +509,9 @@ namespace osu.Game.Screens.Select
|
||||
|
||||
foreach (var c in set.Beatmaps)
|
||||
{
|
||||
c.State.ValueChanged += v =>
|
||||
c.State.ValueChanged += e =>
|
||||
{
|
||||
if (v == CarouselItemState.Selected)
|
||||
if (e.NewValue == CarouselItemState.Selected)
|
||||
{
|
||||
selectedBeatmapSet = set;
|
||||
SelectionChanged?.Invoke(c.Beatmap);
|
||||
@ -549,7 +549,7 @@ namespace osu.Game.Screens.Select
|
||||
case DrawableCarouselBeatmapSet set:
|
||||
lastSet = set;
|
||||
|
||||
set.MoveToX(set.Item.State == CarouselItemState.Selected ? -100 : 0, 500, Easing.OutExpo);
|
||||
set.MoveToX(set.Item.State.Value == CarouselItemState.Selected ? -100 : 0, 500, Easing.OutExpo);
|
||||
set.MoveToY(currentY, 750, Easing.OutExpo);
|
||||
break;
|
||||
case DrawableCarouselBeatmap beatmap:
|
||||
@ -559,7 +559,7 @@ namespace osu.Game.Screens.Select
|
||||
void performMove(float y, float? startY = null)
|
||||
{
|
||||
if (startY != null) beatmap.MoveTo(new Vector2(0, startY.Value));
|
||||
beatmap.MoveToX(beatmap.Item.State == CarouselItemState.Selected ? -50 : 0, 500, Easing.OutExpo);
|
||||
beatmap.MoveToX(beatmap.Item.State.Value == CarouselItemState.Selected ? -50 : 0, 500, Easing.OutExpo);
|
||||
beatmap.MoveToY(y, 750, Easing.OutExpo);
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ namespace osu.Game.Screens.Select
|
||||
|
||||
private void invokeOnFilter()
|
||||
{
|
||||
OnFilter?.Invoke(tabs.Current, modsCheckbox.Current);
|
||||
OnFilter?.Invoke(tabs.Current.Value, modsCheckbox.Current.Value);
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
@ -69,8 +69,8 @@ namespace osu.Game.Screens.Select
|
||||
},
|
||||
};
|
||||
|
||||
tabs.Current.ValueChanged += item => invokeOnFilter();
|
||||
modsCheckbox.Current.ValueChanged += item => invokeOnFilter();
|
||||
tabs.Current.ValueChanged += e => invokeOnFilter();
|
||||
modsCheckbox.Current.ValueChanged += e => invokeOnFilter();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -266,8 +266,8 @@ namespace osu.Game.Screens.Select
|
||||
}
|
||||
};
|
||||
|
||||
titleBinding.BindValueChanged(value => setMetadata(metadata.Source));
|
||||
artistBinding.BindValueChanged(value => setMetadata(metadata.Source), true);
|
||||
titleBinding.BindValueChanged(e => setMetadata(metadata.Source));
|
||||
artistBinding.BindValueChanged(e => setMetadata(metadata.Source), true);
|
||||
|
||||
// no difficulty means it can't have a status to show
|
||||
if (beatmapInfo.Version == null)
|
||||
|
@ -50,7 +50,7 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
public override void Filter(FilterCriteria criteria)
|
||||
{
|
||||
base.Filter(criteria);
|
||||
Filtered.Value = InternalChildren.All(i => i.Filtered);
|
||||
Filtered.Value = InternalChildren.All(i => i.Filtered.Value);
|
||||
}
|
||||
|
||||
public override string ToString() => BeatmapSet.ToString();
|
||||
|
@ -49,7 +49,7 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
|
||||
public virtual void AddChild(CarouselItem i)
|
||||
{
|
||||
i.State.ValueChanged += v => ChildItemStateChanged(i, v);
|
||||
i.State.ValueChanged += e => ChildItemStateChanged(i, e.NewValue);
|
||||
i.ChildID = ++currentChildID;
|
||||
InternalChildren.Add(i);
|
||||
}
|
||||
@ -58,9 +58,9 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
{
|
||||
if (items != null) InternalChildren = items;
|
||||
|
||||
State.ValueChanged += v =>
|
||||
State.ValueChanged += e =>
|
||||
{
|
||||
switch (v)
|
||||
switch (e.NewValue)
|
||||
{
|
||||
case CarouselItemState.Collapsed:
|
||||
case CarouselItemState.NotSelected:
|
||||
@ -69,7 +69,7 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
case CarouselItemState.Selected:
|
||||
InternalChildren.ForEach(c =>
|
||||
{
|
||||
if (c.State == CarouselItemState.Collapsed) c.State.Value = CarouselItemState.NotSelected;
|
||||
if (c.State.Value == CarouselItemState.Collapsed) c.State.Value = CarouselItemState.NotSelected;
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
@ -13,9 +13,9 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
{
|
||||
public CarouselGroupEagerSelect()
|
||||
{
|
||||
State.ValueChanged += v =>
|
||||
State.ValueChanged += e =>
|
||||
{
|
||||
if (v == CarouselItemState.Selected)
|
||||
if (e.NewValue == CarouselItemState.Selected)
|
||||
attemptSelection();
|
||||
};
|
||||
}
|
||||
@ -81,10 +81,10 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
if (filteringChildren) return;
|
||||
|
||||
// we only perform eager selection if we are a currently selected group.
|
||||
if (State != CarouselItemState.Selected) return;
|
||||
if (State.Value != CarouselItemState.Selected) return;
|
||||
|
||||
// we only perform eager selection if none of our children are in a selected state already.
|
||||
if (Children.Any(i => i.State == CarouselItemState.Selected)) return;
|
||||
if (Children.Any(i => i.State.Value == CarouselItemState.Selected)) return;
|
||||
|
||||
PerformSelection();
|
||||
}
|
||||
@ -92,8 +92,8 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
protected virtual void PerformSelection()
|
||||
{
|
||||
CarouselItem nextToSelect =
|
||||
Children.Skip(lastSelectedIndex).FirstOrDefault(i => !i.Filtered) ??
|
||||
Children.Reverse().Skip(InternalChildren.Count - lastSelectedIndex).FirstOrDefault(i => !i.Filtered);
|
||||
Children.Skip(lastSelectedIndex).FirstOrDefault(i => !i.Filtered.Value) ??
|
||||
Children.Reverse().Skip(InternalChildren.Count - lastSelectedIndex).FirstOrDefault(i => !i.Filtered.Value);
|
||||
|
||||
if (nextToSelect != null)
|
||||
nextToSelect.State.Value = CarouselItemState.Selected;
|
||||
|
@ -16,7 +16,7 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
/// <summary>
|
||||
/// This item is not in a hidden state.
|
||||
/// </summary>
|
||||
public bool Visible => State.Value != CarouselItemState.Collapsed && !Filtered;
|
||||
public bool Visible => State.Value != CarouselItemState.Collapsed && !Filtered.Value;
|
||||
|
||||
public virtual List<DrawableCarouselItem> Drawables
|
||||
{
|
||||
@ -37,9 +37,9 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
{
|
||||
DrawableRepresentation = new Lazy<DrawableCarouselItem>(CreateDrawableRepresentation);
|
||||
|
||||
Filtered.ValueChanged += v =>
|
||||
Filtered.ValueChanged += e =>
|
||||
{
|
||||
if (v && State == CarouselItemState.Selected)
|
||||
if (e.NewValue && State.Value == CarouselItemState.Selected)
|
||||
State.Value = CarouselItemState.NotSelected;
|
||||
};
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
|
||||
protected override bool OnClick(ClickEvent e)
|
||||
{
|
||||
if (Item.State == CarouselItemState.Selected)
|
||||
if (Item.State.Value == CarouselItemState.Selected)
|
||||
startRequested?.Invoke(beatmap);
|
||||
|
||||
return base.OnClick(e);
|
||||
|
@ -109,7 +109,7 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
{
|
||||
List<MenuItem> items = new List<MenuItem>();
|
||||
|
||||
if (Item.State == CarouselItemState.NotSelected)
|
||||
if (Item.State.Value == CarouselItemState.NotSelected)
|
||||
items.Add(new OsuMenuItem("Expand", MenuItemType.Highlighted, () => Item.State.Value = CarouselItemState.Selected));
|
||||
|
||||
if (beatmapSet.OnlineBeatmapSetID != null)
|
||||
@ -189,7 +189,7 @@ namespace osu.Game.Screens.Select.Carousel
|
||||
: base(item.Beatmap)
|
||||
{
|
||||
filtered.BindTo(item.Filtered);
|
||||
filtered.ValueChanged += v => Schedule(() => this.FadeTo(v ? 0.1f : 1, 100));
|
||||
filtered.ValueChanged += e => Schedule(() => this.FadeTo(e.NewValue ? 0.1f : 1, 100));
|
||||
filtered.TriggerChange();
|
||||
}
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ namespace osu.Game.Screens.Select
|
||||
Group = group,
|
||||
Sort = sort,
|
||||
SearchText = searchTextBox.Text,
|
||||
AllowConvertedBeatmaps = showConverted,
|
||||
AllowConvertedBeatmaps = showConverted.Value,
|
||||
Ruleset = ruleset.Value
|
||||
};
|
||||
|
||||
@ -146,12 +146,12 @@ namespace osu.Game.Screens.Select
|
||||
}
|
||||
};
|
||||
|
||||
searchTextBox.Current.ValueChanged += t => FilterChanged?.Invoke(CreateCriteria());
|
||||
searchTextBox.Current.ValueChanged += e => FilterChanged?.Invoke(CreateCriteria());
|
||||
|
||||
groupTabs.PinItem(GroupMode.All);
|
||||
groupTabs.PinItem(GroupMode.RecentlyPlayed);
|
||||
groupTabs.Current.ValueChanged += val => Group = val;
|
||||
sortTabs.Current.ValueChanged += val => Sort = val;
|
||||
groupTabs.Current.ValueChanged += e => Group = e.NewValue;
|
||||
sortTabs.Current.ValueChanged += e => Sort = e.NewValue;
|
||||
}
|
||||
|
||||
public void Deactivate()
|
||||
@ -178,7 +178,7 @@ namespace osu.Game.Screens.Select
|
||||
sortTabs.AccentColour = colours.GreenLight;
|
||||
|
||||
showConverted = config.GetBindable<bool>(OsuSetting.ShowConvertedBeatmaps);
|
||||
showConverted.ValueChanged += val => updateCriteria();
|
||||
showConverted.ValueChanged += e => updateCriteria();
|
||||
|
||||
ruleset.BindTo(parentRuleset);
|
||||
ruleset.BindValueChanged(_ => updateCriteria(), true);
|
||||
|
@ -326,16 +326,16 @@ namespace osu.Game.Screens.Select
|
||||
|
||||
private ScheduledDelegate selectionChangedDebounce;
|
||||
|
||||
private void workingBeatmapChanged(WorkingBeatmap beatmap)
|
||||
private void workingBeatmapChanged(ValueChangedEvent<WorkingBeatmap> e)
|
||||
{
|
||||
if (beatmap is DummyWorkingBeatmap) return;
|
||||
if (e.NewValue is DummyWorkingBeatmap) return;
|
||||
|
||||
if (this.IsCurrentScreen() && !Carousel.SelectBeatmap(beatmap?.BeatmapInfo, false))
|
||||
if (this.IsCurrentScreen() && !Carousel.SelectBeatmap(e.NewValue?.BeatmapInfo, false))
|
||||
// If selecting new beatmap without bypassing filters failed, there's possibly a ruleset mismatch
|
||||
if (beatmap?.BeatmapInfo?.Ruleset != null && beatmap.BeatmapInfo.Ruleset != decoupledRuleset.Value)
|
||||
if (e.NewValue?.BeatmapInfo?.Ruleset != null && e.NewValue.BeatmapInfo.Ruleset != decoupledRuleset.Value)
|
||||
{
|
||||
Ruleset.Value = beatmap.BeatmapInfo.Ruleset;
|
||||
Carousel.SelectBeatmap(beatmap.BeatmapInfo);
|
||||
Ruleset.Value = e.NewValue.BeatmapInfo.Ruleset;
|
||||
Carousel.SelectBeatmap(e.NewValue.BeatmapInfo);
|
||||
}
|
||||
}
|
||||
|
||||
@ -598,9 +598,9 @@ namespace osu.Game.Screens.Select
|
||||
{
|
||||
// manual binding to parent ruleset to allow for delayed load in the incoming direction.
|
||||
rulesetNoDebounce = decoupledRuleset.Value = Ruleset.Value;
|
||||
Ruleset.ValueChanged += updateSelectedRuleset;
|
||||
Ruleset.ValueChanged += e => updateSelectedRuleset(e.NewValue);
|
||||
|
||||
decoupledRuleset.ValueChanged += r => Ruleset.Value = r;
|
||||
decoupledRuleset.ValueChanged += e => Ruleset.Value = e.NewValue;
|
||||
decoupledRuleset.DisabledChanged += r => Ruleset.Disabled = r;
|
||||
|
||||
Beatmap.BindDisabledChanged(disabled => Carousel.AllowSelection = !disabled, true);
|
||||
|
Reference in New Issue
Block a user