mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 04:52:57 +08:00
Implement spinner placement
This commit is contained in:
parent
e04ad8357d
commit
aec1d95f04
20
osu.Game.Rulesets.Osu.Tests/TestCaseSpinnerPlacementMask.cs
Normal file
20
osu.Game.Rulesets.Osu.Tests/TestCaseSpinnerPlacementMask.cs
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using osu.Game.Rulesets.Edit;
|
||||
using osu.Game.Rulesets.Objects;
|
||||
using osu.Game.Rulesets.Objects.Drawables;
|
||||
using osu.Game.Rulesets.Osu.Edit.Masks.SpinnerMasks;
|
||||
using osu.Game.Rulesets.Osu.Objects;
|
||||
using osu.Game.Rulesets.Osu.Objects.Drawables;
|
||||
using osu.Game.Tests.Visual;
|
||||
|
||||
namespace osu.Game.Rulesets.Osu.Tests
|
||||
{
|
||||
public class TestCaseSpinnerPlacementMask : HitObjectPlacementMaskTestCase
|
||||
{
|
||||
protected override DrawableHitObject CreateHitObject(HitObject hitObject) => new DrawableSpinner((Spinner)hitObject);
|
||||
|
||||
protected override PlacementMask CreateMask() => new SpinnerPlacementMask();
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Input.Events;
|
||||
using osu.Game.Rulesets.Edit;
|
||||
using osu.Game.Rulesets.Osu.Edit.Masks.SpinnerMasks.Components;
|
||||
using osu.Game.Rulesets.Osu.Objects;
|
||||
|
||||
namespace osu.Game.Rulesets.Osu.Edit.Masks.SpinnerMasks
|
||||
{
|
||||
public class SpinnerPlacementMask : PlacementMask
|
||||
{
|
||||
public new Spinner HitObject => (Spinner)base.HitObject;
|
||||
|
||||
private readonly SpinnerPiece piece;
|
||||
|
||||
private bool isPlacingEnd;
|
||||
|
||||
public SpinnerPlacementMask()
|
||||
: base(new Spinner())
|
||||
{
|
||||
InternalChild = piece = new SpinnerPiece(HitObject) { Alpha = 0.5f };
|
||||
}
|
||||
|
||||
protected override void LoadComplete()
|
||||
{
|
||||
base.LoadComplete();
|
||||
|
||||
// Fixes a 1-frame position discrpancy due to the first mouse move event happening in the next frame
|
||||
HitObject.Position = GetContainingInputManager().CurrentState.Mouse.Position;
|
||||
}
|
||||
|
||||
protected override bool OnClick(ClickEvent e)
|
||||
{
|
||||
if (isPlacingEnd)
|
||||
{
|
||||
HitObject.EndTime = EditorClock.CurrentTime;
|
||||
EndPlacement();
|
||||
}
|
||||
else
|
||||
{
|
||||
HitObject.StartTime = EditorClock.CurrentTime;
|
||||
|
||||
isPlacingEnd = true;
|
||||
piece.FadeTo(1f, 150, Easing.OutQuint);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool OnMouseMove(MouseMoveEvent e)
|
||||
{
|
||||
if (!isPlacingEnd)
|
||||
HitObject.Position = e.MousePosition;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
@ -28,9 +28,10 @@ namespace osu.Game.Rulesets.Osu.Edit
|
||||
protected override RulesetContainer<OsuHitObject> CreateRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap)
|
||||
=> new OsuEditRulesetContainer(ruleset, beatmap);
|
||||
|
||||
protected override IReadOnlyList<HitObjectCompositionTool> CompositionTools => new[]
|
||||
protected override IReadOnlyList<HitObjectCompositionTool> CompositionTools => new HitObjectCompositionTool[]
|
||||
{
|
||||
new HitCircleCompositionTool(),
|
||||
new SpinnerCompositionTool()
|
||||
};
|
||||
|
||||
protected override Container CreateLayerContainer() => new PlayfieldAdjustmentContainer { RelativeSizeAxes = Axes.Both };
|
||||
|
20
osu.Game.Rulesets.Osu/Edit/SpinnerCompositionTool.cs
Normal file
20
osu.Game.Rulesets.Osu/Edit/SpinnerCompositionTool.cs
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||
|
||||
using osu.Game.Rulesets.Edit;
|
||||
using osu.Game.Rulesets.Edit.Tools;
|
||||
using osu.Game.Rulesets.Osu.Edit.Masks.SpinnerMasks;
|
||||
using osu.Game.Rulesets.Osu.Objects;
|
||||
|
||||
namespace osu.Game.Rulesets.Osu.Edit
|
||||
{
|
||||
public class SpinnerCompositionTool : HitObjectCompositionTool
|
||||
{
|
||||
public SpinnerCompositionTool()
|
||||
: base(nameof(Spinner))
|
||||
{
|
||||
}
|
||||
|
||||
public override PlacementMask CreatePlacementMask() => new SpinnerPlacementMask();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user