diff --git a/osu.Game/Rulesets/Edit/PlacementBlueprint.cs b/osu.Game/Rulesets/Edit/PlacementBlueprint.cs
index 253d59751d..12c0ea1807 100644
--- a/osu.Game/Rulesets/Edit/PlacementBlueprint.cs
+++ b/osu.Game/Rulesets/Edit/PlacementBlueprint.cs
@@ -9,10 +9,12 @@ using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
+using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
using osu.Game.Audio;
using osu.Game.Beatmaps;
using osu.Game.Beatmaps.ControlPoints;
+using osu.Game.Input.Bindings;
using osu.Game.Rulesets.Objects;
using osu.Game.Screens.Edit;
using osu.Game.Screens.Edit.Compose;
@@ -24,7 +26,7 @@ namespace osu.Game.Rulesets.Edit
///
/// A blueprint which governs the creation of a new to actualisation.
///
- public abstract partial class PlacementBlueprint : CompositeDrawable
+ public abstract partial class PlacementBlueprint : CompositeDrawable, IKeyBindingHandler
{
///
/// Whether the is currently mid-placement, but has not necessarily finished being placed.
@@ -115,6 +117,30 @@ namespace osu.Game.Rulesets.Edit
PlacementActive = PlacementState.Finished;
}
+ public bool OnPressed(KeyBindingPressEvent e)
+ {
+ if (PlacementActive == PlacementState.Waiting)
+ return false;
+
+ switch (e.Action)
+ {
+ case GlobalAction.Select:
+ EndPlacement(true);
+ return true;
+
+ case GlobalAction.Back:
+ EndPlacement(false);
+ return true;
+
+ default:
+ return false;
+ }
+ }
+
+ public void OnReleased(KeyBindingReleaseEvent e)
+ {
+ }
+
///
/// Updates the time and position of this based on the provided snap information.
///