// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. #nullable disable using osu.Framework.Bindables; using osu.Framework.Graphics.Lines; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Osu.Objects; using osuTK; namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components { /// /// A visualisation of the lines between s. /// /// The type of which this visualises. public partial class PathControlPointConnection : SmoothPath where T : OsuHitObject, IHasPath { private readonly T hitObject; private IBindable hitObjectPosition; private IBindable pathVersion; private IBindable stackHeight; public PathControlPointConnection(T hitObject) { this.hitObject = hitObject; PathRadius = 1; } protected override void LoadComplete() { base.LoadComplete(); hitObjectPosition = hitObject.PositionBindable.GetBoundCopy(); hitObjectPosition.BindValueChanged(_ => Scheduler.AddOnce(updateConnectingPath)); pathVersion = hitObject.Path.Version.GetBoundCopy(); pathVersion.BindValueChanged(_ => Scheduler.AddOnce(updateConnectingPath)); stackHeight = hitObject.StackHeightBindable.GetBoundCopy(); stackHeight.BindValueChanged(_ => updateConnectingPath()); updateConnectingPath(); } /// /// Updates the path connecting this control point to the next one. /// private void updateConnectingPath() { Position = hitObject.StackedPosition; ClearVertices(); foreach (var controlPoint in hitObject.Path.ControlPoints) AddVertex(controlPoint.Position); OriginPosition = PositionInBoundingBox(Vector2.Zero); } } }