mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 06:52:55 +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)
|
protected override RulesetContainer<OsuHitObject> CreateRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap)
|
||||||
=> new OsuEditRulesetContainer(ruleset, beatmap);
|
=> new OsuEditRulesetContainer(ruleset, beatmap);
|
||||||
|
|
||||||
protected override IReadOnlyList<HitObjectCompositionTool> CompositionTools => new[]
|
protected override IReadOnlyList<HitObjectCompositionTool> CompositionTools => new HitObjectCompositionTool[]
|
||||||
{
|
{
|
||||||
new HitCircleCompositionTool(),
|
new HitCircleCompositionTool(),
|
||||||
|
new SpinnerCompositionTool()
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override Container CreateLayerContainer() => new PlayfieldAdjustmentContainer { RelativeSizeAxes = Axes.Both };
|
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