Commit Graph

76611 Commits

Author SHA1 Message Date
Dean Herbert
cab50e94c8 Reduce online user list panel churn on initial display (#36811)
Yes this is a funny way of doing it, but it works and is better than
what we have for the initial release.

Don't expect this to stay around forever.
2026-03-05 00:44:03 +09:00
Dan Balasescu
ae032622ac Unimplement legacy compatibility method (#36812)
The spectator server invokes both legacy and non-legacy methods to keep
compatibility with older clients:


fe0dad3245/osu.Server.Spectator/Hubs/Multiplayer/Matchmaking/Queue/MatchmakingQueueBackgroundService.cs (L292-L299)

I thought that it'd be a good idea to implement the legacy method here,
but it turns out to not be such a good idea because it means ranked-play
clients will assume they're receiving a quick play invitation.
2026-03-05 00:31:43 +09:00
Dean Herbert
a0ecbd7c87 Merge pull request #36798 from bdach/tags-broken
Fix a bunch of breakage around user tags
2026-03-04 21:16:38 +09:00
Dean Herbert
459d5e8a45 Merge branch 'master' into tags-broken 2026-03-04 19:50:33 +09:00
Bartłomiej Dach
9b55e1dfdb Only show user tags above threshold by default 2026-03-04 10:34:35 +01:00
Bartłomiej Dach
4c873787c1 Merge pull request #36752 from peppy/song-select-v1-salute
Remove remnants of song select v1 and move v2 to final resting location
2026-03-04 10:27:07 +01:00
Bartłomiej Dach
43af89f75c Remove outdated xmldoc 2026-03-04 08:44:31 +01:00
Bartłomiej Dach
f74a21c1e1 Merge branch 'master' into song-select-v1-salute 2026-03-04 08:39:58 +01:00
Bartłomiej Dach
a028f0ba4a Fix loose spacers at top of leaderboard score context menu (#36799)
Closes https://github.com/ppy/osu/issues/36777.
2026-03-03 23:40:08 +09:00
Bartłomiej Dach
1aa42a73b1 Fix code quality 2026-03-03 13:38:23 +01:00
Bartłomiej Dach
d9e182230d Add bool flag for checking tag vote threshold & utilise as required
Closes https://github.com/ppy/osu/issues/36453.

My omission was in assuming that web was going to start filtering out
the tags below the threshold from API responses, which is not the case.

Whether or not the consumers want or not to display tags below threshold
is subjective. I figured that the matchmaking card tooltip might want to
display below threshold but I dunno.
2026-03-03 13:03:33 +01:00
Bartłomiej Dach
65b49137ee Move constant closer to helper 2026-03-03 13:03:33 +01:00
Bartłomiej Dach
2f96e96576 Migrate realm populating online lookup source to use helper method for retrieving tags
To reduce logic duplication.
2026-03-03 13:03:27 +01:00
Bartłomiej Dach
e64e0f0ca9 Fix beatmap set overlay not showing user tags at all
Regressed in 60d9c358b8.

In general an `APIBeatmap`'s `BeatmapSet` need not be present. In the
usage site of `osu.Game.Overlays.BeatmapSet.Info`, `Beatmap` and
`BeatmapSet` were actually two separate bindables. Moving the logic to a
helper, and therefore implicitly moving `BeatmapSet` from tracking said
separate bindable to instead refer to `Beatmap.BeatmapSet` broke this.
2026-03-03 12:44:29 +01:00
Bartłomiej Dach
d37f59430b Merge pull request #36796 from Joehuu/standardise-play-favourite-order
Standardise display order of playcount / favourites
2026-03-03 11:22:51 +01:00
Bartłomiej Dach
d748470754 Merge pull request #36795 from peppy/carousel-scrollbar-state-capture
Fix song select carousel state capture
2026-03-03 10:40:25 +01:00
Bartłomiej Dach
2539bd90fa Merge pull request #36794 from peppy/fix-tooltips-not-displaying-custom
Fix offset slider no longer showing explanatory tooltip correctly
2026-03-03 10:32:15 +01:00
Dean Herbert
317be21569 Final attempt to make copy labels work 2026-03-03 17:24:29 +09:00
Dean Herbert
b1044b6b2d Update framework 2026-03-03 17:20:14 +09:00
Dean Herbert
c28c64940a Move v2 files to final location
This contains only renames and namespace updates.
2026-03-03 16:45:15 +09:00
Dean Herbert
b4f40639a1 Add special not regarding collection dropdown 2026-03-03 16:45:15 +09:00
Dean Herbert
7e7421e1ea Update TestSceneDeleteLocalScore to use newer leaderboard 2026-03-03 16:45:14 +09:00
Dean Herbert
1a8d2855d4 Remove all song select v1 files
This contains no code changes (that would need review), only file
deletion and extraction where required in a few odd cases.
2026-03-03 16:45:14 +09:00
Dean Herbert
54a1417dd8 Move leaderboards classes to gameplay namespace for now 2026-03-03 16:45:13 +09:00
Dean Herbert
ce542b03db Move components only used by beatmap set overlay local to namespace 2026-03-03 16:45:13 +09:00
Dean Herbert
f20d182775 Update filter matching tests to be independent of old song select classes 2026-03-03 16:45:12 +09:00
Dean Herbert
a7e6286396 Fix a few remaining references to old song select 2026-03-03 16:45:12 +09:00
Dean Herbert
521a40d860 Remove now unused footer buttons 2026-03-03 16:25:58 +09:00
Joseph Madamba
564b6ebd0c Add tooltips to beatmap info overlay statistics 2026-03-02 22:53:09 -08:00
Joseph Madamba
7dfbab212e Add nominations statistic to beatmap info overlay
See 2198adfa68/resources/js/beatmapsets-show/header.tsx (L116-L123).
2026-03-02 22:47:10 -08:00
Joseph Madamba
b831bcbcd4 Change beatmap card play count and date icon to solid to match web 2026-03-02 22:40:16 -08:00
Joseph Madamba
c372f9b8f5 Standardise display order of playcount / favourites 2026-03-02 22:37:32 -08:00
Dean Herbert
b0759ff34d Fix song select carousel state capture
Closes #36776.
2026-03-03 15:36:46 +09:00
Dean Herbert
d60a12a351 Fix ordering of skins not working as expected (#36772)
As mentioned
[here](https://github.com/ppy/osu/pull/11536#issuecomment-3977314909).

Realm ordering is weird/broken so let's just do it at our end.
2026-03-03 14:03:55 +09:00
Dean Herbert
d27d0f40c1 Switch multiplayer to use song select v2 (#36747)
Tests pass and seems to work. Need to do a bit more self-testing for
higher confidence, but in theory..

Closes https://github.com/ppy/osu/issues/34035.

---------

Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2026-03-03 13:41:48 +09:00
Dean Herbert
ee9f8d5e92 Fix custom tooltip formats no longer displaying in settings
Closes #36793.
2026-03-03 12:59:23 +09:00
Bartłomiej Dach
9c8dfaf386 Apply more sanity checks when handling files from archives 2026-03-02 13:11:01 +01:00
Linus Genz
033e13cb3b Fix song select navigation with page up/down (#36293)
Resolves #36099 

This PR fixes keyboard navigation in the beatmap select carousel for
lazer by implementing page-wise traversal with the Page Up and Page Down
keys and changing it from only scrolling to actually selecting items.

**Changes:**
- Added handling for `TraversalType.Page` in the keyboard traversal
switch.
- Implemented `traverseKeyboardPage(int direction)` method to move the
selection by approximately one "page" of visible items, accounting for
partially obscured items like the search bar. Also it does not wrap
around (like the current PageUp/Down functionality).
- Added new key bindings:
    - `PageUp` → SelectPreviousPage
    - `PageDown` → SelectNextPage

The code may be very explicit for the scroll logic with the page keys,
so I would appreciate some feedback when the PR is reviewed.
The naming of the keybinds may need to be adjusted. `Next page` and
`previous page` may be somewhat misleading.

**Behavior after the change:**
- Pressing Page Up/Down now moves the selection by a page of items.
- After navigating, pressing Left/Right selects the navigated song
instead of moving relative to the previous position.

**See:**
https://www.youtube.com/watch?v=JXmKAhhKiCc

---------

Signed-off-by: Linus Genz <linuslinuxgenz@gmail.com>
Co-authored-by: Dean Herbert <pe@ppy.sh>
2026-03-02 02:08:19 +09:00
Krzysztof Gutkowski
b88cba0829 Refactor TestSceneScreenFooter to test entire OsuScreens (#36718)
Part of the `ScreenFooter` refactor, which intends to move the footer
content handling to `OsuScreen`. This commit updates the `ScreenFooter`
test to operate on entire `OsuScreen`s, in order to better test the
entire flow of pushing a screen, and having it create and add its own
content to the footer.

This should be 80-90% identical to the original test case structure
wise, just that instead of manually manipulating the footer with
`SetButtons()`, various screens with the appropriate buttons are being
moved around the screen stack.

Additionally this adds some more tests handling common use cases, as
well as removes `TestLoadOverlayAfterFooterIsDisplayed()`, since as far
as I understand the behaviour described in it doesn't actually happen in
production code. From what I can see, Screens instantiate their overlays
in `load()`, and then register them in `LoadComplete()`. There seems to
be no case where a `ShearedOverlayContainer` is created in the middle of
a screen's lifecycle.
2026-03-01 22:36:07 +09:00
Denis Titovets
9c489aacf8 Use better text structure for ScreenshotSaved notification (#36701)
reads a bit better when filename isn't in main text

also added "click to view" text by analogy with `LogsExportFinished`

| master | pr |
|-|-|
| <img width="336" height="114" alt="image"
src="https://github.com/user-attachments/assets/2555390c-1299-43ae-9be5-cb8d091b3387"
/> | <img width="336" height="108" alt="image"
src="https://github.com/user-attachments/assets/a8f18d9f-fa11-4d8f-82af-c88b0f82576c"
/> |
2026-02-28 22:58:07 +09:00
Krzysztof Gutkowski
105342e5bf Migrate sheared overlay tests to ScreenTestScene (#36736)
Part of the screen footer refactor.

Once footer content is being managed by `OsuScreen`, the current tests
which simply create the tested overlay and `ScreenFooter` in a container
will no longer work.

This PR refactors them to use `ScreenTestScene` with the setup being
creating a dedicated testing `OsuScreen` which does the bare minimum to
create the tested overlay and necessary components (eg.
`FooterButtonFreeModsV2` for `TestSceneFreeModsOverlay`).

Most of the changes here can be described as
`%s/<...>Overlay/screen.Overlay/g`, with some minor touchups as
necessary, given that we're now testing a more complete flow which
checks more things that were previously not handled by the tests.

## [Move footer to front in
ScreenTestScene](f8740e0403)

Self-explanatory. Without it the footer would show below the actual
overlay, breaking tests depending on manual input. For the sake of tests
not breaking in CI, both #36718 and this have this included - would
prefer the former to be merged first since it was already reviewed
there.

## `TestSceneModSelectOverlay`

There were a few tests (`TestColumnHidingOnIsValidChange`,
`TestColumnHidingOnTextFilterChange`, and
`TestHidingOverlayClearsTextSearch`) that would create a custom overlay
instance instead of the globally provided one. I've tested both and the
tests run fine with the default overlay, so they're now using that
instead.

## `TestSceneFreeModSelectOverlay`

Updated to use footer v2.

---------

Co-authored-by: Dean Herbert <pe@ppy.sh>
2026-02-28 04:22:58 +09:00
Dan Balasescu
c72b6412ea Add pool type to matchmaking room invited event (#36765)
Rebase of https://github.com/smoogipoo/osu/pull/193

Going forward, the client will have to know the type of pool being
invited to so that it can enter the appropriate screen when clicking the
notification.

Unfortunately, SignalR does not support overloading methods, or even
adding parameters to them, so this PR deprecates the
`MatchmakingRoomInvited` event and adds its replacement
`MatchmakingRoomInvitedWithParams` with a complex `invitation` parameter
that we _can_ extend in the future if required (such as potentially
adding the name of the pool).

This also prepares the notification by extracting some code to a
`Complete` method receiving said `invitation` parameter. This part of
code will be further modified to enter the correct screen:


0a4018045b/osu.Game/Screens/OnlinePlay/Matchmaking/Queue/QueueController.cs (L200)

In particular, I have tested that new clients continue to work with the
old server (dev.ppy.sh) in quick play

|         | Old Server           | New Server  |
| ------------- |:-------------:| :-----:|
| Old Client      | 🟢  | 🟢 |
| New Client      | 🟢  | 🟢 |
2026-02-28 00:42:44 +09:00
Dean Herbert
2e659a79ec Merge pull request #36767 from LiquidPL/cleanup-online-play-tests
Remove redundant footer from `TestScenePlaylistsRoomSubscreen`
2026-02-27 20:13:21 +09:00
Krzysztof Gutkowski
5131b188d1 Remove redundant footer from TestScenePlaylistsRoomSubscreen
`ScreenTestScene` already provides one.
2026-02-27 11:12:30 +01:00
Bartłomiej Dach
7e2771c3f0 Improve usability of sample bank toggles (#36753)
- [x] Depends on https://github.com/ppy/osu/pull/36741 for merge
conflict avoidance

RFC, cc @OliBomby

## [Adjust behaviour of automatic bank assignment during
placement](547f55e9b3)

Diatribe time!

This is fallout of the discussion about auto bank in
https://github.com/ppy/osu/issues/36705.

Auto bank in lazer as written before this commit is confused. On stable,
auto bank is closer to "no bank", as in "go look up the current sample
timing point, get the bank of that, and use that". lazer has no timing
points anymore, but people still want auto bank. So what do?

Auto bank for normal samples is somewhat sane still. It only works
during placement, and will just copy the normal bank of the previous
object - if one exists. That said, one *might not* exist, but the
resulting object will still have its normal sample created with
`editorAutoBank: true`. That is largely cosmetic and without
consequences, but this commit fixes that.

Auto bank for *addition* samples, however... Hoo boy.

- For placed objects, auto bank means "take the normal sample, read its
bank, and use that". Simple enough, right?
- Hoooooowever. During placement, auto bank before this commit used to
mean "look at the *previous object*, check if it has an addition sound
and then use its bank, if not use *the previous object's* normal sample
and then use its bank" which is a completely different thing with its
own implications. Like, say, what happens if the previous object uses
the auto addition bank too? What should be copied over? Should it be the
notion of "auto bank" in that the addition bank should match the normal
bank, or should it be the literal bank that the previous object is
using?

This change attempts to define this unambiguously. "Auto additions bank"
means "the same bank as the normal bank of this object", full stop.

## [Do not touch sample toggle state if there are no selected
objects](052cde5987)

Fixes issue described in
https://github.com/ppy/osu/issues/36705#issuecomment-3953917163 wherein
opening a sample popover will disable addition bank toggles and toggle
off all addition samples.

---------

Co-authored-by: Dean Herbert <pe@ppy.sh>
2026-02-26 15:18:29 +09:00
Bartłomiej Dach
5174d8b918 Fix changing normal sample bank via keyboard hotkeys not updating addition bank if set to auto (#36741)
Closes https://github.com/ppy/osu/issues/36703.

It was only broken via keyboard hotkeys and not via the sample popover
because the sample popover has a separate copy of the logic that didn't
have the bug. Compare:


13aeed15f9/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs (L473-L475)

I considered splitting a helper to have one copy of the logic but it's
not very simple to do compared to a two-liner fix so I gave up.
2026-02-26 02:47:45 +09:00
Bartłomiej Dach
32d10406c9 Merge pull request #36751 from peppy/fix-hidden-controls-settings
Fix input settings being interactive even when collapsed
2026-02-25 10:38:10 +01:00
Neti
0dfb362b2d Use HotkeyDisplay for toolbar buttons (#36750)
Uses `HotkeyDisplay` for toolbar button tooltips rather than
`SpriteText`

<img width="433" height="160" alt="image"
src="https://github.com/user-attachments/assets/d74c4dd2-27fd-4e7c-881e-3c6152982dd6"
/>

---------

Co-authored-by: Dean Herbert <pe@ppy.sh>
2026-02-25 16:31:36 +09:00
Dean Herbert
047ea7c09d Fix hidden settings flow content still being interactive
`AlwaysPresent` is a code smell here. Rather than doing this, let's just
using masking as we usually do.

Closes https://github.com/ppy/osu/issues/36748.
2026-02-25 14:35:24 +09:00
Dean Herbert
cb597c4120 Fix flow animating its display initially when it shouldn't 2026-02-25 14:34:50 +09:00