Bartłomiej Dach
7e5533e205
Fix not being able to receive full score for extremely short sliders with repeats
...
Closes #23862 .
Score V2 is a scoring algorithm, which aside from the raw numerical
values of each judgement, incorporates a combo component, wherein each
judgement's "combo score" is derived from both the raw numerical value
of the object and the current combo after the given judgement. In
particular, this means that Score V2 is sensitive to the _order_ of
judging objects, as if two objects with the same start time are judged
using different ordering, they can end up having a different "combo
score".
The issue that this change is fixing is an instance of one such
reordering. Upon inspection, it turned out that the simulated autoplay
run, which is used to determine max possible score so that it can be
standardised to 1 million again, was processing a slider repeat before a
slider tail circle, while actual gameplay was processing the same slider
repeat _after_ the slider tail circle.
The cause of that behaviour is unfortunately due to `LegacyLastTick`.
The sliders which cause the issue are extremely short. Stable had a
behaviour, in which to provide leniency, slider tails were artificially
offset back by 36ms. However, if the slider is not long enough to make
this possible, the last tick is placed in the middle of the slider. If
that slider also happens to have exactly 1 repeat, then this means that
the last tick and the repeat have the same time instant.
Because of the time equality, what begins to matter now is the _order_
of processing the elements of the drawable slider in the hierarchy. For
the purposes of legacy skins, tail circles were moved below ticks in
fce3eacd7d
- but in this particular case,
it means that the order of processing the slider elements is now
inadvertently inverted, causing the entire debacle.
While the fact that scoring depends on order of processing of visuals is
suboptimal, there isn't a great way to address this without significant
restructuring. Due to the structure of processing judgements currently
in place, in which each judgement is processed independently from others
by its corresponding drawable hit object, this is probably the best that
can be done for the time being at least.
2023-06-10 12:14:08 +02:00
Salman Ahmed
62cb6a98ca
Remove redundant nullable suppression directives
2023-06-07 08:20:41 +03:00
Bartłomiej Dach
a45f0b65a1
Merge pull request #23372 from peppy/fix-slider-end-circle-appear-delay
...
Fix fade in delay for first slider end circle being incorrect when snaking disabled
2023-05-03 19:06:39 +02:00
Dean Herbert
a619812cab
Fix nullability and remove extra preempt from SliderEndCircle
calculation
2023-05-02 16:36:43 +09:00
Dean Herbert
1a04be15c7
Fix fade in delay for first slider end circle being incorrect when snaking disabled
2023-05-02 16:27:17 +09:00
OliBomby
d97daee96b
remove all non-test usage of SampleControlPoint
2023-04-26 13:55:39 +02:00
Bartłomiej Dach
6b9472c367
Merge branch 'master' into skin-per-ruleset-layouts
2023-02-17 22:58:38 +01:00
Dean Herbert
675e5b81f3
Fix SkinnableLighting
showing up as a user placeable component
2023-02-17 18:24:05 +09:00
Dean Herbert
da8ab7143b
Merge branch 'master' into maximum-judgement-offset-in-hit-object
2023-02-15 14:48:15 +09:00
Dean Herbert
74ab036f3e
Refactor SkinnableSound.Samples
to be non-nullable
2023-01-27 19:32:30 +09:00
ekrctb
11e1b22bf5
Move MaximumJudgementOffset to HitObject
...
We want to access this property for computing lifetime
2023-01-19 21:23:55 +09:00
Dan Balasescu
7bc8908ca9
Partial everything
2022-11-27 00:00:27 +09:00
Dean Herbert
1aa0e40f2f
Add "Component" prefix to lookup naming
2022-11-09 17:46:43 +09:00
Dean Herbert
c908969d9b
Rename ISkinComponent
to ISkinLookup
2022-11-09 17:46:43 +09:00
Dean Herbert
ab458320c4
Fix some lingering inspections
2022-11-09 17:46:24 +09:00
Dean Herbert
710c224de4
Remove unused IHasMainCirclePiece
interface
2022-11-09 13:31:50 +09:00
Dean Herbert
8c9250285f
Revert incorrect removal default value (causing a new warning)
2022-10-29 18:09:27 +09:00
Dean Herbert
19e0b9085c
Remove redundant parameters
2022-10-29 00:24:33 +09:00
Dean Herbert
674ae9e742
Refactor DrawableSliderHead
to never update the drawable position
...
Slider heads are guaranteed to always be drawn at (0,0). This fixes
weird behaviour in the editor, but also simplifies things in the
process. Win-win.
Closes #20644 .
2022-10-26 15:26:22 +09:00
Salman Ahmed
7d31eaea54
Move ball tinting logic to overwrite SliderBall
colour
2022-10-20 03:55:53 +03:00
Dean Herbert
299131c985
Merge pull request #20816 from frenzibyte/adjust-slider-fade-parameters
...
Adjust slider fade out transition to match stable
2022-10-19 12:04:24 +09:00
Salman Ahmed
13e2323791
Adjust fade out duration to match stable
2022-10-18 23:48:51 +03:00
Salman Ahmed
03edfce822
Remove fade easing from sliders
2022-10-18 23:43:42 +03:00
Salman Ahmed
d46bc7f72a
Adjust fade out time to match stable
2022-10-18 23:43:31 +03:00
Dean Herbert
33620b7bd6
Fix slider ball facing incorrect direction during rewinding in editor
...
Closes https://github.com/ppy/osu/issues/20648 .
2022-10-10 15:24:18 +09:00
Dan Balasescu
b6db36dcca
Merge pull request #20580 from peppy/approach-circle-fade-out
...
Hide approach circles immediate on successful hit
2022-10-05 19:17:57 +09:00
Dean Herbert
52002d91dd
Only apply dim at top level objects
2022-10-05 17:48:56 +09:00
Dean Herbert
56d424003d
Fix sliders not dimming correctly due to modified miss window
2022-10-05 14:25:04 +09:00
Dean Herbert
44b99444a7
Hide approach circles immediate on successful hit
2022-10-05 13:42:04 +09:00
Dean Herbert
c2956c6e1e
Add osu! hit object dim
...
Stable would dim objects when they can't be hit (ie. the "miss" window
is not active yet). This was never implemented in lazer, and causes
quite large visual differences.
No one has mentioned this yet, but it will definitely be one of those
missing pieces which makes lazer feel different to stable.
2022-10-04 17:28:17 +09:00
sw1tchbl4d3
0cffbb7562
Clamp LifetimeStart
of HitObject
's to their judgement windows
2022-09-27 16:54:24 +02:00
Dean Herbert
749053481a
Update osu! hitobject implementation to avoid triggering ClearInternal
2022-09-22 15:04:20 +09:00
Dean Herbert
b844d76311
Move Shake
logic local to hitcircle/slider
2022-09-22 15:04:20 +09:00
Dean Herbert
2bdc6417e9
Mark DrawableOsuHitObject
abstract
for clarity
2022-09-22 14:44:03 +09:00
Dean Herbert
289e6ad977
Fix follow point animations in legacy skins not always starting at correct point in time
2022-09-16 15:12:05 +09:00
Dean Herbert
105aa01e7d
Update usages of RemoveInternal
2022-08-29 15:57:40 +09:00
Dean Herbert
a215d009fe
Update Remove
/RemoveRange
/RemoveAll
calls in line with framework changes
2022-08-29 15:57:40 +09:00
Dean Herbert
9a4d0494de
Adjust various pooling defaults to better handle more intense beatmaps
2022-08-05 18:09:07 +09:00
goodtrailer
e6a05ce3e2
Slow down legacy followcircle animations
2022-07-03 13:51:30 -07:00
goodtrailer
0e0e9968ac
Split ball and followcircle into default/legacy files
2022-06-29 01:23:35 -07:00
Dan Balasescu
f8830c6850
Automated #nullable processing
2022-06-17 16:37:17 +09:00
Salman Ahmed
4158146c71
Fix spinenr tick samples not positioned at centre
...
Causing samples to be played at left ear rather than centre.
2022-06-07 00:30:11 +03:00
Salman Ahmed
0eaf420fa1
Specify full size for spinner ticks container
2022-06-07 00:29:14 +03:00
Salman Ahmed
3a00931e38
Update slider sliding samples balance calculation to use screen-space as well
2022-04-18 09:18:56 +03:00
Salman Ahmed
fcb48c69cf
Calculate sample playback position using screen-space drawable rectangles
2022-04-18 07:57:31 +03:00
Dean Herbert
879267862c
Fix typo in DrawableOsuHitObject
2022-04-08 15:20:22 +09:00
Dean Herbert
6d6f73e016
Add overrides in DrawableSliderTail
to explain/warn that this class never plays its own samples
2022-03-14 17:19:48 +09:00
Dean Herbert
be99202188
Move spinner spin samples to auxiliary specification
2022-03-14 17:19:48 +09:00
Dean Herbert
90e34d7686
Move slider slide samples to auxiliary specification
2022-03-14 17:19:48 +09:00
Susko3
19467e58c1
Remove unused params from BDL methods
2022-01-15 01:06:39 +01:00
Dean Herbert
6944151486
Apply batch fixing of built-in types using var
2021-10-27 13:04:41 +09:00
Bartłomiej Dach
c911332540
Merge branch 'master' into correct-reverse-arrow-depth
2021-09-20 22:32:28 +02:00
Bartłomiej Dach
79438c19a4
Fix slider parts not reproxying after first hitobject freed
2021-09-18 16:27:30 +02:00
Dean Herbert
fde7c88999
Merge branch 'master' into update-framework
2021-09-16 22:49:02 +09:00
smoogipoo
d8f27633a4
Fix legacy approach circles accepting alpha
2021-09-16 19:35:15 +09:00
smoogipoo
f9d5abff8a
Update with keybinding changes
2021-09-16 18:26:12 +09:00
Dean Herbert
b907c2f4f6
Fix osu! judgements getting scaled twice over different durations
2021-09-02 16:31:43 +09:00
Dean Herbert
738ce0f689
Fix repeat arrows being hidden beneath head circles in legacy skins
...
Aims to make minimal changes to `DrawableSlider` itself. I'm not super
happy about the slider ball being moved above the head circle, but it
*is* what people are used to so no one except for me is going to
complain.
Supersedes and closes https://github.com/ppy/osu/pull/14561 .
2021-09-01 19:41:49 +09:00
Dan Balasescu
f0296e5d12
Merge branch 'master' into avoid-default-skin-judgement-transform-overhead
2021-08-27 10:02:40 +09:00
Salman Ahmed
b9ea984c36
Remove redundant default value
2021-08-26 08:18:58 +03:00
Dean Herbert
8cfb3d456b
Avoid expensive text spacing transforms for now
2021-08-26 13:15:27 +09:00
Dean Herbert
69064c1938
Avoid unnecessary unbind operations when constructing FollowPointLifetimeEntry
2021-08-26 12:35:31 +09:00
Salman Ahmed
68e28f4903
Implement IHasApproachCircle
in DrawableHitCircle
as well
2021-06-21 07:35:07 +03:00
Salman Ahmed
c04b09520d
Replace spinner approach circle proxying logic with hooking up to OnSkinChange
in mod
2021-06-19 20:06:28 +03:00
Salman Ahmed
843c8bd7a4
Move spinner approach circle to its own SkinnableDrawable
2021-06-18 20:33:50 +03:00
Salman Ahmed
f7b5341663
Merge branch 'master' into legacy-spinner-approach-circle
2021-06-18 19:50:52 +03:00
Salman Ahmed
c9458fd9ce
Hide spinner approach circle in "Hidden" mod
2021-06-18 06:23:54 +03:00
Dean Herbert
a46f730a69
Fix approach circle fade not running early on an early user hit
...
Regressed in https://github.com/ppy/osu/pull/12153 .
Closes https://github.com/ppy/osu/issues/13531 .
2021-06-17 15:09:05 +09:00
Dean Herbert
6017ef3825
Merge branch 'master' into fix-skin-sample-lookup
2021-06-08 17:37:36 +09:00
Dean Herbert
277eb9fa6e
Fix slider repeat arrow not updating rotation immediately while paused in editor
...
A bit of a local solution, but not sure there's a better way to handle
this.
Closes #13342 .
2021-06-07 15:58:43 +09:00
Dean Herbert
d26c9a66c2
Merge branch 'legacy-skin-default-fallback' into fix-skin-sample-lookup
2021-06-07 12:01:19 +09:00
ekrctb
d7da66d876
Bring back scheduling of follow point update
2021-06-04 18:41:02 +09:00
ekrctb
0098ac2760
Remove one TODO
...
It can be removed because pooled drawables are always ready, and `FollowPointConnection` is also ready when applied.
2021-06-04 17:09:59 +09:00
ekrctb
bc892086fe
Resolve nullable inspection, enable nullable for FollowPointLifetimeEntry
2021-06-04 17:09:59 +09:00
ekrctb
b373b120ff
Use general lifetime container for follow point container
2021-06-04 16:31:50 +09:00
ekrctb
c06ff3c623
Remove defunct Animate
calls
2021-06-02 11:46:28 +09:00
ekrctb
b82190e157
Fix hit circle animation reset when skin is changed
...
The transforms applied in `Animate` call was not applied because the piece is recreated.
2021-06-02 11:32:24 +09:00
Dean Herbert
6268bbea85
Merge branch 'master' into fix-skin-sample-lookup
2021-05-28 14:47:35 +09:00
Dean Herbert
70a844ac10
Remove allowFallback
parameters completely
2021-05-27 14:50:42 +09:00
Endrik Tombak
9ac4ef273e
Make DrawableSliderTail not require ITrackSnaking
2021-05-26 23:21:05 +03:00
smoogipoo
3db995c778
Fix sliders jumping around the screen on movement
2021-05-24 17:15:57 +09:00
Dean Herbert
8336428574
Add regression test for spinner sample actually transforming its frequency
2021-05-24 15:10:33 +09:00
Dean Herbert
1410b8f36d
Fix follow points displaying at incorrect locations when dragging a slider out-of-bounds
2021-05-05 18:30:57 +09:00
Dean Herbert
d10aac851d
Extract scale constant
2021-04-26 15:30:22 +09:00
Dean Herbert
4da964c3f3
Expose DrawableSliderRepeat
's arrow and move transforms to children
2021-04-26 15:22:42 +09:00
Dean Herbert
aa7ade8186
Expose presence of MainCirclePiece
via an interface
2021-04-26 15:22:17 +09:00
Salman Ahmed
0b9172a1dc
Animate back slider repeat and tail circle pieces
2021-04-26 02:39:49 +03:00
Dean Herbert
47a4a07024
Split out animation triggering of MainCirclePiece
to be interface driven
2021-04-21 19:15:10 +09:00
Dean Herbert
ac0ed72d04
Keep hitcircles aligned with view in "Barrel Roll" mod
2021-04-20 18:36:11 +09:00
Dean Herbert
e2470d757e
Merge branch 'master' into legacy-spm-counter
2021-04-12 12:52:52 +09:00
smoogipoo
f2e811928b
Rework slider hackery to not overwrite Samples
2021-04-09 15:28:08 +09:00
smoogipoo
8efa381d3a
Actually use whistle sample for sliderwhistle
2021-04-08 23:13:16 +09:00
smoogipoo
7713c8a45f
Add support for sliderwhistle
2021-04-08 20:20:09 +09:00
smoogipoo
9c3d15171c
Reword xmldoc slightly
2021-04-02 18:00:28 +09:00
Amber
5ac36a2462
Switch AlwaysPlaySample to SamplePlaysOnlyOnHit in DrawableSliderTail for conformity
2021-04-02 03:56:23 -05:00
Amber
5063cd957f
Force hit sample to play when Classic mod is enabled
2021-04-02 02:54:35 -05:00
Dean Herbert
9504fe3f3c
Inline add of spm calculation (no need for it to be a separate call)
2021-03-30 13:43:05 +09:00
Salman Ahmed
0bf84e473d
Refactor spinner SPM counter for skinning purposes
2021-03-30 04:19:23 +03:00
Dean Herbert
c715b9b89e
Merge branch 'master' into legacy-spinner-bonus
2021-03-25 18:09:25 +09:00
Dean Herbert
64e85ba995
Always fade out approach circles at a HitObject's start time to better match stable
2021-03-23 19:19:07 +09:00