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

186 Commits

Author SHA1 Message Date
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
Daniel Power
d4731e0830 Fix scale of skin element bounding box 2023-12-21 08:56:39 -03:30
Bartłomiej Dach
f239d03d75
Forcibly change ruleset to correct one before entering gameplay from main menu
Closes #25663 (again).

As it turns out, in some scenarios it can be the case that the current
game-global `Beatmap` is not valid for the current game-global
`Ruleset`. The validity of one and the other in conjunction is only
really validated by the song select screen; elsewhere there is no
guarantee that the global beatmap is playable using the global ruleset.

However, this only comes up in very specific circumstances, namely one:
when trying to autoplay a catch beatmap with osu! ruleset globally
active via the skin editor flow.

`Player` is responsible for retrieving the beatmap to be played. It does
so by invoking the appropriate beatmap converter and asking it if the
beatmap can be converted:

	6d64538d7a/osu.Game/Beatmaps/WorkingBeatmap.cs (L262-L266)

If the code above throws, `Player` actually silently covers for this, by
trying the beatmap's default ruleset instead:

	6d64538d7a/osu.Game/Screens/Play/Player.cs (L529-L536)

However, for the pairing of osu! ruleset and catch beatmap, this fails,
as `OsuBeatmapConverter`'s condition necessary for permitting conversion
is that the objects have a defined position:

	6d64538d7a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapConverter.cs (L25)

which they will do, due to the fact that all catch beatmaps are really
just osu! beatmaps but with conversion steps applied, and thus `Player`
succeeds to load the catch beatmap in osu! ruleset.

In the skin editor scenario, this would lead to the secondary failure
of the skin editor trying to apply `CatchModAutoplay` on top of all
of that, which would fail at the hard-cast of the beatmap
to `CatchBeatmap`.
2023-12-06 10:35:41 +01:00
Dean Herbert
ca991f1f54
Move flags local to EndlessPlayer 2023-12-06 17:18:35 +09:00
Dean Herbert
c5a08a0711
Remove unused using statement 2023-12-04 23:06:08 +09:00
Bartłomiej Dach
5512298d60
Trim unused resolved bindable 2023-12-04 15:01:23 +01:00
Bartłomiej Dach
8754fa40f4
Source autoplay mod from beatmap about to be presented rather than ambient global 2023-12-04 14:42:51 +01:00
Bartłomiej Dach
063694f544
Do not attempt to load gameplay scene if current beatmap is dummy 2023-12-04 14:42:51 +01:00
Bartłomiej Dach
9d39b70e38
Fix endless player not handling load failure 2023-12-04 14:42:51 +01:00
Bartłomiej Dach
055fb5bd8f
Do not set initial activity in skin editor endless player
Seems like an overreach to say that the user is "watching a replay"
there.
2023-12-04 14:42:51 +01:00
Bartłomiej Dach
7e3bb5f8db
Make skin editor overlay dependency nullable to fix tests 2023-11-27 12:09:13 +09:00
Bartłomiej Dach
3f48f4acdf
Remove blank line 2023-11-27 12:06:08 +09:00
Dean Herbert
7153c823e8
Choose a better beatmap if the intro is still playing
Also skip intro time.
2023-11-24 17:47:20 +09:00
Dean Herbert
95229cb336
Show gameplay when loading the skin editor from the main menu 2023-11-24 17:47:20 +09:00
Dean Herbert
9a6857bfad
Merge pull request #25530 from yesseruser/FlagHUD
Fix skin element "PlayerFlag" responding to clicks/hovers
2023-11-23 16:51:09 +09:00
Dean Herbert
191e8c5487
Add note about skin editor reload jank 2023-11-23 16:39:05 +09:00
Bartłomiej Dach
abbcdaa7f7
Fix skin editor crashing when pasting with nothing in clipboard 2023-11-23 09:55:27 +09:00
Dean Herbert
aa749aeb73
Save any unsaved changes in the skin editor when game changes screens
Closes https://github.com/ppy/osu/issues/25494.
2023-11-21 17:49:57 +09:00
Dean Herbert
405ab499e9
Allow context menus to have visible spacers 2023-11-21 14:24:10 +09:00
Bartłomiej Dach
ccfdf1ffd6
Merge pull request #25402 from peppy/skin-size-editing
Add support for adjusting size of skin elements
2023-11-12 07:31:51 +09:00
Dean Herbert
b0aa4a4257
Add "export" item to skin editor menu 2023-11-11 20:34:35 +09:00
Bartłomiej Dach
8d7539ab70
Merge branch 'master' into skin-size-editing 2023-11-11 19:56:09 +09:00
Bartłomiej Dach
2428a97d44
Fix editor not clearing undo history on skin change 2023-11-11 18:49:44 +09:00
Dean Herbert
35e11c7c63
Rename diagonal scale variable and update xmldoc 2023-11-10 17:55:02 +09:00
Dean Herbert
f25489cc7b
Check X/Y sizing available separately to fix weird edge cases 2023-11-10 17:54:43 +09:00
Dean Herbert
175dae49c6
Reset scale per axis 2023-11-10 14:43:51 +09:00
Dean Herbert
fb361a4e0a
Reset size along with scale for relative items 2023-11-10 14:25:55 +09:00
Dean Herbert
ec3b6e47fb
Change selection handling to adjust Size instead of Scale for edge nodes 2023-11-10 14:22:28 +09:00
Dean Herbert
1f0b914251
Add skin editor dropdown items to reset rotation and scale 2023-11-06 16:18:33 +09:00
Dean Herbert
5341a335a6
Bypass Parent nullability checks for now 2023-10-17 17:48:45 +09:00
Bartłomiej Dach
a200d043be
Merge pull request #24698 from Wleter/skin-editor-closest-anchor
Fix closest anchor for rotated/flipped selections in skin editor
2023-09-04 10:29:05 +02:00
Wleter
fc4069f794 let SelectionBox perform flip with scale handles 2023-09-01 13:01:51 +02:00
Wleter
47160f7744 make getClosestAnchor work with rotated drawable 2023-08-31 20:24:26 +02:00
Wleter
f277909470 maintain rotated selection's centre position 2023-08-30 09:16:16 +02:00
Wleter
ce1bc71567 formatting 2023-08-29 18:41:56 +02:00
Wleter
586ce6e8d3 fix multiple selected 2023-08-29 17:47:42 +02:00
Wleter
d56ab0fe9a change names 2023-08-29 17:25:52 +02:00
Wleter
3c575516ab add correct scaling for 90 degrees rotation 2023-08-29 17:06:23 +02:00
Wleter
07e126241d working negative scaling 2023-08-28 16:41:55 +02:00
Wleter
9f4f81c150 accumulating negative scaling 2023-08-21 19:36:11 +02:00
Wleter
d2798c7a1c don't allow negative scaling 2023-08-20 17:55:19 +02:00
Bartłomiej Dach
dde03b7d46
Merge branch 'master' into playfield-skin-layer 2023-08-03 20:42:15 +02:00
Bartłomiej Dach
d65f08a048
Merge pull request #24427 from peppy/fix-skin-editor-crash-multi-spectator
Fix game crashing when entering skin editor in multiplayer spectator
2023-08-01 18:25:11 +02:00
Dean Herbert
72005bef7c Fix skin editor crashing if the same component is provided twice 2023-07-31 15:10:58 +09:00
Bartłomiej Dach
262f25dce8
Make SelectionRotationHandler a Component 2023-07-30 20:18:33 +02:00
Dean Herbert
5bd06832d0 Fix skin component toolbox not working correctly for ruleset matching
Until now, the only usage of ruleset layers was where there is both a
ruleset specific and non-ruleset-specific layer present. The matching
code was making assumptions about this.

As I tried to add a new playfield layer which breaks this assumption,
non-ruleset-specifc components were not being displayed in the toolbox.
This turned out to be due to a `target` of `null` being provided due to
the weird `getTarget` matching (that happened to *just* do what we
wanted previously due to the equals implementation, but only because
there was a container without the ruleset present in the available
targets).

I've changed this to be a more appropriate lookup method, where the
target for dependency sourcing is provided separately from the ruleset
filter.
2023-07-28 15:50:44 +09:00
Bartłomiej Dach
f8047d6ab6
Migrate skin element rotation handling to SelectionRotationHandler 2023-07-23 20:56:22 +02:00
Bartłomiej Dach
4622255cc7
Move out helper methods to static class 2023-07-23 18:24:20 +02:00
Dean Herbert
cf3949c9e2 Fix double-click handling when cyclic selection is enabled
Removes the limitations of cyclic selection as a result.
2023-07-19 17:21:20 +09:00
Bartłomiej Dach
aea5eb37dc
Remove unused using directive 2023-06-22 20:24:44 +02:00
Dean Herbert
cb0f642ad7 Change skin editor flow to always save on toggle
This also moves the beatmap skin disable toggle to on toggle, in line
with review feedback.

I've decided to always apply the disable, not just on the `Player`
screen. It should be assumed that if a user is in the skin editor they
are never going to need access to this anyway.
2023-06-21 16:14:47 +09:00
Dean Herbert
366dd96875 Use bindable lease instead of reimplementing the same thing locally 2023-06-21 16:09:54 +09:00
Dean Herbert
d7b486e2ac Disable beatmap skinning when entering the skin editor 2023-06-20 19:18:17 +09:00
Dean Herbert
adf9a596b5 Fix weird state when attempting to enter gameplay skin editor scene from multiplayer
Closes https://github.com/ppy/osu/issues/23626.
2023-05-23 17:58:44 +09:00
Bartłomiej Dach
1d4d31e35c
Trim comments
Leaving only the ones that add anything useful and do not restate the
code verbatim.
2023-05-03 19:22:52 +02:00
Bartłomiej Dach
27fabd99fb
Rename variables for legibility
Having `typedComponents` and `typeComponents` next to each other is
asking for trouble.
2023-05-03 19:21:16 +02:00
Terochi
4d52ce769b Revert SaveState() calling on initialization 2023-05-01 12:53:58 +02:00
Terochi
fb4b681cc5 Use Queue instead of Stack 2023-04-30 16:36:01 +02:00
Terochi
8f02bd80f9 Addressed changes 2023-04-30 16:11:52 +02:00
Terochi
949dc1c0f9 Improved logic 2023-04-30 12:05:55 +02:00
Terochi
8ec2154965 Fixed ApplyStateChange to happen in correct order 2023-04-30 02:01:18 +02:00
Terochi
17e4b75dfd Save first state when editing 2023-04-29 20:54:19 +02:00
Terochi
3b0ba4b38b Improved logic for ApplyStateChange for skin editor 2023-04-29 19:52:22 +02:00
Dean Herbert
6546f5968a Merge branch 'master' into skin-editor-cyclic-selection 2023-03-14 20:43:56 +09:00
Bartłomiej Dach
5213bfa5c9
Merge branch 'master' into make_skin_reset_dangerous 2023-03-07 21:06:44 +01:00
Dean Herbert
97bee4db89 Fix localisations 2023-03-07 18:07:53 +09:00
Dean Herbert
26ef7c2637 Rename confirmation dialog class to mention revert not reset 2023-03-07 18:07:46 +09:00
Dean Herbert
21bdbb20e6 Add optional support for cyclic selection to BlueprintContainer 2023-03-07 14:22:12 +09:00
mk56-spn
908651cc11 make ResetConfirmDialog properly utilise its parent's logic
Adjust name of `DeleteAction` to `DangerousAction`
2023-03-05 20:57:26 +01:00
Bartłomiej Dach
60cdd3c070
Clear components sidebar unconditionally on every target change
Fixes the working layer dropdown lingering after exiting from a
skinnable screen to a non-skinnable one.
2023-03-04 14:10:05 +01:00
Bartłomiej Dach
d233f3a3ab
Show non-skinnable screen placeholder at higher level 2023-03-04 13:49:10 +01:00
Bartłomiej Dach
49e298e304
Accept ISerialisableDrawableContainer directly in SkinBlueprintContainer
An end result of #22674 is that `SkinBlueprintContainer`s are only ever
created by supplying a `SkinComponentsContainer` to them. However,
`SkinBlueprintContainer` still contained remnants of code that suggested
it was designed to handle cases where more than the drawable supplied to
it contained more than one `ISerialisableDrawableContainer`, or even
zero.

The zero path is totally dead right now (because every
`SkinComponentsContainer` is *by necessity* an
`ISerialisableDrawableContainer`), and the more-than-one path is dead
*for now* (and potentially forever?). Therefore, just hard-couple
`SkinBlueprintContainer` to receive a single target container.
2023-03-04 13:33:21 +01:00
Bartłomiej Dach
2f25fb4083
Move NonSkinnableScreenPlaceholder to outer scope 2023-03-04 13:22:43 +01:00
Bartłomiej Dach
15409b9c15
Fix skin selection not clearing on exit to non-skinnable screen 2023-03-04 13:18:34 +01:00
mk56-spn
2b7111867c Adjust reversion header text naming. 2023-03-03 15:12:20 +01:00
mk56-spn
90227a6496 Rename DeleteConfirmationDialog.cs into DangerousActionDialog.cs 2023-02-27 21:57:59 +01:00
mk56-spn
00a00ead22 Make ResetConfirmDialog inherit from DeleteConfirmationDialog 2023-02-27 21:50:27 +01:00
mk56-spn
1239de6f41 Upper case web using alias 2023-02-27 21:34:07 +01:00
mk56-spn
bf1897a98f Adjust warning text slightly. 2023-02-27 16:08:14 +01:00
mk56-spn
ff0d1aa9f7 Make reverting changes to a given skin into a "dangerous action" 2023-02-26 20:38:50 +01:00
Dean Herbert
dc3c1150b8 Set better defaults for SkinBlueprint transforms 2023-02-23 21:10:15 +09:00
Dean Herbert
c48aceb055 Fix undo history not being batched correctly for depth change operations 2023-02-23 20:03:36 +09:00
Dean Herbert
16c8a392a1 Add ability to send selected skin components to front or back 2023-02-22 18:17:20 +09:00
Bartłomiej Dach
051eb18b33
Merge branch 'master' into skin-editor-layer-select 2023-02-21 21:38:51 +01:00
Bartłomiej Dach
ec1bf7b0b2
Merge branch 'master' into skin-editor-clipboard 2023-02-21 19:35:58 +01:00
Dean Herbert
af062e7a68 Change placeComponent to only add to selection, not clear an existing selection 2023-02-21 14:11:18 +09:00
Dean Herbert
0d229d959b Remove unnecessary TriggerChange call 2023-02-21 13:50:19 +09:00
Bartłomiej Dach
6799492596
Merge branch 'master' into skin-editor-layer-select 2023-02-20 21:33:48 +01:00
Dean Herbert
43d33d45ca Only add valid placed components to selected collection on paste 2023-02-20 20:02:43 +09:00
Dean Herbert
b68562b033 Make placeComponent resilient to missing dependencies 2023-02-20 20:00:12 +09:00
Dean Herbert
a9c7edd087 Remove copy pasted comment 2023-02-20 19:57:16 +09:00
Bartłomiej Dach
1ba1298850
Merge branch 'master' into blueprint-improve-visuals 2023-02-19 15:55:30 +01:00
Dean Herbert
d7381b762c Also tween origin position 2023-02-19 23:52:21 +09:00
Bartłomiej Dach
ea04c487f2
Merge branch 'master' into blueprint-labels-while-hovering 2023-02-18 15:57:30 +01:00
Bartłomiej Dach
fbea3e312f
Merge branch 'master' into skin-editor-improve-toolbox-hover 2023-02-18 10:02:02 +01:00
Bartłomiej Dach
2aa4481f68
Fix toolbox items spontaneously contracting after briefly losing hover
Reproduction scenario:

1. Hover a toolbox item
2. Unhover the item, but do not hover any other item (can be done by
   exiting the toolbox completely to the right)
3. Come back to the item hovered in step (1)
4. The item would spontaneously contract after a second
2023-02-17 22:54:11 +01:00
Bartłomiej Dach
b390fdb8cc
Remove unused field 2023-02-17 21:51:19 +01:00
Dean Herbert
0a018514e1 Make skin editor focus only one layer at a time 2023-02-17 19:27:16 +09:00
Dean Herbert
00fcee0c5a Add per-ruleset component toolbox and placement support 2023-02-17 19:27:16 +09:00
Dean Herbert
ba5a87ca04 Add basic target layer selection in skin editor 2023-02-17 19:27:16 +09:00