diff --git a/osu.Game/Rulesets/Edit/EditRulesetContainer.cs b/osu.Game/Rulesets/Edit/EditRulesetContainer.cs index 98783b366e..41f17337de 100644 --- a/osu.Game/Rulesets/Edit/EditRulesetContainer.cs +++ b/osu.Game/Rulesets/Edit/EditRulesetContainer.cs @@ -5,6 +5,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Beatmaps; using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Edit @@ -20,7 +21,7 @@ namespace osu.Game.Rulesets.Edit RelativeSizeAxes = Axes.Both; } - public abstract void AddHitObject(HitObject hitObject); + public abstract DrawableHitObject AddHitObject(HitObject hitObject); } public abstract class EditRulesetContainer : EditRulesetContainer @@ -40,7 +41,7 @@ namespace osu.Game.Rulesets.Edit InternalChild = rulesetContainer = CreateRulesetContainer(ruleset, workingBeatmap); } - public override void AddHitObject(HitObject hitObject) + public override DrawableHitObject AddHitObject(HitObject hitObject) { var tObject = (TObject)hitObject; @@ -54,8 +55,12 @@ namespace osu.Game.Rulesets.Edit tObject.ApplyDefaults(beatmap.ControlPointInfo, beatmap.BeatmapInfo.BaseDifficulty); processor.PostProcess(); - rulesetContainer.Playfield.Add(rulesetContainer.GetVisualRepresentation(tObject)); + var drawableObject = rulesetContainer.GetVisualRepresentation(tObject); + + rulesetContainer.Playfield.Add(drawableObject); rulesetContainer.Playfield.PostProcess(); + + return drawableObject; } /// diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 5f84006a1e..5bb3299038 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -31,6 +31,7 @@ namespace osu.Game.Rulesets.Edit private readonly List layerContainers = new List(); private readonly IBindable beatmap = new Bindable(); + private HitObjectMaskLayer maskLayer; private Container placementContainer; private EditRulesetContainer rulesetContainer; @@ -66,7 +67,7 @@ namespace osu.Game.Rulesets.Edit var layerAboveRuleset = CreateLayerContainer(); layerAboveRuleset.Children = new Drawable[] { - new HitObjectMaskLayer(), + maskLayer = new HitObjectMaskLayer(), placementContainer = new Container { RelativeSizeAxes = Axes.Both } }; @@ -157,7 +158,9 @@ namespace osu.Game.Rulesets.Edit var mask = tool.CreatePlacementMask(); mask.PlacementFinished += h => { - rulesetContainer.AddHitObject(h); + var drawableObject = rulesetContainer.AddHitObject(h); + + maskLayer.AddMask(drawableObject); // Re-construct the mask setCompositionTool(tool); diff --git a/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs b/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs index 65f31dd56d..7a1ad32140 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs @@ -48,7 +48,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose.Layers }; foreach (var obj in composer.HitObjects) - addMask(obj); + AddMask(obj); } protected override bool OnMouseDown(MouseDownEvent e) @@ -61,7 +61,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose.Layers /// Adds a mask for a which adds movement support. /// /// The to create a mask for. - private void addMask(DrawableHitObject hitObject) + public void AddMask(DrawableHitObject hitObject) { var mask = composer.CreateMaskFor(hitObject); if (mask == null)