mirror of
https://github.com/ppy/osu
synced 2025-03-22 19:06:58 +00:00
Update sliders when control points change (#6680)
Update sliders when control points change
This commit is contained in:
commit
1155aacd90
osu.Game.Rulesets.Osu/Edit/Blueprints/Sliders
osu.Game/Rulesets/Edit
@ -50,6 +50,8 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
var snappedDistance = composer?.GetSnappedDistanceFromDistance(HitObject.StartTime, (float)unsnappedPath.Distance) ?? (float)unsnappedPath.Distance;
|
var snappedDistance = composer?.GetSnappedDistanceFromDistance(HitObject.StartTime, (float)unsnappedPath.Distance) ?? (float)unsnappedPath.Distance;
|
||||||
|
|
||||||
HitObject.Path = new SliderPath(unsnappedPath.Type, controlPoints, snappedDistance);
|
HitObject.Path = new SliderPath(unsnappedPath.Type, controlPoints, snappedDistance);
|
||||||
|
|
||||||
|
UpdateHitObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Vector2 SelectionPoint => HeadBlueprint.SelectionPoint;
|
public override Vector2 SelectionPoint => HeadBlueprint.SelectionPoint;
|
||||||
|
@ -148,7 +148,7 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
EditorBeatmap = new EditorBeatmap<TObject>(playableBeatmap);
|
EditorBeatmap = new EditorBeatmap<TObject>(playableBeatmap);
|
||||||
EditorBeatmap.HitObjectAdded += addHitObject;
|
EditorBeatmap.HitObjectAdded += addHitObject;
|
||||||
EditorBeatmap.HitObjectRemoved += removeHitObject;
|
EditorBeatmap.HitObjectRemoved += removeHitObject;
|
||||||
EditorBeatmap.StartTimeChanged += updateHitObject;
|
EditorBeatmap.StartTimeChanged += UpdateHitObject;
|
||||||
|
|
||||||
var dependencies = new DependencyContainer(parent);
|
var dependencies = new DependencyContainer(parent);
|
||||||
dependencies.CacheAs<IEditorBeatmap>(EditorBeatmap);
|
dependencies.CacheAs<IEditorBeatmap>(EditorBeatmap);
|
||||||
@ -225,11 +225,7 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
|
|
||||||
private ScheduledDelegate scheduledUpdate;
|
private ScheduledDelegate scheduledUpdate;
|
||||||
|
|
||||||
private void addHitObject(HitObject hitObject) => updateHitObject(hitObject);
|
public override void UpdateHitObject(HitObject hitObject)
|
||||||
|
|
||||||
private void removeHitObject(HitObject hitObject) => updateHitObject(null);
|
|
||||||
|
|
||||||
private void updateHitObject([CanBeNull] HitObject hitObject)
|
|
||||||
{
|
{
|
||||||
scheduledUpdate?.Cancel();
|
scheduledUpdate?.Cancel();
|
||||||
scheduledUpdate = Schedule(() =>
|
scheduledUpdate = Schedule(() =>
|
||||||
@ -240,6 +236,10 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addHitObject(HitObject hitObject) => UpdateHitObject(hitObject);
|
||||||
|
|
||||||
|
private void removeHitObject(HitObject hitObject) => UpdateHitObject(null);
|
||||||
|
|
||||||
public override IEnumerable<DrawableHitObject> HitObjects => drawableRulesetWrapper.Playfield.AllHitObjects;
|
public override IEnumerable<DrawableHitObject> HitObjects => drawableRulesetWrapper.Playfield.AllHitObjects;
|
||||||
public override bool CursorInPlacementArea => drawableRulesetWrapper.Playfield.ReceivePositionalInputAt(inputManager.CurrentState.Mouse.Position);
|
public override bool CursorInPlacementArea => drawableRulesetWrapper.Playfield.ReceivePositionalInputAt(inputManager.CurrentState.Mouse.Position);
|
||||||
|
|
||||||
@ -351,11 +351,22 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
[CanBeNull]
|
[CanBeNull]
|
||||||
protected virtual DistanceSnapGrid CreateDistanceSnapGrid([NotNull] IEnumerable<HitObject> selectedHitObjects) => null;
|
protected virtual DistanceSnapGrid CreateDistanceSnapGrid([NotNull] IEnumerable<HitObject> selectedHitObjects) => null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates a <see cref="HitObject"/>, invoking <see cref="HitObject.ApplyDefaults"/> and re-processing the beatmap.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="hitObject">The <see cref="HitObject"/> to update.</param>
|
||||||
|
public abstract void UpdateHitObject([CanBeNull] HitObject hitObject);
|
||||||
|
|
||||||
public abstract (Vector2 position, double time) GetSnappedPosition(Vector2 position, double time);
|
public abstract (Vector2 position, double time) GetSnappedPosition(Vector2 position, double time);
|
||||||
|
|
||||||
public abstract float GetBeatSnapDistanceAt(double referenceTime);
|
public abstract float GetBeatSnapDistanceAt(double referenceTime);
|
||||||
|
|
||||||
public abstract float DurationToDistance(double referenceTime, double duration);
|
public abstract float DurationToDistance(double referenceTime, double duration);
|
||||||
|
|
||||||
public abstract double DistanceToDuration(double referenceTime, float distance);
|
public abstract double DistanceToDuration(double referenceTime, float distance);
|
||||||
|
|
||||||
public abstract double GetSnappedDurationFromDistance(double referenceTime, float distance);
|
public abstract double GetSnappedDurationFromDistance(double referenceTime, float distance);
|
||||||
|
|
||||||
public abstract float GetSnappedDistanceFromDistance(double referenceTime, float distance);
|
public abstract float GetSnappedDistanceFromDistance(double referenceTime, float distance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,12 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using osu.Framework;
|
using osu.Framework;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Primitives;
|
using osu.Framework.Graphics.Primitives;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
|
using osu.Game.Rulesets.Objects;
|
||||||
using osu.Game.Rulesets.Objects.Drawables;
|
using osu.Game.Rulesets.Objects.Drawables;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
|
||||||
@ -36,6 +38,9 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
public override bool HandlePositionalInput => ShouldBeAlive;
|
public override bool HandlePositionalInput => ShouldBeAlive;
|
||||||
public override bool RemoveWhenNotAlive => false;
|
public override bool RemoveWhenNotAlive => false;
|
||||||
|
|
||||||
|
[Resolved(CanBeNull = true)]
|
||||||
|
private HitObjectComposer composer { get; set; }
|
||||||
|
|
||||||
protected SelectionBlueprint(DrawableHitObject drawableObject)
|
protected SelectionBlueprint(DrawableHitObject drawableObject)
|
||||||
{
|
{
|
||||||
DrawableObject = drawableObject;
|
DrawableObject = drawableObject;
|
||||||
@ -89,6 +94,11 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
|
|
||||||
public bool IsSelected => State == SelectionState.Selected;
|
public bool IsSelected => State == SelectionState.Selected;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates the <see cref="HitObject"/>, invoking <see cref="HitObject.ApplyDefaults"/> and re-processing the beatmap.
|
||||||
|
/// </summary>
|
||||||
|
protected void UpdateHitObject() => composer?.UpdateHitObject(DrawableObject.HitObject);
|
||||||
|
|
||||||
public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => DrawableObject.ReceivePositionalInputAt(screenSpacePos);
|
public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => DrawableObject.ReceivePositionalInputAt(screenSpacePos);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
Loading…
Reference in New Issue
Block a user