mirror of
https://github.com/ppy/osu
synced 2025-02-16 01:56:58 +00:00
Only draw path visualiser when hovered or single slider is selected
This commit is contained in:
parent
7916b99153
commit
097d310d74
@ -59,6 +59,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
|
|
||||||
private readonly BindableList<PathControlPoint> controlPoints = new BindableList<PathControlPoint>();
|
private readonly BindableList<PathControlPoint> controlPoints = new BindableList<PathControlPoint>();
|
||||||
private readonly IBindable<int> pathVersion = new Bindable<int>();
|
private readonly IBindable<int> pathVersion = new Bindable<int>();
|
||||||
|
private BindableList<HitObject> selectedObjects;
|
||||||
|
|
||||||
public SliderSelectionBlueprint(Slider slider)
|
public SliderSelectionBlueprint(Slider slider)
|
||||||
: base(slider)
|
: base(slider)
|
||||||
@ -86,6 +87,9 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
pathVersion.BindValueChanged(_ => editorBeatmap?.Update(HitObject));
|
pathVersion.BindValueChanged(_ => editorBeatmap?.Update(HitObject));
|
||||||
|
|
||||||
BodyPiece.UpdateFrom(HitObject);
|
BodyPiece.UpdateFrom(HitObject);
|
||||||
|
|
||||||
|
selectedObjects = editorBeatmap.SelectedHitObjects.GetBoundCopy();
|
||||||
|
selectedObjects.BindCollectionChanged((_, _) => updateVisualDefinition());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool HandleQuickDeletion()
|
public override bool HandleQuickDeletion()
|
||||||
@ -108,14 +112,21 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
BodyPiece.UpdateFrom(HitObject);
|
BodyPiece.UpdateFrom(HitObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool OnHover(HoverEvent e)
|
||||||
|
{
|
||||||
|
updateVisualDefinition();
|
||||||
|
return base.OnHover(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnHoverLost(HoverLostEvent e)
|
||||||
|
{
|
||||||
|
updateVisualDefinition();
|
||||||
|
base.OnHoverLost(e);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnSelected()
|
protected override void OnSelected()
|
||||||
{
|
{
|
||||||
AddInternal(ControlPointVisualiser = new PathControlPointVisualiser(HitObject, true)
|
updateVisualDefinition();
|
||||||
{
|
|
||||||
RemoveControlPointsRequested = removeControlPoints,
|
|
||||||
SplitControlPointsRequested = splitControlPoints
|
|
||||||
});
|
|
||||||
|
|
||||||
base.OnSelected();
|
base.OnSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,13 +134,33 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
{
|
{
|
||||||
base.OnDeselected();
|
base.OnDeselected();
|
||||||
|
|
||||||
// throw away frame buffers on deselection.
|
updateVisualDefinition();
|
||||||
ControlPointVisualiser?.Expire();
|
|
||||||
ControlPointVisualiser = null;
|
|
||||||
|
|
||||||
BodyPiece.RecyclePath();
|
BodyPiece.RecyclePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateVisualDefinition()
|
||||||
|
{
|
||||||
|
bool hasSingleObjectSelected = editorBeatmap.SelectedHitObjects.Count == 1;
|
||||||
|
|
||||||
|
// To reduce overhead of drawing these blueprints, only add extra detail when hovered or when only this slider is selected.
|
||||||
|
if (IsSelected && (hasSingleObjectSelected || IsHovered))
|
||||||
|
{
|
||||||
|
if (ControlPointVisualiser == null)
|
||||||
|
{
|
||||||
|
AddInternal(ControlPointVisualiser = new PathControlPointVisualiser(HitObject, true)
|
||||||
|
{
|
||||||
|
RemoveControlPointsRequested = removeControlPoints,
|
||||||
|
SplitControlPointsRequested = splitControlPoints
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ControlPointVisualiser?.Expire();
|
||||||
|
ControlPointVisualiser = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Vector2 rightClickPosition;
|
private Vector2 rightClickPosition;
|
||||||
|
|
||||||
protected override bool OnMouseDown(MouseDownEvent e)
|
protected override bool OnMouseDown(MouseDownEvent e)
|
||||||
|
Loading…
Reference in New Issue
Block a user