Handle control point positional updates within SliderPath

This commit is contained in:
smoogipoo
2019-12-06 18:49:01 +09:00
parent 2b5f9515de
commit 16f8341a02
3 changed files with 22 additions and 8 deletions

View File

@ -16,6 +16,12 @@ namespace osu.Game.Rulesets.Objects
{
public class SliderPath
{
/// <summary>
/// Invoked when the offset of the path changes.
/// The provided value indicates the offset, and should be used to re-calculate the position of the containing drawable.
/// </summary>
public event Action<Vector2> OffsetChanged;
/// <summary>
/// The current version of this <see cref="SliderPath"/>. Updated when any change to the path occurs.
/// </summary>
@ -62,6 +68,20 @@ namespace osu.Game.Rulesets.Objects
foreach (var c in items)
c.Changed -= invalidate;
// Make all control points relative to the first one
if (ControlPoints.Count > 0)
{
Vector2 first = ControlPoints[0].Position.Value;
if (first != Vector2.Zero)
{
foreach (var c in ControlPoints)
c.Position.Value -= first;
OffsetChanged?.Invoke(first);
}
}
invalidate();
};
}