1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 01:27:29 +08:00

Rewrite notes to have time-relative position and length.

This commit is contained in:
smoogipooo 2017-05-09 20:33:59 +09:00
parent ea76eff1e1
commit d852567d1d
6 changed files with 53 additions and 48 deletions

@ -1 +1 @@
Subproject commit cebdfb1bbb260e5aaca0a01e06d7128b3d1faae4 Subproject commit cd37a9cad9aaede267152cf3753cd31fe697cec4

View File

@ -34,32 +34,40 @@ namespace osu.Desktop.VisualTests.Tests
{ {
new Container new Container
{ {
Name = "Normal note column",
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
RelativeSizeAxes = Axes.Y, RelativeSizeAxes = Axes.Y,
Width = 50, Width = 50,
RelativeCoordinateSpace = new Vector2(1, 10000),
Children = new[] Children = new[]
{ {
new DrawableNote(new Note()) new DrawableNote(new Note
{
StartTime = 5000
})
{ {
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
AccentColour = Color4.Red AccentColour = Color4.Red
} }
} }
}, },
new Container new Container
{ {
Name = "Hold note column",
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
RelativeSizeAxes = Axes.Y, RelativeSizeAxes = Axes.Y,
Width = 50, Width = 50,
RelativeCoordinateSpace = new Vector2(1, 10000),
Children = new[] Children = new[]
{ {
new DrawableHoldNote(new HoldNote()) new DrawableHoldNote(new HoldNote
{
StartTime = 5000,
Duration = 1000,
})
{ {
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
AccentColour = Color4.Red, AccentColour = Color4.Red,
Length = 0.4f Length = 0.4f
} }

View File

@ -7,6 +7,7 @@ using osu.Framework.Graphics;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Game.Rulesets.Mania.Objects.Drawables.Pieces; using osu.Game.Rulesets.Mania.Objects.Drawables.Pieces;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.Graphics.Containers;
namespace osu.Game.Rulesets.Mania.Objects.Drawables namespace osu.Game.Rulesets.Mania.Objects.Drawables
{ {
@ -24,24 +25,31 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
public DrawableHoldNote(HoldNote hitObject) public DrawableHoldNote(HoldNote hitObject)
: base(hitObject) : base(hitObject)
{ {
Children = new Drawable[] RelativeSizeAxes = Axes.Both;
Height = (float)HitObject.Duration;
Add(new Drawable[]
{ {
headPiece = new NotePiece
{
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre
},
bodyPiece = new BodyPiece bodyPiece = new BodyPiece
{ {
Anchor = Anchor.BottomCentre, Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre, Origin = Anchor.BottomCentre,
}, },
tailPiece = new NotePiece headPiece = new NotePiece
{ {
Anchor = Anchor.BottomCentre, Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre Origin = Anchor.BottomCentre
},
tailPiece = new NotePiece
{
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre
} }
}; });
// The "length" of the hold note stops at the "base" of the tail piece
// but we want to contain the tail piece within our bounds
Height += (float)HitObject.Duration / headPiece.Height;
} }
public override Color4 AccentColour public override Color4 AccentColour
@ -59,12 +67,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
} }
} }
protected override void Update()
{
bodyPiece.Height = Parent.DrawSize.Y * Length;
}
protected override void UpdateState(ArmedState state) protected override void UpdateState(ArmedState state)
{ {
} }

View File

@ -2,6 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
@ -17,44 +18,31 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
private readonly Container glowContainer; private readonly Container glowContainer;
protected override Container<Drawable> Content => noteFlow;
private readonly FlowContainer<Drawable> noteFlow;
public DrawableManiaHitObject(TObject hitObject) public DrawableManiaHitObject(TObject hitObject)
: base(hitObject) : base(hitObject)
{ {
HitObject = hitObject; HitObject = hitObject;
RelativeSizeAxes = Axes.X; Anchor = Anchor.TopCentre;
AutoSizeAxes = Axes.Y; Origin = Anchor.BottomCentre;
InternalChildren = new Drawable[] RelativePositionAxes = Axes.Y;
Y = (float)HitObject.StartTime;
Add(glowContainer = new Container
{ {
glowContainer = new Container RelativeSizeAxes = Axes.Both,
{ Masking = true,
Anchor = Anchor.Centre, Children = new[]
Origin = Anchor.Centre,
RelativeSizeAxes = Axes.Both,
Masking = true,
Children = new[]
{ {
new Box new Box
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
AlwaysPresent = true, Alpha = 0,
Alpha = 0 AlwaysPresent = true
} }
} }
}, });
noteFlow = new FillFlowContainer<Drawable>
{
Name = "Main container",
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y
}
};
} }
public override Color4 AccentColour public override Color4 AccentColour

View File

@ -18,7 +18,14 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
public DrawableNote(Note hitObject) public DrawableNote(Note hitObject)
: base(hitObject) : base(hitObject)
{ {
Add(headPiece = new NotePiece()); RelativeSizeAxes = Axes.X;
AutoSizeAxes = Axes.Y;
Add(headPiece = new NotePiece
{
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre
});
} }
public override Color4 AccentColour public override Color4 AccentColour

View File

@ -17,7 +17,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables.Pieces
public BodyPiece() public BodyPiece()
{ {
RelativeSizeAxes = Axes.X; RelativeSizeAxes = Axes.Both;
Masking = true; Masking = true;
Children = new[] Children = new[]