1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-07 23:32:56 +08:00
Commit Graph

45241 Commits

Author SHA1 Message Date
Bartłomiej Dach
0c54853710
Merge branch 'spectator-list-visuals' into spectator-list-ready 2025-01-16 15:13:04 +01:00
Bartłomiej Dach
81f54507dd
Fix potential index accounting mistake when creating spectator list with spectators already present
Noticed by accident, but if the `BindCollectionChanged()` callback fires
immediately in `LoadComplete()` when set up and there are spectators
present already, then `NewStartingIndex` in the related event is -1:

	b03f83de36/src/libraries/System.ObjectModel/src/System/Collections/Specialized/NotifyCollectionChangedEventArgs.cs (L84-L92)

which kinda breaks the math introducing off-by-ones and in result causes
11 items to be displayed together rather than 10.
2025-01-16 14:29:41 +01:00
Bartłomiej Dach
e3b780d0fb
Merge branch 'master' into spectator-list-visuals 2025-01-16 14:07:53 +01:00
Dean Herbert
a6057a9f54
Move absolute scroll support local to carousel and allow custom bindings 2025-01-16 20:47:59 +09:00
Dean Herbert
1c2621d88e
Add support to CarouselV2 for right mouse button scrolling 2025-01-16 20:27:38 +09:00
Dean Herbert
56b450c4a6
Remove setting for right-mouse scroll (make it always applicable) 2025-01-16 20:27:38 +09:00
Bartłomiej Dach
6b921fc4e4
Merge pull request #31471 from peppy/beatmap-carousel-v2
Add basic framework for carousel displays (aka `BeatmapCarouselV2`)
2025-01-16 12:21:53 +01:00
Dan Balasescu
8400726887
Move bindables to OsuConfigManager & SessionStatics 2025-01-16 19:33:42 +09:00
Dean Herbert
e47244989a
Adjust animations a bit
Removed autosize duration stuff because it looks weird when the list is
shown from scratch where users are already fully populated in it.
2025-01-16 19:23:54 +09:00
Dean Herbert
32906aefde
Add gradient on final spectator if more than list capacity are displayed 2025-01-16 19:05:19 +09:00
Dean Herbert
996798d2df
Avoid list width changing when spectator count changes 2025-01-16 19:02:14 +09:00
Dean Herbert
cde8e7b82e
Fix idle/hover colour handling weirdness in OsuHoverContainer 2025-01-16 18:54:51 +09:00
Dean Herbert
1d240eb405
Fix gameplay limitations for adjusting offset not actually being applied 2025-01-16 18:05:59 +09:00
Dan Balasescu
c1f0c47586
Allow setting of DummyAPIAccess status 2025-01-16 17:06:54 +09:00
Dan Balasescu
b54d959263
Expose as IBindable from IAPIProvider, writes via config 2025-01-16 17:05:18 +09:00
Shawn Presser
6008c3138e Typo fix 2025-01-15 19:29:41 -06:00
Bartłomiej Dach
99c7e164dc
Add skinnable spectator list to default skins 2025-01-15 14:29:53 +01:00
Bartłomiej Dach
12b2631e5e
Add a skinnable variant of spectator list & hook it up to online data 2025-01-15 14:29:53 +01:00
Bartłomiej Dach
43fc48a3f3
Add client methods allowing users to be notified of who is watching them 2025-01-15 14:18:01 +01:00
Bartłomiej Dach
582c5180b9
Implement spectator list display
- First step for https://github.com/ppy/osu/issues/22087
- Supersedes / closes https://github.com/ppy/osu/pull/22795

Roughly uses design shown in
https://github.com/ppy/osu/pull/22795#issuecomment-1579936284 with some
modifications to better fit everything else, and some customisation
options so it can fit better on other skins.
2025-01-15 14:17:53 +01:00
Dean Herbert
e22dc09149
Update framework 2025-01-15 20:42:46 +09:00
Dean Herbert
6027947657
Move animation handling to Carousel implementation to better handle add/removes
With the animation logic being external, it was going to make it very
hard to apply the scroll offset when a new panel is added or removed
before the current selection.

There's no real reason for the animations to be local to beatmap
carousel. If there's a usage in the future where the animation is to
change, we can add more customisation to `Carousel` itself.
2025-01-15 17:01:07 +09:00
Bartłomiej Dach
614243fef4
Merge pull request #31506 from peppy/fix-storyboard-break-overhead
Fix stutter on intensive storyboards when entering break time with 100% background dim
2025-01-15 08:23:58 +01:00
Dean Herbert
0b764e6372
Fix substring of GetHashCode potentially failing 2025-01-15 16:18:34 +09:00
Dan Balasescu
b9f3a1de6a
Merge pull request #31523 from Rudicito/apply-offset-when-same-audio
Apply beatmap offset to all difficulties only if they have the same audio
2025-01-15 14:20:16 +09:00
Dean Herbert
ef7982fbfa
Merge pull request #31446 from EVAST9919/new-combo-editor
Fix performance degradation while trying to place object with a new combo in the editor.
2025-01-15 12:56:06 +09:00
Rudi Herouard
57a9911b22 Apply beatmap offset on every beatmap set difficulty if they have the same audio 2025-01-15 04:12:54 +01:00
Dan Balasescu
b7a9b77efe
Make config the definitive status value 2025-01-15 00:01:19 +09:00
Dan Balasescu
20108e3b74
Remove Status and Activity bindables from APIUser
As for the tests, I'm (ab)using the `IsOnline` state for the time being
to restore functionality.
2025-01-14 23:45:30 +09:00
Dan Balasescu
ad14720714
Merge pull request #31508 from peppy/api-startup-state
Fix replays not correctly pre-importing beatmap when arriving from a cold start
2025-01-14 22:43:08 +09:00
Dean Herbert
0e20c0e307
Merge pull request #31473 from bdach/colorhax
Add combo colour override control to editor
2025-01-14 20:52:15 +09:00
Dean Herbert
e871f02350
Fix inspections that don't show in rider 2025-01-14 20:43:03 +09:00
Dean Herbert
91fa2e70d8
Revert name change 2025-01-14 20:41:18 +09:00
Dean Herbert
3523a2fe61
Merge branch 'master' into api-startup-state 2025-01-14 20:39:05 +09:00
Dan Balasescu
f2b7984e5a
Merge pull request #31507 from peppy/api-startup-user
Ensure API starts up with `LocalUser` in correct state
2025-01-14 20:36:55 +09:00
Dean Herbert
900237c1ed
Add loading overlay and refine filter flow 2025-01-14 20:23:53 +09:00
Dean Herbert
cc8941a94a
Add animation and depth control 2025-01-14 20:12:09 +09:00
Plextora
31d7c6a22e
Merge branch 'master' into colour-for-friend-lb 2025-01-14 05:57:44 -05:00
Dean Herbert
7e8a80a0e5
Add difficulty, artist and title sort examples
Also:

- Adds hinting at grouping and header status of items
- Passes through criteria and prepare for grouping tests.
- Makes `Filters` list `protected` because naming clash with `Filter()`
  on `BeatmapCarousel`.
2025-01-14 19:52:48 +09:00
Dean Herbert
d97a3270a5
Split out BeatmapCarousel classes and drop V2 suffix 2025-01-14 19:18:02 +09:00
Dean Herbert
8d41eda91a
Merge branch 'master' into beatmap-carousel-v2 2025-01-14 19:06:52 +09:00
Dean Herbert
3ddff19337
Fix potential nullref due to silly null handling and too much OOP 2025-01-14 19:03:58 +09:00
Dean Herbert
b4d054fdc0
Merge pull request #31444 from smoogipoo/friend-presence-2
Add notifications for when friends go online or offline
2025-01-14 18:58:19 +09:00
Bartłomiej Dach
459577cc32
Merge pull request #31474 from peppy/scroll-container-double-precision
Update game `ScrollContainer` usage in line with framework changes
2025-01-14 10:56:55 +01:00
Dean Herbert
55ae0403d8
Ensure API state is Connecting immediately on startup when credentials are present
Currently, there's a period where the API is `Offline` even though it is
about to connect (as soon as the `run` thread starts up).

This can cause any `Queue`d requests to fail if they arrive too early.

To avoid this, let's ensure the `Connecting` state is set as early as
possible.
2025-01-14 18:18:53 +09:00
Dan Balasescu
156207d347
Remove unused using 2025-01-14 17:54:40 +09:00
Dan Balasescu
51c7c218bf
Simplify operations on local list 2025-01-14 17:52:26 +09:00
Bartłomiej Dach
92cc45dc05
Merge branch 'text-input-properties' into scroll-container-double-precision 2025-01-14 09:51:48 +01:00
Dean Herbert
f6073d4ac0
Ensure API starts up with LocalUser in correct state
I noticed in passing that in a very edge case scenario where the API's
`run` thread doesn't run before it is loaded into the game, something
could access it and get a guest `LocalUser` when the local user actually
has a valid login.

Put another way, the `protected HasLogin` could be `true` while
`LocalUser` is `Guest`.

I think we want to avoid this, so I've moved the initial set of the
local user earlier in the initialisation process.

If this is controversial in any way, the PR can be closed and we can
assume no one is ever going to run into this scenario (or that it
doesn't matter enough even if they did).
2025-01-14 17:43:43 +09:00
Bartłomiej Dach
8211c4ee98
Merge branch 'master' into colorhax 2025-01-14 08:56:52 +01:00
Bartłomiej Dach
8ffd254719
Adjust initialisation code to start with combo colour picker hidden 2025-01-14 08:54:46 +01:00
Dean Herbert
3c913c9f6d
Merge branch 'master' into colour-for-friend-lb 2025-01-14 16:34:05 +09:00
Dean Herbert
904a08af26
Update textbox usage in line with framework changes 2025-01-14 16:29:56 +09:00
Dean Herbert
2c57cd59a5
Update framework 2025-01-14 16:26:56 +09:00
Dean Herbert
77db355809
Ensure storyboards are still updated even when dim is 100%
This avoids piled-up overhead when entering break time. It's not great,
but it is what we need for now to avoid weirdness.
2025-01-14 16:22:10 +09:00
Bartłomiej Dach
8968ab19d9
Merge branch 'master' into fix-skin-editor-undo 2025-01-13 12:39:51 +01:00
Bartłomiej Dach
fc069e060c
Only show colour on new combo selector button if overridden
As proposed in
https://discord.com/channels/188630481301012481/188630652340404224/1327309179911929936.
2025-01-13 12:38:28 +01:00
Dean Herbert
cf55fe16ab
Generic type instead of raw object? 2025-01-11 01:43:47 +09:00
Dean Herbert
6fbab1bbce
Stop exposing CarouselItem externally 2025-01-11 01:43:47 +09:00
Dean Herbert
ad04681b28
Add scroll position maintaining 2025-01-11 01:43:47 +09:00
Dean Herbert
288be46b17
Add basic selection support 2025-01-11 01:43:47 +09:00
Dean Herbert
5e9a7532d3
Add basic implementation of new beatmap carousel 2025-01-11 01:43:47 +09:00
Dean Herbert
94ea003d90
Update game ScrollContainer usage in line with framework changes
See https://github.com/ppy/osu-framework/pull/6467.
2025-01-11 01:42:59 +09:00
Bartłomiej Dach
933f5db208
Merge branch 'master' into new-combo-editor 2025-01-10 14:13:14 +01:00
Bartłomiej Dach
48196949e0
Add combo colour override control to editor
Closes https://github.com/ppy/osu/issues/25608.

Logic mostly matching stable. All operations are done on `ComboOffset`
which still makes overridden combo colours weirdly relatively dependent
on each other rather than them be an "absolute" choice, but alas...

As per stable, two consecutive new combos can use the same colour only
if they are separated by a break:

    52f3f75ed7/osu!/GameModes/Edit/Modes/EditorModeCompose.cs#L4564-L4571

This control is only available once the user has changed the combo
colours from defaults; additionally, only a single new combo object
must be selected for the colour selector to show up.
2025-01-10 13:40:56 +01:00
Dean Herbert
73adc4dfd7
Merge pull request #31364 from bdach/editor-storyboard-display-2
Display storyboard in editor background
2025-01-10 15:09:44 +09:00
Dan Balasescu
38d95abc24
Merge pull request #31462 from bdach/ternary-button-is-bad
Simplify editor "ternary button" structure
2025-01-10 14:24:41 +09:00
Bartłomiej Dach
5c8ae6f851
Simplify editor "ternary button" structure
As I look into re-implementing the ability to choose combo colour for an
object (also known as "colourhax") from the editor UI, I stumble upon
these wretched ternary items again and sigh a deep sigh of annoyance.

The structure is overly rigid. `TernaryItem` does nothing that
`DrawableTernaryItem` couldn't, except make it more annoying to add
specific sub-variants of `DrawableTernaryItem` that could do more
things.

Yes you could sprinkle more levels of virtuals to
`CreateDrawableButton()` or something, but after all, as Saint Exupéry
says, "perfection is finally attained not when there is no longer
anything to add, but when there is no longer anything to take away."
So I'm leaning for taking one step towards perfection.
2025-01-09 13:41:22 +01:00
Dan Balasescu
7268b2e077
Add separate path for friend presence notifications
It proved to be too difficult to deal with the flow that clears user
states on stopping the watching of global presence updates. It's not
helped in the least that friends are updated via the API, so there's a
third flow to consider (and the timings therein - both server-spectator
and friends are updated concurrently).

Simplest is to separate the friends flow, though this does mean some
logic and state duplication.
2025-01-09 17:31:01 +09:00
Dean Herbert
c8f72fdbe9
Fix rate adjustments changing the spacing between replay frames 2025-01-09 13:30:04 +09:00
Dan Balasescu
f4d83fe685
Keep friend states when stopping watching global activity 2025-01-09 13:23:16 +09:00
Bartłomiej Dach
bcd35c8899
Merge branch 'master' into editor-storyboard-display-2 2025-01-08 15:46:08 +01:00
Bartłomiej Dach
5a2024777d
Select closest timing point every time the timing screen is changed to
No issue thread for this, was pointed out internally:
https://discord.com/channels/90072389919997952/1259818301517725707/1316604605777444905

Due to the custom setup that editor has with its nested
"screens-that-aren't-screens", the logic that selects the closest
timing point to the current time would only fire on the first open of
the screen. Seems like a good idea to have it fire every time instead.
2025-01-08 14:24:46 +01:00
Bartłomiej Dach
e7070bd812
Merge pull request #31448 from bdach/automatic-new-combo-after-break
Force new combo on objects succeeding a break
2025-01-08 11:22:30 +01:00
Bartłomiej Dach
7c70dc4dc3
Only update combo information when any changes happened 2025-01-08 10:28:06 +01:00
Dean Herbert
f216c22806
Merge pull request #31445 from bdach/reset-speed-on-test-play
Reset playback speed to 100% on entering test play
2025-01-08 16:16:28 +09:00
Bartłomiej Dach
d9f0f0d729
Merge branch 'master' into editor-storyboard-display-2 2025-01-08 08:12:55 +01:00
Dean Herbert
d5f2bdf6cd
Appease message pack new inspections 2025-01-08 03:13:29 +09:00
Dean Herbert
6f42b59e31
Upgrade more packages again
This also downgrades nunit to be aligned across all projects. Getting it
up-to-date is a bit high effort.
2025-01-08 03:13:11 +09:00
Dean Herbert
125d652dd8
Update realm xmldoc references 2025-01-08 01:35:56 +09:00
Dean Herbert
18ff25bc6d
Merge branch 'master' into upgrade-packages 2025-01-08 01:23:28 +09:00
Bartłomiej Dach
d0a39a7733
Merge pull request #31442 from peppy/supporter-button-always-warns
Always show dialog when clicking supporter icon before opening browser
2025-01-07 15:14:53 +01:00
Bartłomiej Dach
5431a08b35
Merge pull request #31435 from peppy/star-range-display-quality
Fix star range display looking a bit bad when changing opacity
2025-01-07 14:58:00 +01:00
Bartłomiej Dach
c93b87583a
Force new combo on objects succeeding a break
No issue thread for this again. Reported internally on discord:
https://discord.com/channels/90072389919997952/1259818301517725707/1320420768814727229

Placing this logic in the beatmap processor, as a post-processing step,
means that the new combo force won't be visible until a placement has
been committed. That can be seen as subpar, but I tried putting this
logic in the placement and it sucked anyway:

- While the combo number was correct, the colour looked off, because it
  would use the same combo colour as the already-placed objects after
  said break, which would only cycle to the next, correct one on
  placement

- Not all scenarios can be handled in the placement. Refer to one of the
  test cases added in the preceding commit, wherein two objects are
  placed far apart from each other, and an automated break is inserted
  between them - the placement has no practical way of knowing whether
  it's going to have a break inserted automatically before it or not.
2025-01-07 14:06:23 +01:00
Andrei Zavatski
8f4eafea4e Fix combo properties multiple reassignments 2025-01-07 14:00:31 +03:00
Bartłomiej Dach
98bb723438
Do not expose track directly in EditorClock
Intends to stop people from mutating it directly, and going through
`EditorClock` members like `AudioAdjustments` instead.
2025-01-07 11:40:18 +01:00
Dan Balasescu
45e0adcd25
Add config option 2025-01-07 19:32:30 +09:00
Bartłomiej Dach
275e8ce7b7
Remove unused protected field 2025-01-07 11:26:08 +01:00
Bartłomiej Dach
a5036cd092
Re-route editor tempo adjustment via EditorClock and remove it on gameplay test 2025-01-07 11:25:00 +01:00
Bartłomiej Dach
3c03406b45
Add failing test 2025-01-07 11:23:47 +01:00
Dan Balasescu
51b62a6d8e
Display notification on friend presence changes 2025-01-07 19:12:33 +09:00
Dean Herbert
383fda7431
Fix star range display looking a bit bad when changing opacity 2025-01-07 16:42:06 +09:00
Bartłomiej Dach
01e9c0f15e
Merge pull request #31418 from peppy/intro-file-integrity
Ensure intro files exist in storage during startup
2025-01-07 08:14:40 +01:00
Dan Balasescu
77d9c955ea
Merge pull request #31306 from bdach/aspire-slider-breakage
Fix slider event generator incorrectly not generating repeats when tick distance is zero
2025-01-07 11:50:18 +09:00
Andrei Zavatski
d35b308745 Use cleaner array creation expression 2025-01-07 01:23:19 +03:00
Andrei Zavatski
791ca915e4 Fix allocations in updateSamplePointContractedState 2025-01-07 00:48:58 +03:00
Andrei Zavatski
e8dc09f5bc Reduce HitSampleInfo constants allocations 2025-01-07 00:36:58 +03:00
Bartłomiej Dach
3a4497af32
Constrain range of usable characters in romanised metadata to ASCII only
Closes https://github.com/ppy/osu/issues/31398.

Rationale given in issue.

Compare stable logic:

- 2280c4c436/osu!/GameModes/Edit/Forms/SongSetup.cs#L118-L122
- 2280c4c436/osu!common/Helpers/GeneralHelper.cs#L410-L423

The control character check is a bit gratuitous (text boxes will already
not allow insertion of those, see
e05cb86ff6/osu.Framework/Graphics/UserInterface/TextBox.cs (L92)),
but as it's a general helper I figured might as well.
2025-01-06 14:04:47 +01:00
Dean Herbert
4f1a6b4688
Always show dialog when clicking supporter icon before opening browser
I managed to do this by accident three times today while testing using
the dashboard display, so it's time to action on it.

Touched on in
https://github.com/ppy/osu/discussions/30740#discussioncomment-11345996.
Was also mentioned recently in discord or another discussion explicitly
but I can't find that.
2025-01-06 17:51:04 +09:00
Dan Balasescu
448790a76f
Merge pull request #31386 from peppy/fix-applying-offset
Fix not being able to apply last play offset after returning to song select
2025-01-06 11:40:12 +09:00