1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-17 03:55:30 +08:00
osu-lazer/osu.Game.Rulesets.Mania/Edit
Bartłomiej Dach 20b1d76269
Ensure selection is preserved when moving selection between columns
Closes https://github.com/ppy/osu/issues/29793.

I believe that the sequence of events that makes this happens is as
follows:

- User selects a range of objects. Some of those objects are off-screen,
  and thus would be presumed to be not alive - except the blueprint
  container forces them to remain alive, because they're part of the
  selection.

- User moves the selection to another column, which is implemented by
  temporarily removing the objects from the playfield, changing their
  column, and re-adding them.

  This sort of pattern is supposed to kick off the
  `HitObjectUsageTransferred` flow in `HitObjectUsageEventBuffer` - and
  it does... for objects that are *currently visible on screen* and thus
  would be alive regardless of `SetKeepAlive()`. However, this does not
  hold for objects that are off-screen - nothing ensures they are kept
  alive again after re-adding, and thus they inadvertently become dead.

- Thus, this doesn't kick off the `BlueprintContainer` flows associated
  with transferring objects to another column, and instead fires the
  removal flows, which ensure that the off-screen objects that were
  being moved are instead deselected.

I tried a few other options but found no better resolution than this -
calling `SetKeepAlive()` directly would require making it public, which
seems like a bad idea. There's really no good way to generically handle
this either, because it is the ruleset that decides that its way of
implementing this operation will be a removal and re-add of objects,
so...
2024-09-17 13:18:18 +02:00
..
Blueprints Allow modifying hold note start/end time via mania composer playfield 2024-06-12 15:30:27 +02:00
Checks Refactor abstract check to reduce duplication 2024-03-26 11:13:03 +01:00
Setup Remove setup screen controls that do nothing useful 2024-07-10 14:53:16 +02:00
DrawableManiaEditorRuleset.cs Match mania editor playfield time range with timeline zoom 2024-07-10 17:36:39 +02:00
HoldNoteCompositionTool.cs Automated pass 2023-06-24 01:00:03 +09:00
ManiaBeatmapVerifier.cs Make check ruleset specific 2024-03-22 14:48:22 -03:00
ManiaBeatSnapGrid.cs Abstract out common implementation of BeatSnapGrid 2023-10-17 16:42:52 +09:00
ManiaBlueprintContainer.cs Manual fixes to reduce warnings to zero 2023-06-24 01:52:53 +09:00
ManiaEditorPlayfield.cs Automated pass 2023-06-24 01:00:03 +09:00
ManiaHitObjectComposer.cs Match mania editor playfield time range with timeline zoom 2024-07-10 17:36:39 +02:00
ManiaSelectionHandler.cs Ensure selection is preserved when moving selection between columns 2024-09-17 13:18:18 +02:00
NoteCompositionTool.cs Automated pass 2023-06-24 01:00:03 +09:00