mirror of
https://github.com/ppy/osu.git
synced 2024-09-22 00:47:24 +08:00
Simplify slider path bindings
Adds a slight performance overhead, but solves the memory leak and makes the code much easier to follow.
This commit is contained in:
parent
d1d56c636a
commit
d6490899e2
@ -50,7 +50,6 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
[Resolved]
|
[Resolved]
|
||||||
private OsuColour colours { get; set; }
|
private OsuColour colours { get; set; }
|
||||||
|
|
||||||
private IBindable<int> sliderVersion;
|
|
||||||
private IBindable<Vector2> sliderPosition;
|
private IBindable<Vector2> sliderPosition;
|
||||||
private IBindable<float> sliderScale;
|
private IBindable<float> sliderScale;
|
||||||
private IBindable<Vector2> controlPointPosition;
|
private IBindable<Vector2> controlPointPosition;
|
||||||
@ -59,20 +58,11 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
{
|
{
|
||||||
this.slider = slider;
|
this.slider = slider;
|
||||||
ControlPoint = controlPoint;
|
ControlPoint = controlPoint;
|
||||||
var pathTypes = new List<IBindable<PathType?>>();
|
|
||||||
|
|
||||||
slider.Path.ControlPoints.BindCollectionChanged((_, args) =>
|
slider.Path.Version.BindValueChanged(_ =>
|
||||||
{
|
{
|
||||||
pathTypes.Clear();
|
PointsInSegment = slider.Path.PointsInSegment(ControlPoint);
|
||||||
|
updatePathType();
|
||||||
foreach (var point in slider.Path.ControlPoints)
|
|
||||||
{
|
|
||||||
IBindable<PathType?> boundTypeCopy = point.Type.GetBoundCopy();
|
|
||||||
pathTypes.Add(boundTypeCopy);
|
|
||||||
boundTypeCopy.BindValueChanged(_ => PointsInSegment = slider.Path.PointsInSegment(controlPoint));
|
|
||||||
}
|
|
||||||
|
|
||||||
PointsInSegment = slider.Path.PointsInSegment(controlPoint);
|
|
||||||
}, runOnceImmediately: true);
|
}, runOnceImmediately: true);
|
||||||
|
|
||||||
controlPoint.Type.BindValueChanged(_ => updateMarkerDisplay());
|
controlPoint.Type.BindValueChanged(_ => updateMarkerDisplay());
|
||||||
@ -120,9 +110,6 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
sliderVersion = slider.Path.Version.GetBoundCopy();
|
|
||||||
sliderVersion.BindValueChanged(_ => updatePathType());
|
|
||||||
|
|
||||||
sliderPosition = slider.PositionBindable.GetBoundCopy();
|
sliderPosition = slider.PositionBindable.GetBoundCopy();
|
||||||
sliderPosition.BindValueChanged(_ => updateMarkerDisplay());
|
sliderPosition.BindValueChanged(_ => updateMarkerDisplay());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user