1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-25 12:13:11 +08:00
Commit Graph

4152 Commits

Author SHA1 Message Date
Dean Herbert
b809d4c068
Remove delegate overhead from argon health display's animation updates 2024-01-07 14:31:22 +09:00
Dean Herbert
91bb3f6c57
Cache argon character glyph lookups to reduce string allocations 2024-01-05 01:24:00 +09:00
Dean Herbert
705f25e4b9
Make ScoreProcessor.Rank read-only 2024-01-04 17:13:24 +09:00
Dean Herbert
0bbc27e380
Add a gameplay configuration flag to disable fail animation 2024-01-04 17:13:24 +09:00
Bartłomiej Dach
04147eb689
Fix lack of correct default value spec 2024-01-03 11:46:28 +01:00
Bartłomiej Dach
e686a6a1dd
Fix player submission test intermittent failures due to audio playback discrepancy logic kicking in
See https://github.com/ppy/osu/actions/runs/7384457927/job/20087439457#step:5:133.
2024-01-03 09:17:01 +01:00
Bartłomiej Dach
3c5e9ac9a9
Fix possible double score submission when auto-retrying via perfect mod
Closes https://github.com/ppy/osu/issues/26035.

`submitOnFailOrQuit()`, as the name suggests, can be called both when
the player has failed, or when the player screen is being exited from.
Notably, when perfect mod with auto-retry is active, the two happen
almost simultaneously.

This double call exposes a data race in `submitScore()` concerning the
handling of `scoreSubmissionSource`. The race could be experimentally
confirmed by applying the following patch:

diff --git a/osu.Game/Screens/Play/SubmittingPlayer.cs b/osu.Game/Screens/Play/SubmittingPlayer.cs
index 83adf1f960..76dd29bbdb 100644
--- a/osu.Game/Screens/Play/SubmittingPlayer.cs
+++ b/osu.Game/Screens/Play/SubmittingPlayer.cs
@@ -228,6 +228,7 @@ private Task submitScore(Score score)
                 return Task.CompletedTask;
             }

+            Logger.Log($"{nameof(scoreSubmissionSource)} is {(scoreSubmissionSource == null ? "null" : "not null")}");
             if (scoreSubmissionSource != null)
                 return scoreSubmissionSource.Task;

@@ -237,6 +238,7 @@ private Task submitScore(Score score)

             Logger.Log($"Beginning score submission (token:{token.Value})...");

+            Logger.Log($"creating new {nameof(scoreSubmissionSource)}");
             scoreSubmissionSource = new TaskCompletionSource<bool>();
             var request = CreateSubmissionRequest(score, token.Value);

which would result in the following log output:

	[runtime] 2024-01-02 09:54:13 [verbose]: scoreSubmissionSource is null
	[runtime] 2024-01-02 09:54:13 [verbose]: scoreSubmissionSource is null
	[runtime] 2024-01-02 09:54:13 [verbose]: Beginning score submission (token:36780)...
	[runtime] 2024-01-02 09:54:13 [verbose]: creating new scoreSubmissionSource
	[runtime] 2024-01-02 09:54:13 [verbose]: Beginning score submission (token:36780)...
	[runtime] 2024-01-02 09:54:13 [verbose]: creating new scoreSubmissionSource
	[network] 2024-01-02 09:54:13 [verbose]: Performing request osu.Game.Online.Solo.SubmitSoloScoreRequest
	[network] 2024-01-02 09:54:14 [verbose]: Request to https://dev.ppy.sh/api/v2/beatmaps/869310/solo/scores/36780 successfully completed!
	[network] 2024-01-02 09:54:14 [verbose]: SubmitSoloScoreRequest finished with response size of 639 bytes
	[network] 2024-01-02 09:54:14 [verbose]: Performing request osu.Game.Online.Solo.SubmitSoloScoreRequest
	[runtime] 2024-01-02 09:54:14 [verbose]: Score submission completed! (token:36780 id:20247)
	[network] 2024-01-02 09:54:14 [verbose]: Request to https://dev.ppy.sh/api/v2/beatmaps/869310/solo/scores/36780 successfully completed!
	[network] 2024-01-02 09:54:14 [verbose]: SubmitSoloScoreRequest finished with response size of 639 bytes
	[runtime] 2024-01-02 09:54:14 [error]: An unhandled error has occurred.
	[runtime] 2024-01-02 09:54:14 [error]: System.InvalidOperationException: An attempt was made to transition a task to a final state when it had already completed.
	[runtime] 2024-01-02 09:54:14 [error]: at osu.Game.Screens.Play.SubmittingPlayer.<>c__DisplayClass30_0.<submitScore>b__0(MultiplayerScore s) in /home/dachb/Documents/opensource/osu/osu.Game/Screens/Play/SubmittingPlayer.cs:line 250

The intention of the submission logic was to only ever create one
`scoreSubmissionSource`, and then reuse this one if a redundant
submission request was made. However, because of the temporal proximity
of fail and quit in this particular case, combined with the fact that
the calls to `submitScore()` are taking place on TPL threads, means that
there is a read-write data race on `scoreSubmissionSource`, wherein the
source can be actually created twice.

This leads to two concurrent score submission requests, which, upon
completion, attempt to transition only _the second_
`scoreSubmissionSource` to a final state (this is because the API
success/failure request callbacks capture `this`, i.e. the entire
`SubmittingPlayer` instance, rather than the `scoreSubmissionSource`
reference specifically).

To fix, ensure correct synchronisation on the read-write critical
section, which should prevent the `scoreSubmissionSource` from being
created multiple times.
2024-01-02 10:55:52 +01:00
Bartłomiej Dach
6d124513e7
Fix test failures due to player bailing early after failing to load beatmap 2023-12-28 14:15:15 +01:00
Bartłomiej Dach
619b0cc69b
Fix code quality inspection 2023-12-28 14:12:28 +01:00
Bartłomiej Dach
24a80da83f
Merge branch 'master' into universal-offset-from-session-plays 2023-12-28 14:07:46 +01:00
Dean Herbert
e1a376c0a7
Fix using "Back" binding at spectator fail screen not working 2023-12-28 20:14:18 +09:00
Dean Herbert
b7f3c83514
Expose the ability to update global offset from the player loader screen 2023-12-28 20:01:34 +09:00
Bartłomiej Dach
1b7af989ec
Migrate BeatmapOffsetControl to use session static directly 2023-12-27 19:19:27 +01:00
Bartłomiej Dach
d4423d4933
Store last set score to a SessionStatic 2023-12-27 19:13:42 +01:00
rushiiMachine
1d4db3b7a9
Fix SkinEditorOverlay freezing when ReplayPlayer screen exits early
Originally when popping in, the ReplayPlayer was loaded first (if previous screen was MainMenu), and afterwards the SkinEditor component was loaded asynchronously. However, if the ReplayPlayer screen exits quickly (like in the event the beatmap has no objects), the skin editor component has not finished initializing (this is before it was even added to the component tree, so it's still not marked `Visible`), then the screen exiting will cause `OsuGame` to call SetTarget(newScreen) -> setTarget(...) which sees that the cached `skinEditor` is not visible yet, and hides/nulls the field. This is the point where LoadComponentAsync(editor, ...) finishes, and the callback sees that the cached skinEditor field is now different (null) than the one that was loaded, and never adds it to the component tree. This occurrence is unhandled and as such the SkinEditorOverlay never hides itself, consuming all input infinitely.

This PR changes the loading to start loading the ReplayPlayer *after* the SkinEditor has been loaded and added to the component tree.
Additionally, this lowers the exit delay for ReplayPlayer and changes the "no hit objects" notification to not be an error since it's a controlled exit.
2023-12-26 12:22:00 -08:00
Dean Herbert
d70fddb6fd
Fix elapsed time being counted twice on first frame 2023-12-27 00:11:22 +09:00
Dean Herbert
225528d519
Bail from score submission if audio playback rate is too far from reality
Closes https://github.com/ppy/osu/issues/23149.
2023-12-26 19:20:58 +09:00
Dean Herbert
686b2a4394
Disable positional interaction for now 2023-12-24 03:00:51 +09:00
Dean Herbert
72bec527fd
Add conditions to match stable offset adjust limitations 2023-12-24 02:36:27 +09:00
Dean Herbert
92b490f2e7
Don't bother with alt support for now 2023-12-24 01:59:48 +09:00
Dean Herbert
6f11885d4b
Add control to allow changing offset from gameplay 2023-12-23 20:51:30 +09:00
Dean Herbert
7e9522a722
Allow external use of offset text explanation 2023-12-23 20:46:12 +09:00
Dean Herbert
27a9dcc5a1
Add basic hotkey offset adjust support (via existing offset control) 2023-12-23 19:55:05 +09:00
Bartłomiej Dach
81bbdccee7
Rename ScoreInfo.{ -> Client}Version 2023-12-21 12:56:43 +01:00
Dean Herbert
a4baa0a716
Add versioning of local scores
For any potential future usage
2023-12-21 18:37:15 +09:00
rushiiMachine
ebbc8333e8
Prevent ExportReplay being spammed on fail by being held down
This was already handled in ReplayDownloadButton (98efff0bd6/osu.Game/Screens/Ranking/ReplayDownloadButton.cs (L114-L115)) but seemingly missed for SaveFailedScoreButton
2023-12-20 08:41:16 -08:00
Dan Balasescu
d7aca2f641
Add IApplicableHealthProcessor 2023-12-17 19:27:03 +09:00
Dean Herbert
27296c59de
Show back button when spectating
Avoids getting stuck at some screens.
It's a bit ugly having the back button visible like this,
but is the best approach we have for now.
2023-12-15 11:26:17 +09:00
Dean Herbert
76c4931f3a
Merge pull request #25673 from frenzibyte/fix-argon-initial-display
Fix `ArgonHealthDisplay` not displaying miss correctly during initial transition
2023-12-13 22:16:34 +09:00
Dean Herbert
3131d37621
Clear transformations with more fire 2023-12-13 17:00:21 +09:00
Dean Herbert
f2c6c348be
Fix HitError Clear methods not correctly returning pooled drawables 2023-12-13 16:13:23 +09:00
Dean Herbert
110749205d
Cache GameplayClockContainer to allow usage of OnSeek 2023-12-13 16:13:08 +09:00
Dean Herbert
eb30a603d9
Fix typo in argument name 2023-12-13 15:01:36 +09:00
Bartłomiej Dach
f69a5b44cc
Merge branch 'master' into fix-argon-initial-display 2023-12-06 09:30:28 +01:00
Salman Ahmed
20fd458fac Perserve miss animation when followed by a hit at same frame 2023-12-05 21:59:28 +03:00
Salman Ahmed
9496cdf42b Add explanatory note for scheduling 2023-12-05 21:59:28 +03:00
Salman Ahmed
927cfe4257 Fix health processor event leaks 2023-12-05 21:59:28 +03:00
Salman Ahmed
629e64d50a Fix ArgonHealthDisplay not displaying miss correctly during initial transition 2023-12-04 23:55:31 +03:00
Salman Ahmed
4d82a55594 Remove method for being unused 2023-12-04 23:24:28 +03:00
Salman Ahmed
5723715ea0 Fix ArgonHealthDisplay sometimes behaving weirdly on miss judgements 2023-12-04 23:24:28 +03:00
Dean Herbert
a4be28a2ae
Don't show buttons on fail overlay when player interaction is disabled 2023-11-27 12:25:24 +09:00
Bartłomiej Dach
98ab9853ce
Merge branch 'master' into show-spectator-fail-2 2023-11-27 12:24:59 +09:00
Bartłomiej Dach
19639de299
Merge branch 'master' into fix-spectator-quit-2 2023-11-27 11:36:10 +09:00
Dean Herbert
7ceb49fbc0
Add extra test coverage and handle case where still at loading screen 2023-11-24 15:05:39 +09:00
Dean Herbert
d3a55d83c0
Schedule FailScore inside onFail instead of onFailComplete 2023-11-24 14:44:57 +09:00
Dean Herbert
ef5dd24589
Update failing test coverage and fix onFail being called too often 2023-11-24 14:44:57 +09:00
Dean Herbert
4ad3cb3b49
Submit and send failed spectator state more aggressively 2023-11-24 14:44:57 +09:00
Dean Herbert
8375dd72d6
Add xmldoc to new AllowFail method 2023-11-24 14:44:57 +09:00
Dean Herbert
ca93fdc94b
Add visualisation of when a spectated player fails
Create a new stack each time for isolation and safety
2023-11-24 14:44:57 +09:00
Dean Herbert
b024065857
Remove implicit schedule of abstract methods in SpectatorScreen
This allows each implementation to have control over scheduling. Without
this, the solo implementation would not be able to handle quit events
while watching a player, as it would push a child (gameplay) screen to
the stack where the `SpectatorScreen` would usually be.
2023-11-24 14:26:09 +09:00
Dean Herbert
335e8efff7
Apply NRT to SoloSpecatorScreen 2023-11-24 14:26:09 +09:00
Dean Herbert
dabbdf674b
Rename SoloSpectator to SoloSpectatorScreen 2023-11-24 14:26:08 +09:00
Dean Herbert
95c00f9666
Add HexaconIcons lookup to allow usage with SpriteIcon 2023-11-24 13:17:39 +09:00
Dean Herbert
5239fee947
Allow use of skin username/flag/avatar components outside of gameplay 2023-11-23 17:15:03 +09:00
yesseruser
82fec4194d Disabled RecievePositionalInputAtSubTree in PlayerFlag. 2023-11-22 15:45:32 +01:00
yesseruser
08e0279d72 Revert "Renamed UpdateableFlag to ClickableUpdateableFlag."
This reverts commit 671177e871.
2023-11-22 15:25:43 +01:00
yesseruser
be8b59e59d Revert "Created and implemened a BaseUpdateableFlag."
This reverts commit cd7e0bf620.
2023-11-22 15:25:35 +01:00
yesseruser
cd7e0bf620 Created and implemened a BaseUpdateableFlag.
The tooltip still shows.
2023-11-21 19:27:33 +01:00
yesseruser
671177e871 Renamed UpdateableFlag to ClickableUpdateableFlag. 2023-11-21 19:02:23 +01:00
Bartłomiej Dach
b6e3e42445
Merge branch 'master' into bspline-sliders 2023-11-20 12:03:29 +09:00
Dean Herbert
b45872d2e0
Merge branch 'master' into argon-hide-counter-labels 2023-11-16 14:20:13 +09:00
Dean Herbert
73eda6c09c
Move non-matching default value to argon skin default speficiation instead 2023-11-16 14:18:49 +09:00
Dean Herbert
2987c0e802
Add note about enfocing size methodology 2023-11-15 19:01:52 +09:00
Bartłomiej Dach
8cd1f08a92
Fix argon health bar folding in on itself 2023-11-15 15:42:45 +09:00
Joseph Madamba
62352ce5f3 Add ability to toggle labels on argon counter components 2023-11-14 20:46:42 -08:00
Joseph Madamba
87ace7565d Use existing localisation for argon counter component labels 2023-11-14 20:44:33 -08:00
Bartłomiej Dach
159cf41f82
Fix default argon health bar width being zero
Closes #25460.
2023-11-15 12:53:09 +09:00
Bartłomiej Dach
711bf14c06
Merge pull request #25443 from peppy/fix-argon-custom-skins
Fix customised argon skins no longer loading due to incorrect resource store specification
2023-11-14 23:11:39 +09:00
Dean Herbert
a745642f76
Fix customised argon skins no longer loading due to incorrect resource store spec 2023-11-14 22:01:56 +09:00
Bartłomiej Dach
83f8f03c7e
Fix argon health bar not relative sizing correctly 2023-11-14 21:54:06 +09:00
Dean Herbert
798e677c09
Refactor KeyCounterDisplay to use autosize
A previous attempt at this was unsuccessful due to a partially
off-screen elements not getting the correct size early enough (see
https://github.com/ppy/osu/issues/14793). This can be accounted for by
setting `AlwaysPresent` when visibility is expected.

This fixes [test failures](https://github.com/ppy/osu/actions/runs/6838444698/job/18595535795)
due to the newly added `Width` / `Height` being persisted with
floating-point errors (by not persisting the values in the first place,
via `AutoSize.Both`).
2023-11-12 17:19:25 +09:00
Thomas Müller-Höhne
926636cc03 Generalize Bezier curves to BSplines of Nth degree 2023-11-11 13:32:53 +01:00
Bartłomiej Dach
ea556abad8
Merge branch 'skin-size-editing' into gameplay-hud-redesign/counters 2023-11-11 21:28:29 +09:00
Bartłomiej Dach
50789d2e18
Fix song progress bars not sizing vertically properly 2023-11-11 21:28:04 +09:00
Bartłomiej Dach
870e4ce27e
Fix argon health display not handling invalidation correctly 2023-11-11 20:42:45 +09:00
Bartłomiej Dach
b7972e3c84
Merge branch 'skin-size-editing' into gameplay-hud-redesign/counters 2023-11-11 20:16:14 +09:00
Bartłomiej Dach
c522a703eb
Merge branch 'master' into skin-size-editing 2023-11-10 18:19:27 +09:00
Bartłomiej Dach
374e13b496
Remove argon health display bar length setting
It is no longer needed.

Intentionally not doing backwards migration to simplify things; users
can fix their skins.
2023-11-10 18:18:58 +09:00
Dean Herbert
1c63f1f89d
Merge pull request #25348 from bdach/less-basic-touchscreen-detection
Implement basic touchscreen detection
2023-11-10 18:01:40 +09:00
Dean Herbert
a02aeed50a
Adjust combo animation slightly 2023-11-10 16:53:16 +09:00
Dean Herbert
67312a2db9
Remove ArgonScoreWedge and use ArgonWedgePiece directly 2023-11-10 16:53:16 +09:00
Dean Herbert
b4ec62473e
Remove width/height bindables from ArgonWedgePiece 2023-11-10 16:53:15 +09:00
Dean Herbert
4f90ac15fa
Reduce the default wireframe opacity a bit 2023-11-10 15:53:05 +09:00
Dean Herbert
7e0b41219c
Change animation to only affect number portion, add miss animation 2023-11-10 15:53:05 +09:00
Dean Herbert
e861681cd4
Adjust argon rolling easings 2023-11-10 15:53:05 +09:00
Dean Herbert
7c3a626f4b
Add basic animation for combo counter 2023-11-10 15:53:05 +09:00
Dean Herbert
6c1d48dfaf
Remove unused function 2023-11-10 15:53:05 +09:00
Dean Herbert
f31c1c9c79
Rename and move skinnable line component to a more commomn place 2023-11-10 15:53:05 +09:00
Salman Ahmed
d3af3c615f Merge branch 'master' into gameplay-hud-redesign/counters 2023-11-10 01:04:03 +03:00
Salman Ahmed
6f5d905ce7 Update argon accuracy counter design 2023-11-10 01:02:05 +03:00
Susko3
0c4c9aa4b5 Show touch taps setting in player loader on mobile platforms 2023-11-09 14:52:33 +01:00
Bartłomiej Dach
63a0ea5410
Fix PlayerTouchInputDetector applying touch device mod when other inactive mods present 2023-11-09 17:51:01 +09:00
Bartłomiej Dach
13b599b9b6
Merge branch 'master' into less-basic-touchscreen-detection 2023-11-09 17:36:48 +09:00
Salman Ahmed
2ef17c56b1 Remove unused local 2023-11-08 02:13:35 +03:00
Salman Ahmed
18c71c95cc Merge branch 'master' into gameplay-hud-redesign/counters 2023-11-08 02:12:37 +03:00
Salman Ahmed
4de5454538 Bring back left-side line next to health display
Makes the score counter not look weird when it reaches 8 digits
2023-11-08 02:07:15 +03:00
Salman Ahmed
fdc714a248 Support percentages and ignore dot characters in wireframes part 2023-11-08 02:06:14 +03:00
Salman Ahmed
d30bac3f49 Move "required display digits" feature to reside in argon score counter 2023-11-08 02:06:14 +03:00
Salman Ahmed
e6d3085353 Update accuracy counter design 2023-11-08 02:06:14 +03:00
Salman Ahmed
cbea2db4be Support absolute-sized health bar and use it for default layout 2023-11-08 02:06:14 +03:00
Dean Herbert
c00a1d948a
Merge branch 'master' into better-touch-settings 2023-11-07 23:21:59 +09:00
Dean Herbert
3e257f1e6c
Remove unused using statements 2023-11-07 23:21:51 +09:00
Susko3
fcd73e62d2 Remove mobile specific changes
Will be added back in a separate PR
2023-11-07 13:06:14 +01:00
Susko3
7385c3c97b Move InputSettings children creation code to BDL
- Avoids now obsolete variable name
- Makes changing to touch detection easier (access to session statics in BDL)
2023-11-07 00:17:15 +01:00
Susko3
05d9418718 Rename setting to TouchDisableGameplayTaps for better visibility when searching 2023-11-07 00:13:46 +01:00
Salman Ahmed
0dbba13686 Split argon score sprite text and update combo counter design 2023-11-07 01:59:36 +03:00
Salman Ahmed
7c1c62ba8a Remove argon combo wedge and update combo counter position 2023-11-07 01:59:36 +03:00
Salman Ahmed
ce36884ef0 Make score wireframes display up to required digits count 2023-11-07 01:59:36 +03:00
Salman Ahmed
754e05213c Update argon score wedge design 2023-11-07 01:59:36 +03:00
Susko3
f8b5ecc92a Update UI to use the new setting 2023-11-06 21:07:15 +01:00
Bartłomiej Dach
682668ccf0
Remove touch device toasts entirely 2023-11-06 10:54:32 +01:00
Bartłomiej Dach
97fee6143c
Rename touch "input handlers" to detectors 2023-11-06 10:08:19 +01:00
Dean Herbert
0915ac8891
Use left aligned text for non-rotate key counter 2023-11-06 16:32:12 +09:00
Susko3
9947897c5f Use appropriate clicks/taps text in player loader input settings 2023-11-05 12:53:40 +01:00
Susko3
fa1d1df594 Rename mouse button string to Disable clicks during gameplay 2023-11-05 12:43:14 +01:00
Salman Ahmed
1d4f4cf4c3 Merge branch 'master' into gameplay-hud-redesign/counters 2023-11-05 02:02:36 +03:00
Salman Ahmed
6c3169a0ed Remove PP wedge and logic for gameplay layout 2023-11-05 01:56:54 +03:00
Salman Ahmed
a23dfbeab5 Revert "Abstractify PP counter logic from the "Triangles" implementation"
This reverts commit daf4a03fd0.
2023-11-05 01:55:54 +03:00
Salman Ahmed
58a830fc5b Revert "Add "Argon" performance points counter"
This reverts commit 56eeb117ce.
2023-11-05 01:55:54 +03:00
Salman Ahmed
1c844a155e Remove health line detail 2023-11-05 01:55:54 +03:00
Salman Ahmed
91cf237fc1 Revert health display settings changes 2023-11-05 01:55:54 +03:00
Joseph Madamba
16731ff85f
Fix text positioning 2023-11-02 20:42:28 -07:00
Joseph Madamba
b3dfe19472
Fix UprightAspectMaintainingContainer not being centred 2023-11-02 20:42:28 -07:00
Joseph Madamba
090601b485
Apply peppy's upright key counter attempt diff
Co-Authored-By: Dean Herbert <pe@ppy.sh>
2023-11-02 20:42:23 -07:00
Bartłomiej Dach
a78fab0e7d
Do not hardcode ruleset name in touch device detection toast 2023-11-03 00:17:29 +01:00
Bartłomiej Dach
a613292802
Fix unknown mod test failure 2023-11-02 23:44:40 +01:00
Bartłomiej Dach
0dd0a84312
Move player touch handler to SubmittingPlayer
Shouldn't be there in `ReplayPlayer`.
2023-11-02 22:56:43 +01:00
Bartłomiej Dach
3a6d65d395
Touch up PlayerTouchInputHandler 2023-11-02 21:24:58 +01:00
Bartłomiej Dach
f2df02b60f
Automatically activate touch device mod in player 2023-11-02 21:24:58 +01:00
Dean Herbert
7ceced7012
Scope TestPauseWithLargeOffset to focus on what matters
See https://github.com/ppy/osu/actions/runs/6693917410/job/18186111009

This test is to make sure we don't seek before the original
pause time, so I've exposed that value precisely to avoid
CI woes.
2023-10-31 14:47:04 +09:00
Bartłomiej Dach
19d10e5e45
Merge pull request #25300 from peppy/better-submission-logging
Improve log output surrounding score submission
2023-10-30 09:04:06 +01:00
Dean Herbert
caddbacfe8
Merge branch 'master' into gameplay-hud-redesign/counters 2023-10-30 16:35:10 +09:00
Dean Herbert
a91b704d21
Fix some new nullable inspections 2023-10-30 15:10:10 +09:00
Dean Herbert
d90f29a5ff
Improve log output surrounding score submission 2023-10-30 15:07:26 +09:00
Dean Herbert
5a9d4170e8
Merge pull request #24794 from bdach/score-encoding-cleanup
Correctly handle multiple online score ID types
2023-10-28 02:29:56 +09:00
Bartłomiej Dach
35f30d6135
Scale back debug assertion
The import preparation task can actually be non-null when exiting even
if the player hasn't passed:

- fail beatmap
- click import button to import the failed replay
2023-10-27 14:39:58 +02:00
Bartłomiej Dach
dc7f5cd6ed
Add preventive assertions concerning submission flow state 2023-10-27 13:30:51 +02:00
Bartłomiej Dach
2d5b1711f6
Share !HasPassed condition 2023-10-27 13:27:48 +02:00
Bartłomiej Dach
86a8ab6db6
Fix quick retry immediately after completion marking score as failed
Closes https://github.com/ppy/osu/issues/25247.

The scenario involved here is as follows:

1. User completes beatmap by hitting all notes.
2. `checkScoreCompleted()` determines completion, and calls
   `progressToResults(withDelay: true)`.
3. `progressToResults()` schedules `resultsDisplayDelegate`, which
   includes a call to `prepareAndImportScoreAsync()`, a second in the
   future.
4. User presses quick retry hotkey.
   This calls `Player.Restart(quickRestart: true)`,
   which invokes `Player.RestartRequested`,
   which in turn calls `PlayerLoader.restartRequested(true)`,
   which in turn causes `PlayerLoader` to make itself current,
   which means that `Player.OnExiting()` will get called.
5. `Player.OnExiting()` sees that `prepareScoreForDisplayTask` is null
   (because `prepareAndImportScoreAsync()` - which sets it -
   is scheduled to happen in the future), and as such assumes that
   the score did not complete. Thus, it marks the score as failed.
6. `Player.Restart()` after invoking `RestartRequested` calls
   `PerformExit(false)`, which then will unconditionally call
   `prepareAndImportScoreAsync()`. But the score has already been marked
   as failed.

The flow above can be described as "convoluted", but I'm not sure I have
it in me right now to try and refactor it again. Therefore, to fix,
switch the `prepareScoreForDisplayTask` null check in
`Player.OnExiting()` to check `GameplayState.HasPassed` instead, as it
is not susceptible to the same out-of-order read issue.
2023-10-27 12:17:03 +02:00
Dean Herbert
fc25e24397
Merge branch 'master' into score-encoding-cleanup 2023-10-27 18:03:38 +09:00
Bartłomiej Dach
fdb81bfa4c
Rename methods to not mention "source clock" anymore 2023-10-26 19:38:52 +02:00
Bartłomiej Dach
565ae99e0d
Fix StopUsingBeatmapClock() applying adjustments to track it was supposed to stop using
- Closes https://github.com/ppy/osu/issues/25248
- Possibly also closes https://github.com/ppy/osu/issues/20475

Regressed in e33486a766.

`StopUsingBeatmapClock()` intends to, as the name says, stop operating
on the working beatmap clock to yield its usage to other components on
exit. As part of that it tries to unapply audio adjustments so that
other screens can apply theirs freely instead.

However, the aforementioned commit introduced a bug in this. Previously
to it, `track` was an alias for the `SourceClock`, which could be
mutated in an indirect way via `ChangeSource()` calls. The
aforementioned commit made `track` a `readonly` field, initialised in
constructor, which would _never_ change value. In particular, it would
_always_ be the beatmap track, which meant that
`StopUsingBeatmapClock()` would remove the adjustments from the beatmap
track, but then at the end of the method, _apply them onto that same
track again_.

This was only saved by the fact that clock adjustments are removed again
on disposal of the `MasterGameplayClockContainer()`. This - due to async
disposal pressure - could explain infrequently reported cases wherein
the track would just continue to speed up ad infinitum.

To fix, fully substitute the beatmap track for a virtual track at the
point of calling `StopUsingBeatmapClock()`.
2023-10-26 19:38:52 +02:00
Bartłomiej Dach
ca4b09f8ef
Merge branch 'master' into score-encoding-cleanup 2023-10-26 09:04:05 +02:00
Salman Ahmed
07e7d533bf Bake external scale factors into glyph scale 2023-10-26 10:01:27 +03:00
Salman Ahmed
df80b4dcab Update "Argon" health display specifications to match design
Also adds a little white bar next to the display to match with the
components below it (score/accuracy/combo counters).
2023-10-26 09:12:05 +03:00
Salman Ahmed
50af1574cf Add "Argon" background wedges 2023-10-26 09:10:56 +03:00
Salman Ahmed
56eeb117ce Add "Argon" performance points counter 2023-10-26 09:10:10 +03:00
Salman Ahmed
daf4a03fd0 Abstractify PP counter logic from the "Triangles" implementation 2023-10-26 09:09:55 +03:00
Salman Ahmed
0aa0562dc0 Add "Argon" combo counter 2023-10-26 09:09:55 +03:00
Salman Ahmed
1f36acca1a Add "Argon" accuracy counter 2023-10-26 09:09:52 +03:00
Salman Ahmed
9ca672d689 Add "Argon" total score counter 2023-10-26 08:58:25 +03:00
Dean Herbert
e081fa48a2
Fix various other inspections 2023-10-17 17:48:51 +09:00
Bartłomiej Dach
c4af8591a5
Preserve OnlineID when importing scores
Previously, for lazer scores, the ID returned from `osu-web` was
discarded and replaced with -1, due to the fact that the appropriate
structures for unification with stable, as well as unification across
solo and multiplayer, were not in place yet.

Now we're at the point where scores from all the aforementioned sources
receive a `solo_scores` DB row, and as such, we can start treating
`solo_scores`-scheme IDs as canonical "online IDs" for a score.
2023-10-16 11:20:02 +02:00
Dean Herbert
48832c64ac
Fix health bar animating when it shouldn't be
It wasn't correctly checking the current underlying health, which could
be zero in usages of `AccumulatingHealthProcessor`, for instance.

Closes #25046.
2023-10-16 13:12:04 +09:00
Dean Herbert
fa47309eef
Fix exit key during storyboard outro not progressing to results 2023-10-12 19:31:54 +09:00
Dean Herbert
d174a6ce61
Remove dead code which was only there for the exit-specific scenario 2023-10-12 19:27:35 +09:00
Dean Herbert
32eda99c3a
Add missing xmldoc returns 2023-10-12 19:06:34 +09:00
Dean Herbert
242a41371c
Fix HotkeyOverlay fade out occurring when exit is blocked 2023-10-12 15:42:54 +09:00
Dean Herbert
7c0d496730
Show results immediately if user hits "back" key after finishing gameplay
I've gone ahead and matched the osu!stable behaviour for this, as it
seems like it's what people are used to and they will settle for no
less.

Closes https://github.com/ppy/osu/issues/18089.
2023-10-12 15:42:23 +09:00
Dean Herbert
b9dbc8139b
Merge branch 'master' into fix-argon-health-bar-flash 2023-10-11 00:20:08 +09:00
Bartłomiej Dach
d701e88a08
Merge pull request #25076 from peppy/fix-argon-health-bar-perf
Ensure health displays don't pile up transforms when off-screen
2023-10-10 16:33:32 +02:00
Dean Herbert
b9dadc52b7
Adjust comment to match current behaviour
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2023-10-10 22:54:19 +09:00
Dean Herbert
e2e28ef0ca
Remove comment regarding inlined delegate 2023-10-10 22:12:20 +09:00
Dean Herbert
682aa06acf
Remove JudgementResult from Miss/Flash as it is not used 2023-10-10 22:10:44 +09:00
Dean Herbert
f0bd975393
Change GameplayClockContainer.Reset to directly call GameplayClock.Stop
The reasoning is explained in the inline comment, but basically this was
getting blocked by `isPaused` being in an initial `true` state (as it is
on construction), while the source clock was still `IsRunning`.

There's no real guarantee of sync between the source and the `isPaused`
bindable right now. Maybe there should be in the future, but to restore
sanity, let's ensure that a call to `Reset` can at least stop the track
as we expect.
2023-10-10 18:16:14 +09:00
Dean Herbert
eee7dc02da
Reduce severity of clock running check to avoid production crashes 2023-10-10 17:58:11 +09:00
Dean Herbert
4674f63655
Fix Scheduler.AddOnce not working in one location 2023-10-10 16:17:34 +09:00
Dean Herbert
7e68b64526
Avoid running finishInitialAnimation when already finished 2023-10-10 15:59:48 +09:00
Dean Herbert
1eb6c93916
Also debounce updatePathVertices to reduce overhead 2023-10-10 15:50:42 +09:00
Dean Herbert
6c346874d3
Add TODO mentioning that ArgonHealthDisplay is doing lerp wrong 2023-10-10 15:24:54 +09:00
Dean Herbert
57f588fa86
Ensure health displays don't pile up transforms when off-screen 2023-10-10 15:24:54 +09:00
Dean Herbert
6ee958743e
Adjust glow animation specifics slightly 2023-10-10 15:10:42 +09:00
Dean Herbert
aeb579eb54
Syncrhonise initial colour of glowBar for sanity 2023-10-10 15:10:27 +09:00
Dean Herbert
8e26b3c405
Fix argon health bar not completing flash animation correctly 2023-10-10 15:09:33 +09:00
Dean Herbert
e5207167c8
Rename FailAnimation to FailAnimationContainer 2023-10-08 00:39:30 +09:00
Dean Herbert
7c7771afca
Merge pull request #24986 from peppy/health-animates-in-intro
Add initial animation for health bars
2023-10-07 10:31:34 +09:00
Bartłomiej Dach
cfcdbe1c30
Merge pull request #25028 from peppy/bindable-fixes
Fix some incorrect bindable-related code
2023-10-06 22:31:30 +02:00
Bartłomiej Dach
a099cc0f36
Merge pull request #25030 from peppy/adjustable-health-bar
Adjust argon health bar to fit with existing layout
2023-10-06 21:51:18 +02:00
Bartłomiej Dach
b7d0bf3756
Only flush the Current transform specifically 2023-10-06 21:39:29 +02:00
Bartłomiej Dach
ce0d4bd0df
Fix health display potentially desyncing from actual if health was changed during initial animation 2023-10-06 21:35:08 +02:00
Dean Herbert
58448d3dd9
Fix health animation affecting failing tint 2023-10-07 01:06:31 +09:00
Dean Herbert
d87ab9c82d
Adjust transition time based on miss/hit 2023-10-06 19:34:38 +09:00
Dean Herbert
3f2a00d90d
Add argon health display to default skin layout 2023-10-06 19:34:27 +09:00
Dean Herbert
f40e910c51
Remove left line from health display 2023-10-06 19:34:27 +09:00
Dean Herbert
db5178e453
Change ArgonHealthDisplay to be relative sized for now 2023-10-06 18:56:39 +09:00
Dean Herbert
f2e56bbb65
Fix publicly-settable bindables 2023-10-06 16:51:24 +09:00
Bartłomiej Dach
bd71403309
Merge branch 'master' into health-animates-in-intro 2023-10-04 13:53:42 +02:00
Dean Herbert
5a17a86d1d Merge branch 'master' into clock-fix-attempt-2 2023-10-04 16:57:49 +09:00
Bartłomiej Dach
844a3b6c1b
Merge pull request #24980 from frenzibyte/gameplay-hud-redesign/health-display
Implement redesigned health bar display for "Argon" skin
2023-10-03 11:26:21 +02:00
Dean Herbert
4f3c433946 Move vertex related constants local to method 2023-10-03 17:41:52 +09:00
Dean Herbert
32b2ac4974 Rename and refactor glow/miss bars to hopefully make more sense 2023-10-03 17:41:11 +09:00
Dean Herbert
4f9daa1c14 Tidy up ArgonHealthDisplay code quality 2023-10-03 17:32:35 +09:00
Dean Herbert
8178cf3a8d Tidy up background colour gradient logic
This changes things visually a touch, but I think it feels better.
And reads better.
2023-10-03 17:17:11 +09:00
Dean Herbert
82ba545358 Add initial animation for health bars 2023-10-02 17:01:58 +09:00
Dean Herbert
3a45bcad15 Improve flash and glow further 2023-10-02 02:11:07 +09:00
Dean Herbert
c4f47974bc Improve glow further 2023-10-02 02:11:07 +09:00
Dean Herbert
88d608e1fa Tidy up common animation code 2023-10-02 02:11:07 +09:00
Dean Herbert
df51e61234 Improve animation 2023-10-02 00:42:51 +09:00
Dean Herbert
22aa7ffd06 Use additive colour 2023-10-01 22:09:59 +09:00
Salman Ahmed
eef099e69d Do not display "miss" bar if health is already zero 2023-10-01 15:25:34 +03:00
Salman Ahmed
7825bea959 Use interpolation for health bar opacity instead of transforms 2023-10-01 15:25:23 +03:00
Salman Ahmed
30d9004ef9 Fix small mistake 2023-10-01 13:41:11 +03:00
Salman Ahmed
446c9c2efe Apply adjustments on the "miss" bar display 2023-10-01 13:39:36 +03:00
Salman Ahmed
9e2b8254d9 Add argon-specific health display test scene 2023-10-01 13:26:47 +03:00
Salman Ahmed
a331fb993a Adjust health bar outer stroke colour 2023-10-01 01:21:37 +03:00
Salman Ahmed
319208ca3d Adjust health bar glow intensity 2023-10-01 01:18:05 +03:00
Salman Ahmed
776536e816 Add "Argon" health display implementation 2023-10-01 00:56:16 +03:00
Salman Ahmed
33b0cb15a8 Add handling for miss judgements in HealthDisplay 2023-10-01 00:21:25 +03:00
Bartłomiej Dach
8215c4cb0e
Merge branch 'master' into mods-stable-ordering 2023-09-28 18:30:56 +02:00
Dean Herbert
7d74d84e6c Display mod icons using stable ordering
In discussion with nanaya, we likely want this now that we're adding the
ability for some icons to be extended. Historically mod icons have been
displayed in a stable but arbitrary order (based on their position in
the `Mods` enum).

This change aims to make them stable across lazer scores (where they are
stored based on .. the order the user selected them).
2023-09-28 16:48:09 +09:00
Dean Herbert
9f4df29880 Adjust fade durations at player loader to better hide mod jank 2023-09-27 19:29:03 +09:00
Dean Herbert
251a85db43 Fix StopUsingBeatmapClock not transferring time and running state 2023-09-22 16:22:36 +09:00
Dean Herbert
8367bb6bee Don't apply decoupling to SpectatorPlayerClocks
See inline comment for reasoning. It's a bit complicated.
2023-09-22 16:22:35 +09:00
Dean Herbert
bf08fbe196 Set source directly in FramedBeatmapClock ctor
This isn't required, but avoids creating a temporary `StopwatchClock`
and generally just makes debug easier with less state changes.
2023-09-22 16:22:35 +09:00
Dean Herbert
586311d508 Fix souce clock not always being transferred to FramedBeatmapClock in time 2023-09-22 16:22:35 +09:00
Dean Herbert
a1e298930c Remove second hopefully-unnecessary workaround 2023-09-22 14:41:07 +09:00
Dean Herbert
df08c4e1ad Disable decoupling for OsuGameBase's beatmap implementation
This avoids it ever mutating the underlying track (aka attempting to start
it). Resolves the one caveat mentioned in
aeef92fa710648d4a00edc523e13c17ac6104125.
2023-09-22 12:49:25 +09:00
Dean Herbert
117cd74af6 Update usage of DecoupleableInterpolatingFramedClock in FramedBeatmapClock 2023-09-22 12:49:25 +09:00
Dean Herbert
600651795b Change FramedBeatmapClock to always be decoupled 2023-09-22 12:49:25 +09:00
Dean Herbert
bf984388b3 Update clocks in line with framework changes 2023-09-20 21:17:08 +09:00
Dean Herbert
71ac5cfc79 Don't bother binding to friends changes for score display purposes 2023-09-20 14:14:37 +09:00
Dean Herbert
1927b524db
Merge branch 'master' into leaderboard-friend-highlight 2023-09-20 14:14:08 +09:00
Bartłomiej Dach
3bddf4bf9a
Rename spectator-specific settings to more generic (with backwards migration) 2023-09-18 14:56:06 +02:00
Dean Herbert
541cd972e1 Rename ArchiveReader implementations to read better 2023-09-14 13:36:07 +09:00
cdwcgt
68752f95e5
color friend score to pink 2023-09-06 22:58:03 +09:00
Bartłomiej Dach
ed84be2f26
Merge pull request #24566 from peppy/multiplayer-spectator-score-diff
Add score difference display to multiplayer spectator
2023-08-16 12:57:17 +02:00
Bartłomiej Dach
35af15f491
Merge branch 'master' into multi-spectator-fix-startup-delay 2023-08-16 10:34:20 +02:00
Dean Herbert
8b9759c569 Apply nullability to MatchScoreDisplay 2023-08-16 17:26:10 +09:00
Dean Herbert
ab826c35b7 Add score diff display to multiplayer spectator
Basically pulling changes over from the tournament client implementation
2023-08-16 17:26:10 +09:00
Bartłomiej Dach
add1ef77d0
Fix typo in comment 2023-08-16 10:07:12 +02:00
Dean Herbert
bb98f10ff6 Use CurrentTime instead of StartTime for hotfix seek (and update comment) 2023-08-16 16:38:49 +09:00
Dean Herbert
184eabb902 Merge branch 'master' into multi-spectator-fix-startup-delay 2023-08-16 16:27:49 +09:00
Dean Herbert
31c2b7f925 Merge branch 'master' into leaderboard-toggle 2023-08-16 15:49:55 +09:00
Dean Herbert
e8bde6504a Fix score being cloned in async method causing random crashes
Closes https://github.com/ppy/osu/issues/24445.
2023-08-15 16:08:13 +09:00
Bartłomiej Dach
1b3806539a
Merge branch 'master' into leaderboard-toggle 2023-08-10 22:50:55 +02:00
Bartłomiej Dach
500a1363ec
Merge branch 'master' into fix-break-info-decimal-separator 2023-08-08 22:49:00 +02:00
Bartłomiej Dach
52b1073d93
Fix playfield skin layer not rotating correctly with barrel roll mod 2023-08-03 21:08:00 +02:00
Bartłomiej Dach
dde03b7d46
Merge branch 'master' into playfield-skin-layer 2023-08-03 20:42:15 +02:00
Joseph Madamba
aab462fd95
Fix valueText being replaced even if current is not binding to anything 2023-08-02 09:40:22 -07:00
Dean Herbert
87fee001c7 Fix multiplayer spectator potentially taking too long to start
When watching from the middle of gameplay, due to a series of failures,
`SpectatorClock` would not get seeked to the current time, causing all
clients to look like they were out of sync.

This is a hotfix for the issue. A better fix will require framework
changes or considerable restructuring.

I'd recommend testing this works in practice and agreeing that while it
is a hack, it's likely not going to cause issues and is something we
want to see fixed sooner rather than later.
2023-08-02 19:05:43 +09:00
Dean Herbert
a618ed140e Move StoryboardReplacesBackground bindable more local to usage 2023-08-02 15:29:18 +09:00
QuantumSno
054ca5e59c
Merge branch 'master' into leaderboard-toggle 2023-08-01 10:06:03 -04:00
Bartłomiej Dach
e208f38bcb
Merge pull request #24361 from peppy/fix-editor-global-music-hotkey-conflicts
Disallow interacting with the global track state in `Player` and `Editor`
2023-07-30 12:28:53 +02:00
Dean Herbert
945d89e955 Move disables to loading screens for better coverage of edge cases 2023-07-30 13:45:42 +09:00
Joseph Madamba
4ddf05602f Update BreakInfoLine to formatting standards 2023-07-29 11:05:15 -07:00
Joseph Madamba
6ebfafa9c3 Remove unnecessary text comparison 2023-07-29 11:02:04 -07:00
Joseph Madamba
740898dffb Remove unnecessary prefix parameter 2023-07-29 10:40:18 -07:00
Joseph Madamba
9d928c0225 Apply NRT to BreakInfoLine 2023-07-29 10:39:50 -07:00
Joseph Madamba
a3301dc7ff Fix accuracy break info decimal separator being incorrect in certain languages 2023-07-28 23:26:07 -07:00
Bartłomiej Dach
1fd4a6dc96
Fix tests crashing due to HUDOverlay not finding DrawableRuleset in Update() 2023-07-29 01:07:49 +02:00