1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-16 06:27:27 +08:00
Commit Graph

3155 Commits

Author SHA1 Message Date
Bartłomiej Dach
f1842d781e
Decouple AdvancedStats from global mods
Closes https://github.com/ppy/osu/issues/30163.

If I'm to be blunt, the decoupled stuff in song select makes my head
spin. I spent a solid 20 minutes thinking how I was going to fix this
one but then finally realised that generally most of the cause there
was the fact that `AdvancedStats` was seeing the new rulesets *before*
the "ensure global selected mods are valid for current ruleset" logic,
and so decided to just _delay_ that until the decoupled transfer
thingamajig happens.

I was honestly considering combining `BeatmapInfo`, `Ruleset`, and
`Mods` into one property on `AdvancedStats`. I figured I'd rather not
push my luck and try the baseline version first, but I honestly think
that direction is going to be required at some point to properly corral
all of the decoupled madness taking place in song select.
2024-10-10 14:22:16 +02:00
Dean Herbert
11fc811e2f
Fix delete dialogs having generic "Caution" header text
Regressed in https://github.com/ppy/osu/pull/28363.
2024-10-07 16:46:53 +09:00
Bartłomiej Dach
5e5bb49cd8
Fix rate change hotkeys sometimes losing track of adjust pitch setting
Fixes https://osu.ppy.sh/community/forums/topics/1983327.

The cause of the bug is a bit convoluted, and stems from the fact that
the mod select overlay controls all of the game-global mod instances if
present. `ModSpeedHotkeyHandler` would store the last spotted instance
of a rate adjust mod - which in this case is a problem, because on
deselection of a mod, the mod select overlay resets its settings to
defaults:

	a258059d43/osu.Game/Overlays/Mods/ModSelectOverlay.cs (L424-L425)

A way to defend against this is a clone, but this reveals another issue,
in that the existing code was *relying* on the reference to the mod
remaining the same in any other case, to read the latest valid settings
of the mod. This basically only mattered in the edge case wherein Double
Time would swap places with Half Time and vice versa (think [0.95,1.05]
range). Therefore, track mod settings too explicitly to ensure that the
stored clone is as up-to-date as possible.
2024-09-30 08:47:02 +02:00
Dean Herbert
ac507a3ba5
Remove unused parameter in applyActiveCriteria 2024-09-18 17:22:09 +09:00
Dean Herbert
743d509241
Also ensure filter is applied when returning to song select 2024-09-18 17:22:08 +09:00
Dean Herbert
c192a6a1d5
Fix song select crashes due to attempting to clear selection after load has already begun 2024-09-18 16:12:34 +09:00
Bartłomiej Dach
cefbc76490
Fix selection being dropped when changing carousel sort mode from difficulty sort
Closes https://github.com/ppy/osu/issues/29738.

This "regressed" in https://github.com/ppy/osu/pull/29639, but if I
didn't know better, I'd go as far as saying that this looks like a .NET
bug, because the fact that PR broke it looks not sane.

The TL;DR on this is that before the pull in question, the offending
`.Contains()` check that this commit modifies was called on a
`List<BeatmapSetInfo>`. The pull changed the collection type to
`BeatmapSetInfo[]`. That said, the call is a LINQ call, so all good,
right?

Not really. First off, the default overload resolution order means that
the previous code would call `List<T>.Contains()`, and not
`Enumerable.Contains<T>()`. Then again, why would that matter? In both
cases `T` is still `BeatmapSetInfo`, right? Well... about that...

It is difficult to tell for sure what precisely is happening here,
because of what looks like runtime magic. The end *symptom* is that the
old code ended up calling `Array<BeatmapSetInfo>.IndexOf()`, and the new
code ends up calling... `Array<object>.IndexOf()`.

So while yes, `BeatmapSetInfo` implements `IEquatable` and
the expectation would be that `Equals<BeatmapSetInfo>()` should be
getting called, the type elision to `object` means that we're back to
reference equality semantics, because that's what
`EqualityComparer.Default<object>` is.

A five-minute github search across dotnet/runtime yields this:

	c4792a228e/src/coreclr/vm/array.cpp (L984-L990)

Now again, if I didn't know better, I'd see that "OPTIMIZATION:"
comment, see what transpired in this scenario, and call that
optimisation invalid, because it changes semantics. But I *probably*
know that the dotnet team knows better and am probably just going to
take it for what it is, because blame on that code looks to be years
old and it's probably not a new behaviour. (I haven't tested empirically
if it is.)

Instead the fix is just to tell the `.Contains()` method to use the
correct comparer.
2024-09-08 16:06:35 +02:00
Dean Herbert
4c6eb89530
Fix beatmap difficulties not being split out on first load
Closes https://github.com/ppy/osu/issues/29728.
2024-09-07 22:14:03 +09:00
Dan Balasescu
6913d75792
Add 'yes'/'no' acronyms to the played= filter 2024-09-06 18:04:39 +09:00
Dean Herbert
dfe11dc68a
Use for with exposed IReadOnlyList rather than making internal container public 2024-09-04 15:25:36 +09:00
Dean Herbert
421f245c31
Fix per-frame allocations in BeatmapCarousel 2024-09-04 14:31:59 +09:00
Bartłomiej Dach
4811481483
Merge pull request #29639 from peppy/detached-beatmap-cache
Improve song select load and reload with large beatmap databases
2024-08-30 15:00:20 +02:00
Dean Herbert
7b6e62283f
Fix beatmap not being detached on hide/unhide
The explicit detach call was removed from `updateBeatmapSet`, causing
this to occur. We could optionally add it back (it will be a noop in all
cases though).
2024-08-30 18:50:08 +09:00
Dean Herbert
1b9942cb30
Mark BeatmapSets as internal 2024-08-30 18:44:04 +09:00
Dean Herbert
291dd5b101
Remove TODO 2024-08-30 18:37:27 +09:00
Dan Balasescu
fde790c014
Rework played filter to a boolean value 2024-08-29 20:59:48 +09:00
Dean Herbert
def1abaeca
Fix some tests not always waiting long enough for beatmap loading
These used to work because there was a huge blocking load operation,
which is now more asynchronous.

Note that the change made in `SongSelect` is not required, but defensive
(feels it should have been doing this the whole time).
2024-08-29 18:42:43 +09:00
Dean Herbert
1776d38809
Remove loadedTestBeatmaps flag 2024-08-28 23:28:44 +09:00
Dean Herbert
e04b5bb3f2
Tidy up test beatmap loading 2024-08-28 23:28:44 +09:00
Dean Herbert
9123d2cb7f
Fix multiple test failures 2024-08-28 23:28:43 +09:00
Dean Herbert
dd4a1104e4
Always debounce external Filter requests (except for tests)
The only exception to the rule here was "when screen isn't active apply
without debounce" but I'm not sure we want this. It would cause a
stutter on returning to song select and I'm not even sure this is a
common scenario.

I'd rather remove it and see if someone finds an actual case where this
is an issue.
2024-08-28 19:13:50 +09:00
Dean Herbert
336abadbd1
Allow running initial filter criteria asynchronously
This reverts a portion of https://github.com/ppy/osu/pull/9539.

The rearrangement in `SongSelect` is required to get the initial filter
into `BeatmapCarousel` (and avoid the `FilterChanged` event firing,
causing a delayed/scheduled filter application).
2024-08-28 19:13:50 +09:00
Dean Herbert
b1f653899c
Fix enumeration over modified collection 2024-08-28 19:13:49 +09:00
Dean Herbert
81b36d897d
Fix null reference in change handling code 2024-08-28 19:13:49 +09:00
Dean Herbert
081c9eb21b
Fix incorrect cancellation / disposal handling of DetachedBeatmapStore 2024-08-28 17:21:19 +09:00
Dean Herbert
4d42274771
Use bindable list implementation 2024-08-28 16:03:37 +09:00
Dean Herbert
466ed5de78
Add basic detached beatmap store 2024-08-28 16:03:37 +09:00
Dean Herbert
60271fb0f7
Merge pull request #29564 from peppy/skinnable-components-what-2
Remove requirement of `base` calls to ensure user skin container layouts are retrieved
2024-08-23 17:52:46 +09:00
Bartłomiej Dach
bd6943ebc2
Merge pull request #29537 from normalid-awa/feature/song-select/allow-copy-url-from-context-menu
Allow copying beatmap link in song select carousel context menu
2024-08-22 14:03:39 +02:00
Dean Herbert
58552e9768
Add missing user ruleset to link copying for beatmap panels 2024-08-22 19:18:41 +09:00
Dean Herbert
9a21174582
Move GlobalSkinnableContainers to global scope 2024-08-22 18:46:07 +09:00
Dean Herbert
f37cab0c6e
Rename SkinComponentsContainerLookup to GlobalSkinnableContainerLookup 2024-08-22 18:39:36 +09:00
Dean Herbert
41756520b1
Rename SkinComponentsContainer to SkinnableContainer 2024-08-22 17:42:50 +09:00
Dean Herbert
f068b7a521
Move copy-to-url method to OsuGame to centralise toast popup support 2024-08-22 14:03:41 +09:00
Dean Herbert
ac5a3a0959
Remove one unused parameter 2024-08-22 02:17:11 +09:00
Dean Herbert
87123d99bf
Move URL implementation to extension methods and share with other usages 2024-08-22 02:08:01 +09:00
Dean Herbert
18a3ab2ffd
Use "link" instead of "URL" 2024-08-22 01:45:43 +09:00
jkh675
3d5b57454e Fix null reference 2024-08-21 16:21:49 +08:00
jkh675
8e273709f1 Implement copy url in beatmap and beatmap set carousel 2024-08-20 22:48:11 +08:00
Joseph Madamba
6dd08e9a96 Fix beatmap carousel panels not blocking hover of other panels in song select 2024-08-17 11:45:54 -07:00
Dean Herbert
b567ab2a39
Fix context menus sometimes not being clickable at song select
Closes https://github.com/ppy/osu/issues/21602.
2024-08-12 20:31:20 +09:00
Dean Herbert
c37f617e1d
Adjust song select info icon size slightly
Not going to PR this it's just a minor tweak.
2024-08-05 17:21:50 +09:00
AkiraTenchi
a5a392e9fc
Update FilterQueryParser.cs
Add sr as an alias for star rating in the search parameters
2024-08-04 19:48:29 +02:00
Dean Herbert
d9297438ba
Merge pull request #28900 from smoogipoo/fix-more-tests
Fix more test failures
2024-07-19 19:38:52 +09:00
Dan Balasescu
5af39aad00
Add beatmap name to log string
Makes it easy to compare this line versus the one in
OsuGame.PresentBeatmap(). At the moment it's just GUID which is... not
useful!
2024-07-19 19:02:41 +09:00
Dean Herbert
0f29ed618a
Don't attempt to clear the carousel during realm blocking operation 2024-07-19 17:39:47 +09:00
Dean Herbert
0560214d5b
Fix beatmap carousel performance regression with large databases 2024-07-19 17:39:47 +09:00
Bartłomiej Dach
4c1f902969
Do not allow working beatmap to switch to protected beatmap in song select
Principal fix to https://github.com/ppy/osu/issues/28880.
2024-07-17 11:46:19 +02:00
Dean Herbert
eb3f480a2a
Merge pull request #28683 from frenzibyte/footer-v2-integration
Replace local footer in existing sheared overlays (e.g. mod select & first-run setup) with `ScreenFooter`
2024-07-12 22:45:06 +09:00
Dean Herbert
123d3d2ff8
Add similar special case for insert after removal 2024-07-09 20:44:55 +09:00