From 08e3fe1def87187fe297fbfbf29441ce5500618e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 17 Oct 2018 14:37:39 +0900 Subject: [PATCH] Add PlacementStarted event, rename placement methods --- .../Edit/Masks/HitCirclePlacementMask.cs | 3 ++- osu.Game/Rulesets/Edit/PlacementMask.cs | 27 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Edit/Masks/HitCirclePlacementMask.cs b/osu.Game.Rulesets.Osu/Edit/Masks/HitCirclePlacementMask.cs index 0b248e20fe..08e417cf1a 100644 --- a/osu.Game.Rulesets.Osu/Edit/Masks/HitCirclePlacementMask.cs +++ b/osu.Game.Rulesets.Osu/Edit/Masks/HitCirclePlacementMask.cs @@ -33,7 +33,8 @@ namespace osu.Game.Rulesets.Osu.Edit.Masks { HitObject.StartTime = EditorClock.CurrentTime; HitObject.Position = e.MousePosition; - Finish(); + + EndPlacement(); return true; } diff --git a/osu.Game/Rulesets/Edit/PlacementMask.cs b/osu.Game/Rulesets/Edit/PlacementMask.cs index fd1b670274..109244c34f 100644 --- a/osu.Game/Rulesets/Edit/PlacementMask.cs +++ b/osu.Game/Rulesets/Edit/PlacementMask.cs @@ -15,6 +15,11 @@ namespace osu.Game.Rulesets.Edit { public class PlacementMask : CompositeDrawable, IRequireHighFrequencyMousePosition { + /// + /// Invoked when the placement of has started. + /// + public event Action PlacementStarted; + /// /// Invoked when the placement of has finished. /// @@ -40,10 +45,27 @@ namespace osu.Game.Rulesets.Edit HitObject.ApplyDefaults(workingBeatmap.Value.Beatmap.ControlPointInfo, workingBeatmap.Value.Beatmap.BeatmapInfo.BaseDifficulty); } + private bool placementBegun; + /// - /// Finishes the placement of . + /// Signals that the placement of has started. /// - public void Finish() => PlacementFinished?.Invoke(HitObject); + protected void BeginPlacement() + { + PlacementStarted?.Invoke(HitObject); + placementBegun = true; + } + + /// + /// Signals that the placement of has finished. + /// This will destroy this , and add the to the . + /// + protected void EndPlacement() + { + if (!placementBegun) + BeginPlacement(); + PlacementFinished?.Invoke(HitObject); + } public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => Parent?.ReceivePositionalInputAt(screenSpacePos) ?? false; @@ -64,6 +86,7 @@ namespace osu.Game.Rulesets.Edit { base.Dispose(isDisposing); + PlacementStarted = null; PlacementFinished = null; } }