1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-21 16:33:21 +08:00
Commit Graph

325 Commits

Author SHA1 Message Date
Bartłomiej Dach
2e3daf0a54
Fix leak of ModSettingChangeTracker instances
The `SelectedMods.BindValueChanged()` callback in `ModSelectOverlay` can
in some instances run recursively. This is most heavily leaned on in
scenarios where `SelectedMods` is updated by an external component. In
such cases, the mod select overlay needs to replace the mod instances
received externally with mod instances which it owns, so that the changes
made on the overlay can propagate outwards.

This in particular means that prior to this commit, it was possible to
encounter the following scenario:

	modSettingChangeTracker?.Dispose();
	updateFromExternalSelection(); // mutates SelectedMods to perform the replacement
	                               // therefore causing a recursive call

		modSettingChangeTracker?.Dispose();
		// inner call continues
		modSettingChangeTracker = new ModSettingChangeTracker(SelectedMods.Value);

	// outer call continues
	modSettingChangeTracker = new ModSettingChangeTracker(SelectedMods.Value);

This leaks one `modSettingChangeTracker` instance from the inner call,
which is never disposed.

To avoid this, move the disposal to the same side of the recursion that
the creation happens on, changing the call pattern to:

	updateFromExternalSelection(); // mutates SelectedMods to perform the replacement
	                               // therefore causing a recursive call

		modSettingChangeTracker?.Dispose();
		// inner call continues
		modSettingChangeTracker = new ModSettingChangeTracker(SelectedMods.Value);

	modSettingChangeTracker?.Dispose();
	// outer call continues
	modSettingChangeTracker = new ModSettingChangeTracker(SelectedMods.Value);

which, while slightly wasteful, does not cause any leaks.

The solution is definitely suboptimal, but addressing this properly
would entail a major rewrite of the mod instance management in the mods
overlay, which is probably not the wisest move to make right now.
2023-04-30 17:31:41 +02:00
Cootz
b795e8ac5a Use ModSearch in ModeSelectOverlay 2023-04-27 17:26:35 +03:00
Cootz
3c6141f233 Add ModSearch 2023-04-27 17:08:29 +03:00
Hy0tic
56ab029a58 fix issue where multipler does not update when adjusting speed for preset mod 2023-04-22 13:30:08 -04:00
Dan Balasescu
7bc8908ca9 Partial everything 2022-11-27 00:00:27 +09:00
ansel
b056cac10a Remove generic and add default implementation for CalculateEffect 2022-09-10 08:34:29 +03:00
ansel
545e0bbcef Adjust inheritors and test 2022-08-29 22:49:25 +03:00
ansel
039f009562 Inherit difficulty multiplier display from ModsEffectDiplay 2022-08-27 20:26:05 +03:00
Bartłomiej Dach
3109066e34
Rename {Requires -> Pending}Configuration 2022-08-16 22:45:24 +02:00
Bartłomiej Dach
10daac6752
Only open mod customisation panel on explicit selection of single mod 2022-08-15 20:38:23 +02:00
Bartłomiej Dach
f860bc11ee
Fix several schedule-related issues arising from new column addition 2022-08-15 20:38:16 +02:00
Bartłomiej Dach
5ff2e41a55
Add preset column to mod select test scene 2022-08-15 18:38:37 +02:00
Bartłomiej Dach
839409d7ac
Add preset column to solo mod select overlay 2022-08-07 16:20:31 +02:00
Bartłomiej Dach
b318bbd5e6
Allow non-homogenous column types in mod select overlay 2022-08-07 16:20:31 +02:00
Salman Ahmed
89653b74c7 Only add setting tracker when customisation is permitted 2022-07-19 19:21:16 +03:00
Salman Ahmed
eddae7b143 Fix mod overlay and footer not updating multiplayer on settings change 2022-07-18 07:38:56 +03:00
Dean Herbert
a03abc747b Tidy up comments and simplify bounding box centre logic 2022-07-02 12:58:34 +09:00
Jamie Taylor
9d28d5f8ee
Update SFX for mod overlay show/hide 2022-07-01 20:43:12 +09:00
Dean Herbert
31a447fda0 Update parameter discards 2022-06-24 21:26:19 +09:00
Bartłomiej Dach
73124d2b1f
Encapsulate mod hotkey selection logic in strategy pattern 2022-06-21 12:49:01 +02:00
Dan Balasescu
f8830c6850 Automated #nullable processing 2022-06-17 16:37:17 +09:00
Bartłomiej Dach
071e158a29
Expose available mod state outwardly as a bindable 2022-05-25 23:06:12 +02:00
Bartłomiej Dach
f0303d76e8
Split off "select all mods" button to separate class 2022-05-25 22:18:30 +02:00
Bartłomiej Dach
a4bd399b0c
Split off "deselect all mods" button to separate class 2022-05-25 22:14:45 +02:00
Dean Herbert
062ffe64ac Remove delay on pop in 2022-05-17 18:21:19 +09:00
Bartłomiej Dach
170df01b46
Adjust difficulty multiplier scale transition on mod overlay
The previous transition was supposed to be a center-anchored elastic
scale-in, but this didn't work as intended - because the multiplier
ended up inside of an auto-sized right-aligned container, the animation
itself would end up being anchored right.

Attempts to remove the scale transition resulted in a rather
jarring-looking result, so swap out the elastic scale-in for a sweep-in
effect from the top, to match the header and avoid introducing too many
directions of movement.

Delay values tweaked "to taste" - can be adjusted further if there is an
alternative set of values that feels better.
2022-05-15 20:44:50 +02:00
Dean Herbert
8a01050168 Refactor mod select button initialisation to allow shared usage of deselect button 2022-05-15 03:16:43 +09:00
Dean Herbert
a759cf2dab Add key binding to deselect all mods
Defaults to `Backspace`.
2022-05-15 02:51:58 +09:00
Bartłomiej Dach
981ead68bf
Ensure local mods are constructed in time for Pop{In,Out}() 2022-05-11 22:31:27 +02:00
Bartłomiej Dach
93539160ad
Remove no-longer-necessary guard 2022-05-11 22:31:26 +02:00
Bartłomiej Dach
fc24a56478
Add protection from recursive updates from external selection 2022-05-11 22:31:25 +02:00
Bartłomiej Dach
83ba06e7af
Extract helper property for accessing all mods 2022-05-11 22:31:25 +02:00
Bartłomiej Dach
11ae1da65a
Hoist reference replacement logic to overlay level 2022-05-11 22:26:47 +02:00
Bartłomiej Dach
05a21fbbe0
Hoist ModState to overlay level 2022-05-11 22:26:21 +02:00
Bartłomiej Dach
ddb2d4eef5
Rename FreeModSelect{Screen -> Overlay} reference in inline comment 2022-05-11 18:06:09 +02:00
Bartłomiej Dach
a104277e7f
Rename ModSelect{Screen -> Overlay}Strings 2022-05-11 18:01:33 +02:00
Bartłomiej Dach
76c63f1d0a
Rename ModSelect{Screen -> Overlay} in place of removed old design 2022-05-10 22:56:50 +02:00
Bartłomiej Dach
128468e13d
Remove old base mod select overlay 2022-05-10 21:52:30 +02:00
Dean Herbert
3eead5a6a3 Rename FlushAnimation to FlushPendingSelections to better match purpose 2022-05-04 19:40:08 +09:00
Joseph Madamba
5e5c8e78a6 Use existing web localisation for most hardcoded strings 2022-04-20 16:31:11 -07:00
smoogipoo
f9d5abff8a Update with keybinding changes 2021-09-16 18:26:12 +09:00
Dean Herbert
bf0a1167ec Improve update flow and ensure selected mods is read from local context 2021-08-24 13:35:39 +09:00
Dean Herbert
9b9dacf3fe Update usages of Drawable.Click() 2021-08-04 17:30:33 +09:00
Dean Herbert
3c028ce05c Add IDeepCloneable interface and update existing CreateCopy methods to use it 2021-07-19 12:54:17 +09:00
Dean Herbert
af270cccc4 Fix cross talk between ModSelectOverlays 2021-07-08 17:59:04 +09:00
PercyDan54
e1c646b9b2
Remove redundant arguments 2021-07-05 23:52:39 +08:00
Dean Herbert
5883922177 Remove mod multiplier completely 2021-06-25 16:36:31 +09:00
aitani9
62566f2a4a Remove "Score Multiplier" text 2021-06-24 14:29:47 -07:00
Dean Herbert
abc96057b2 Remove relative height specification and use constant height 2021-05-21 17:55:46 +09:00
Dean Herbert
7fc450c620 Fix mod settings blocking input outside its visible area
Closes #12502.
2021-04-20 23:42:56 +09:00
smoogipoo
ccb83ef3a3 Fix checkbox not being updated 2021-02-22 15:47:47 +09:00
smoogipoo
d3f0c0730d Merge branch 'master' into non-concurrent-sample-playback 2021-02-12 17:22:15 +09:00
Dean Herbert
98c5b0220c
Merge pull request #11725 from smoogipoo/freemods-user-settings
Add local user customisation for freemod mod settings
2021-02-11 16:02:24 +09:00
smoogipoo
822c66033f Add local-user freemod configuration 2021-02-10 19:56:59 +09:00
Dean Herbert
b3b0d97354 Avoid potential feedback from bindable event binds 2021-02-10 15:33:04 +09:00
Dean Herbert
435c85a2e7 Avoid executing selection twice on ModSelectOverlay load 2021-02-10 15:13:09 +09:00
Dean Herbert
75bc9f607e Rename wrongly named method 2021-02-10 14:55:15 +09:00
Dean Herbert
bf239f8bef Flush animation on closing mod overlay 2021-02-04 19:12:37 +09:00
Dean Herbert
f23ca7c7cf Centralise selection animation logic 2021-02-04 18:10:55 +09:00
Dean Herbert
4bfe3aabdc Simplify sound debounce logic 2021-02-04 17:06:11 +09:00
smoogipoo
f25535548a Fix buzzing on select all/deselect all 2021-02-02 21:20:16 +09:00
smoogipoo
643c0605d8 Implement the freemod selection overlay 2021-02-02 21:14:38 +09:00
smoogipoo
8b3a85daa7 Merge branch 'refactor-mod-sections' into freemod-select-overlay 2021-02-02 21:09:51 +09:00
smoogipoo
728f8599b2 Move incompatible mod deselection to SoloModOverlay 2021-02-02 21:06:32 +09:00
smoogipoo
e58ece9e10 Make ModSelectOverlay abstract 2021-02-02 21:06:04 +09:00
smoogipoo
50e92bd0ed Fix selection not being preserved when IsValidMod changes 2021-02-02 20:50:54 +09:00
smoogipoo
10ceddf3ff Make IsValidMod adjustable 2021-02-02 20:47:50 +09:00
smoogipoo
75f81bfa06 Add back mod validation 2021-02-02 20:35:41 +09:00
smoogipoo
6d620264f4 Allow mod buttons to not be stacked 2021-02-02 20:27:41 +09:00
smoogipoo
3741f05ab3 Refactor mod sections and make them overridable 2021-02-02 20:11:40 +09:00
Dean Herbert
bb8113fb51 Fix mod select footer not animating correctly on first reveal 2021-01-25 14:47:47 +09:00
smoogipoo
de9d075f94 Initial sample + samplechannel rework 2021-01-19 17:11:40 +09:00
Dean Herbert
0b165dce4b Fix multiplayer mod select showing autoplay as a choice 2021-01-18 17:50:32 +09:00
Salman Ahmed
375ecf92ed Merge remote-tracking branch 'upstream/master' into fix-mod-buttons-not-copying-settings 2021-01-09 00:26:18 +03:00
Dean Herbert
4d6c13f169 Privatise ModSelectOverlay methods that may be unsafe to be called externally 2021-01-05 16:18:13 +09:00
Salman Ahmed
2ce9599957 Copy selected mods properties into overlay's buttons 2021-01-01 03:47:13 +03:00
Dean Herbert
7253866e17 Move customisation panel to be in same area as main content 2020-12-07 16:42:55 +09:00
Joehu
0f9b38da08 Add fade in/out animations to mod settings container 2020-12-06 11:35:14 -08:00
Dean Herbert
3e326a9234 Use bindable flow for event propagation 2020-10-14 15:22:17 +09:00
Dean Herbert
24eff8c66d Rename container to match "settings" term used everywhere 2020-10-14 15:13:49 +09:00
Leon Gebler
3fd913b13f rename customisation container class 2020-10-13 19:38:25 +02:00
Leon Gebler
663b806974 move ModSettingsContainer to seperate component 2020-10-13 17:45:40 +02:00
Leon Gebler
1a85123b89 rename container class to be more descriptive 2020-10-12 21:24:42 +02:00
Leon Gebler
7df9282727 CodeAnalysis fixes 2020-10-12 15:58:34 +02:00
Leon Gebler
e5548a1216 Move ModSettingsContainer class inside ModSelectOverlay 2020-10-12 00:16:18 +02:00
Joehu
4dacdb9994 Fix mod select overlay absorbing input from toolbar ruleset selector 2020-09-13 11:50:21 -07:00
smoogipoo
d8ebb8e3eb Move override to a bit better location 2020-07-15 13:17:22 +09:00
Joehu
79f6092344 Fix back button not glowing when closing mod select with escape 2020-07-14 13:31:15 -07:00
Dean Herbert
832fa74a5e Reword comment slightly 2020-04-28 13:26:42 +09:00
Joseph Madamba
a34ec03efc
Reword width comment
Co-Authored-By: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2020-04-27 12:44:20 -07:00
Joehu
1b9362041a Revert multiplier number changes and set width
Safe arbitrary width taken from "0.00x" (highest width of 67), rounded to the nearest tenth.
2020-04-26 19:50:11 -07:00
Joehu
8a47a615db Remove unranked label from footer 2020-04-26 19:29:22 -07:00
Joehu
4b60be87b5 Move unranked label under multiplier number to avoid width changes 2020-04-24 16:34:41 -07:00
Joehu
0f6ec274f9 Add transitions to footer when flowing to another row 2020-04-23 22:44:17 -07:00
Joehu
118db03b56 Fix vertical spacing and score multiplier splitting apart
Also cleans up margin and its hacks (alignment done with anchor/origin now).
2020-04-23 22:41:38 -07:00
Joehu
abb687286b Fix score multiplier being cut off in mod select at higher ui scales 2020-04-23 22:34:00 -07:00
Dean Herbert
ed837d3115 Use framework extension method for FromHex 2020-03-11 10:18:41 +09:00
Dan Balasescu
3600b0daf0
Merge branch 'master' into fix-mod-select-overflowing 2020-02-04 11:57:54 +09:00
Joehu
22e3150f68 Fix comment and remove magic numbers 2020-02-03 17:21:06 -08:00
Joehu
609ee26030 Fix mod select overlay not showing up in test 2020-02-01 11:41:41 -08:00
Joehu
2d42a83bb9 Fix mod select overlay overflowing toolbar at max ui scale 2020-02-01 11:24:29 -08:00
Dean Herbert
7bf2e9b369 Decouple ModSelectOverlay from global SelectedMods 2020-01-30 17:38:15 +09:00
ProTheory8
61d7b63914
Readability Improvement 2020-01-21 09:30:11 +05:00
ProTheory8
41295bc27c Difficulty Adjust mod customisation menu opens automatically now 2020-01-20 21:06:36 +05:00
Dean Herbert
8052aeb238 Fix potential nullref in disposal logic 2019-12-13 21:36:50 +09:00
Dean Herbert
440a8470e1 Move available mods to global context
This also tidies up ModSelectOverlay and setting creation flow in general.
2019-12-13 21:36:50 +09:00
Dean Herbert
5624b9fd3f Fix US english 2019-12-11 13:19:13 +09:00
Dean Herbert
a37af311d0 Simplify settings update logic 2019-12-11 13:19:02 +09:00
Dean Herbert
46d055604a Customize -> Customise 2019-12-06 18:59:45 +09:00
Dean Herbert
a5d5099868 Use SettingsSource for mod cusomisation 2019-12-06 17:09:48 +09:00
Dean Herbert
af35df4077 Add multiple mod testing and update test code style 2019-12-06 15:42:11 +09:00
unknown
a92b32f6dc add basic tests 2019-11-05 00:56:09 +08:00
LeNitrous
9375ef5eea clear settings controls when changing rulesets 2019-10-08 19:42:15 +08:00
LeNitrous
59b2f02828 initial implementation of customizable mods 2019-10-08 18:34:09 +08:00
andy840119
3a14794c43 use show/hide instead because FillFlowContainer's spacing 2019-06-14 01:43:20 +09:00
Dean Herbert
609a82bc94 Update VisibilityContainer usage in line with framework 2019-06-11 15:13:58 +09:00
Dean Herbert
8f30c9b0a3 Fix file layout of ModSelectOverlay 2019-06-07 15:58:24 +09:00
Dean Herbert
7ffc08b187
Merge branch 'master' into master 2019-06-07 15:34:14 +09:00
Dean Herbert
b914bb1e2e Remove key hints for now
A proper design for this will come in the future.
2019-06-07 15:32:48 +09:00
Dean Herbert
0ce5c7468f Use switch and consume/block input 2019-06-07 15:31:23 +09:00
Welsar55
c04c6693c2 Change close action from PopOut to Hide and switched to TriangleButton.Click() 2019-06-05 13:01:21 -05:00
Welsar55
194bb80354 Added close button and indictors of hotkeys to buttons 2019-06-03 11:09:21 -05:00
Dean Herbert
4ca34bd5e8 Update osu! in line with audio subsystem refactor 2019-05-28 17:06:01 +09:00
smoogipoo
0222424aef Make mods IReadOnlyList<Mod> gamewide
Prevents potential multiple evaluations of enumerable.
2019-04-10 17:20:36 +09:00
smoogipoo
4310f07a5c Rename SelectedMods -> Mods 2019-04-10 12:03:57 +09:00
Dean Herbert
b7126b3efb Fix mod select overlay dimming itself 2019-03-02 14:48:05 +09:00
Dean Herbert
26d53d06a9 Fix remaining issues 2019-02-28 13:31:40 +09:00
Dean Herbert
3015d40f8f
Merge branch 'master' into osu-fontusage 2019-02-22 18:09:23 +09:00
smoogipoo
d8c55bc729 Adjust namespaces 2019-02-21 19:05:52 +09:00
smoogipoo
bca347427f Update with framework bindable changes 2019-02-21 18:56:34 +09:00
smoogipoo
4db5531e4b Replace copy-constructor/method with extension method 2019-02-20 19:32:30 +09:00
smoogipoo
a2aa3ec5cb Adjust sprite texts in-line with framework changes 2019-02-20 15:03:20 +09:00
Dean Herbert
a25dce53cd
Fix logical regression 2019-01-25 15:03:32 +09:00
Dean Herbert
787d4da153 Combine constant 2019-01-25 14:10:59 +09:00
Dean Herbert
8617aaa2a7 Update licence header (and remove year) 2019-01-24 17:43:03 +09:00
Unknown
6eff79913b remove blank lines 2019-01-11 10:34:56 +01:00
smoogipoo
f27bd3ef3e OpenTK -> osuTK 2018-11-20 17:14:59 +09:00
smoogipoo
a8f156584b Update framework with positional/non-positional changes 2018-09-26 14:01:15 +09:00
Dean Herbert
03084aa04b Revert async changes 2018-08-31 07:07:10 +09:00
smoogipoo
e7a5816d27 Use GetAsync for all samples 2018-08-27 17:30:16 +09:00
smoogipoo
aa3f6337a2 Add comment 2018-08-15 09:14:07 +09:00
smoogipoo
f69bc23ab8 Overflow mod select to account for parallax 2018-08-14 17:26:25 +09:00
Dean Herbert
4cb7063801 Add automated testing of mod preservation/removal 2018-08-07 16:45:18 +09:00
Dean Herbert
7b8bd7f21c Fix mod selection not restoring when re-entering song select 2018-08-07 14:49:44 +09:00
Dean Herbert
3c06655672 Split out Special mods into Automation and Conversion 2018-07-31 18:00:42 +09:00
Dean Herbert
e28a610757 Fix mods not correctly resetting when changing ruleset at song select 2018-07-05 13:22:52 +09:00
smoogipoo
b61fe10f62 Adapt to IBindables 2018-07-02 15:07:18 +09:00
Dean Herbert
4bcc05a7fc Remove null checks on ruleset
Add a default ruleset to `OsuTestCase` to cover testing scenarios.
2018-06-26 18:24:34 +09:00
Dean Herbert
b0a1b25983 Privatise game ruleset and access via DI
Also decouples the bindable at SongSelect, where it is debounced in line with the carousel being updated.
2018-06-26 16:32:32 +09:00
Dean Herbert
0f6c623ebb Tidy up some unnecessary lines 2018-05-31 12:44:59 +09:00