diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableBarLine.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableBarLine.cs
index 2147c5a761..d0fc6aa3d6 100644
--- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableBarLine.cs
+++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableBarLine.cs
@@ -5,6 +5,7 @@ using OpenTK;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Shapes;
using osu.Game.Rulesets.Objects.Drawables;
+using OpenTK.Graphics;
namespace osu.Game.Rulesets.Mania.Objects.Drawables
{
@@ -28,7 +29,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
: base(barLine)
{
RelativeSizeAxes = Axes.X;
- Height = 1;
+ Height = 2f;
AddInternal(new Box
{
@@ -36,6 +37,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
RelativeSizeAxes = Axes.Both,
+ Colour = new Color4(255, 204, 33, 255),
});
bool isMajor = barLine.BeatIndex % (int)barLine.ControlPoint.TimeSignature == 0;
diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs
index f7de503fb3..e008fa952e 100644
--- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs
+++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs
@@ -2,7 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System.Linq;
-using osu.Game.Rulesets.Objects.Drawables;
+using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Graphics;
using osu.Game.Rulesets.Mania.Objects.Drawables.Pieces;
using OpenTK.Graphics;
@@ -23,9 +23,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
private readonly DrawableNote head;
private readonly DrawableNote tail;
- private readonly GlowPiece glowPiece;
private readonly BodyPiece bodyPiece;
- private readonly Container fullHeightContainer;
///
/// Time at which the user started holding this hold note. Null if the user is not holding this hold note.
@@ -37,25 +35,17 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
///
private bool hasBroken;
+ private readonly Container tickContainer;
+
public DrawableHoldNote(HoldNote hitObject, ManiaAction action)
: base(hitObject, action)
{
- Container tickContainer;
RelativeSizeAxes = Axes.X;
InternalChildren = new Drawable[]
{
- // The hit object itself cannot be used for various elements because the tail overshoots it
- // So a specialized container that is updated to contain the tail height is used
- fullHeightContainer = new Container
- {
- RelativeSizeAxes = Axes.X,
- Child = glowPiece = new GlowPiece()
- },
bodyPiece = new BodyPiece
{
- Anchor = Anchor.TopCentre,
- Origin = Anchor.TopCentre,
RelativeSizeAxes = Axes.X,
},
tickContainer = new Container
@@ -92,21 +82,10 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
{
base.AccentColour = value;
- glowPiece.AccentColour = value;
bodyPiece.AccentColour = value;
head.AccentColour = value;
tail.AccentColour = value;
- }
- }
-
- protected override void UpdateState(ArmedState state)
- {
- switch (state)
- {
- case ArmedState.Hit:
- // Good enough for now, we just want them to have a lifetime end
- this.Delay(2000).Expire();
- break;
+ tickContainer.ForEach(t => t.AccentColour = value);
}
}
@@ -121,12 +100,8 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
base.Update();
// Make the body piece not lie under the head note
- bodyPiece.Y = head.Height;
- bodyPiece.Height = DrawHeight - head.Height;
-
- // Make the fullHeightContainer "contain" the height of the tail note, keeping in mind
- // that the tail note overshoots the height of this hit object
- fullHeightContainer.Height = DrawHeight + tail.Height;
+ bodyPiece.Y = head.Height / 2;
+ bodyPiece.Height = DrawHeight - head.Height / 2 + tail.Height / 2;
}
public bool OnPressed(ManiaAction action)
@@ -175,8 +150,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
: base(holdNote.HitObject.Head, action)
{
this.holdNote = holdNote;
-
- GlowPiece.Alpha = 0;
}
public override bool OnPressed(ManiaAction action)
@@ -194,11 +167,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
return true;
}
-
- protected override void UpdateState(ArmedState state)
- {
- // The holdnote keeps scrolling through for now, so having the head disappear looks weird
- }
}
///
@@ -219,8 +187,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
: base(holdNote.HitObject.Tail, action)
{
this.holdNote = holdNote;
-
- GlowPiece.Alpha = 0;
}
protected override void CheckForJudgements(bool userTriggered, double timeOffset)
@@ -253,11 +219,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
});
}
- protected override void UpdateState(ArmedState state)
- {
- // The holdnote keeps scrolling through, so having the tail disappear looks weird
- }
-
public override bool OnPressed(ManiaAction action) => false; // Tail doesn't handle key down
public override bool OnReleased(ManiaAction action)
diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs
index 74c17ad0fb..5df6079efa 100644
--- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs
+++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs
@@ -8,7 +8,6 @@ using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Rulesets.Mania.Judgements;
-using osu.Game.Rulesets.Objects.Drawables;
using osu.Framework.Graphics.Shapes;
using osu.Game.Rulesets.Scoring;
@@ -87,16 +86,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
AddJudgement(new HoldNoteTickJudgement { Result = HitResult.Perfect });
}
- protected override void UpdateState(ArmedState state)
- {
- switch (State.Value)
- {
- case ArmedState.Hit:
- AccentColour = Color4.Green;
- break;
- }
- }
-
protected override void Update()
{
if (AllJudged)
diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableManiaHitObject.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableManiaHitObject.cs
index db1fec40de..fbf1ee8460 100644
--- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableManiaHitObject.cs
+++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableManiaHitObject.cs
@@ -27,5 +27,18 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
if (action != null)
Action = action.Value;
}
+
+ protected override void UpdateState(ArmedState state)
+ {
+ switch (state)
+ {
+ case ArmedState.Miss:
+ this.FadeOut(150, Easing.In).Expire();
+ break;
+ case ArmedState.Hit:
+ this.FadeOut(150, Easing.OutQuint).Expire();
+ break;
+ }
+ }
}
}
diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs
index 0340e6bba3..3de0a9c5cc 100644
--- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs
+++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs
@@ -1,12 +1,13 @@
// Copyright (c) 2007-2018 ppy Pty Ltd .
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
+using osu.Framework.Extensions.Color4Extensions;
using OpenTK.Graphics;
using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
using osu.Framework.Input.Bindings;
using osu.Game.Rulesets.Mania.Judgements;
using osu.Game.Rulesets.Mania.Objects.Drawables.Pieces;
-using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.Scoring;
namespace osu.Game.Rulesets.Mania.Objects.Drawables
@@ -16,9 +17,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
///
public class DrawableNote : DrawableManiaHitObject, IKeyBindingHandler
{
- protected readonly GlowPiece GlowPiece;
-
- private readonly LaneGlowPiece laneGlowPiece;
private readonly NotePiece headPiece;
public DrawableNote(Note hitObject, ManiaAction action)
@@ -27,14 +25,11 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
RelativeSizeAxes = Axes.X;
AutoSizeAxes = Axes.Y;
+ CornerRadius = 5;
+ Masking = true;
+
InternalChildren = new Drawable[]
{
- laneGlowPiece = new LaneGlowPiece
- {
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre
- },
- GlowPiece = new GlowPiece(),
headPiece = new NotePiece
{
Anchor = Anchor.TopCentre,
@@ -49,9 +44,14 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
set
{
base.AccentColour = value;
- laneGlowPiece.AccentColour = AccentColour;
- GlowPiece.AccentColour = AccentColour;
headPiece.AccentColour = AccentColour;
+
+ EdgeEffect = new EdgeEffectParameters
+ {
+ Type = EdgeEffectType.Glow,
+ Colour = AccentColour.Lighten(1f).Opacity(0.6f),
+ Radius = 10,
+ };
}
}
@@ -71,17 +71,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
AddJudgement(new ManiaJudgement { Result = result });
}
- protected override void UpdateState(ArmedState state)
- {
- switch (state)
- {
- case ArmedState.Hit:
- case ArmedState.Miss:
- this.FadeOut(100).Expire();
- break;
- }
- }
-
public virtual bool OnPressed(ManiaAction action)
{
if (action != Action)
diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/Pieces/BodyPiece.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/Pieces/BodyPiece.cs
index 17644a78a5..4ab2da208a 100644
--- a/osu.Game.Rulesets.Mania/Objects/Drawables/Pieces/BodyPiece.cs
+++ b/osu.Game.Rulesets.Mania/Objects/Drawables/Pieces/BodyPiece.cs
@@ -123,8 +123,8 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables.Pieces
if (!IsLoaded)
return;
- foreground.Colour = AccentColour.Opacity(0.4f);
- background.Colour = AccentColour.Opacity(0.2f);
+ foreground.Colour = AccentColour.Opacity(0.9f);
+ background.Colour = AccentColour.Opacity(0.6f);
subtractionCache.Invalidate();
}
diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/Pieces/NotePiece.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/Pieces/NotePiece.cs
index e23b24508b..9ebeb91e0c 100644
--- a/osu.Game.Rulesets.Mania/Objects/Drawables/Pieces/NotePiece.cs
+++ b/osu.Game.Rulesets.Mania/Objects/Drawables/Pieces/NotePiece.cs
@@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables.Pieces
///
internal class NotePiece : Container, IHasAccentColour
{
- private const float head_height = 10;
+ public const float NOTE_HEIGHT = 10;
private const float head_colour_height = 6;
private readonly Box colouredBox;
@@ -23,7 +23,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables.Pieces
public NotePiece()
{
RelativeSizeAxes = Axes.X;
- Height = head_height;
+ Height = NOTE_HEIGHT;
Children = new[]
{
diff --git a/osu.Game.Rulesets.Mania/UI/Column.cs b/osu.Game.Rulesets.Mania/UI/Column.cs
index 28cd1b6b39..dee113c82f 100644
--- a/osu.Game.Rulesets.Mania/UI/Column.cs
+++ b/osu.Game.Rulesets.Mania/UI/Column.cs
@@ -33,6 +33,7 @@ namespace osu.Game.Rulesets.Mania.UI
public ManiaAction Action;
private readonly Box background;
+ private readonly Box backgroundOverlay;
private readonly Container hitTargetBar;
private readonly Container keyIcon;
@@ -42,22 +43,32 @@ namespace osu.Game.Rulesets.Mania.UI
protected override Container Content => content;
private readonly Container content;
- private const float opacity_released = 0.1f;
- private const float opacity_pressed = 0.25f;
-
public Column()
: base(ScrollingDirection.Up)
{
RelativeSizeAxes = Axes.Y;
Width = column_width;
+ Masking = true;
+ CornerRadius = 5;
+
InternalChildren = new Drawable[]
{
background = new Box
{
Name = "Background",
RelativeSizeAxes = Axes.Both,
- Alpha = opacity_released
+ Alpha = 0.3f
+ },
+ backgroundOverlay = new Box
+ {
+ Name = "Background Gradient Overlay",
+ RelativeSizeAxes = Axes.Both,
+ Height = 0.5f,
+ Anchor = Anchor.TopLeft,
+ Origin = Anchor.TopLeft,
+ Blending = BlendingMode.Additive,
+ Alpha = 0
},
new Container
{
@@ -182,6 +193,7 @@ namespace osu.Game.Rulesets.Mania.UI
accentColour = value;
background.Colour = accentColour;
+ backgroundOverlay.Colour = ColourInfo.GradientVertical(accentColour.Opacity(0.6f), accentColour.Opacity(0));
hitTargetBar.EdgeEffect = new EdgeEffectParameters
{
@@ -223,8 +235,8 @@ namespace osu.Game.Rulesets.Mania.UI
{
if (action == Action)
{
- background.FadeTo(opacity_pressed, 50, Easing.OutQuint);
- keyIcon.ScaleTo(1.4f, 50, Easing.OutQuint);
+ backgroundOverlay.FadeTo(1, 50, Easing.OutQuint).Then().FadeTo(0.5f, 250, Easing.OutQuint);
+ keyIcon.ScaleTo(1.4f, 50, Easing.OutQuint).Then().ScaleTo(1.3f, 250, Easing.OutQuint);
}
return false;
@@ -234,8 +246,8 @@ namespace osu.Game.Rulesets.Mania.UI
{
if (action == Action)
{
- background.FadeTo(opacity_released, 800, Easing.OutQuart);
- keyIcon.ScaleTo(1f, 400, Easing.OutQuart);
+ backgroundOverlay.FadeTo(0, 250, Easing.OutQuint);
+ keyIcon.ScaleTo(1f, 125, Easing.OutQuint);
}
return false;
diff --git a/osu.Game.Rulesets.Mania/UI/HitExplosion.cs b/osu.Game.Rulesets.Mania/UI/HitExplosion.cs
index f01dfc0db1..f19c3a811b 100644
--- a/osu.Game.Rulesets.Mania/UI/HitExplosion.cs
+++ b/osu.Game.Rulesets.Mania/UI/HitExplosion.cs
@@ -1,19 +1,21 @@
// Copyright (c) 2007-2018 ppy Pty Ltd .
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
-using OpenTK;
using OpenTK.Graphics;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
+using osu.Framework.MathUtils;
using osu.Game.Rulesets.Mania.Objects.Drawables;
+using osu.Game.Rulesets.Mania.Objects.Drawables.Pieces;
using osu.Game.Rulesets.Objects.Drawables;
+using OpenTK;
namespace osu.Game.Rulesets.Mania.UI
{
internal class HitExplosion : CompositeDrawable
{
- private readonly Box inner;
+ private readonly CircularContainer circle;
public HitExplosion(DrawableHitObject judgedObject)
{
@@ -22,33 +24,32 @@ namespace osu.Game.Rulesets.Mania.UI
Anchor = Anchor.TopCentre;
Origin = Anchor.Centre;
- RelativeSizeAxes = Axes.Both;
- Size = new Vector2(isTick ? 0.5f : 1);
- FillMode = FillMode.Fit;
+ RelativeSizeAxes = Axes.X;
+ Y = NotePiece.NOTE_HEIGHT / 2;
+ Height = NotePiece.NOTE_HEIGHT;
- Blending = BlendingMode.Additive;
+ // scale roughly in-line with visual appearance of notes
+ Scale = new Vector2(isTick ? 0.4f : 0.8f);
- Color4 accent = isTick ? Color4.White : judgedObject.AccentColour;
-
- InternalChild = new CircularContainer
+ InternalChild = circle = new CircularContainer
{
+ Anchor = Anchor.Centre,
+ Origin = Anchor.Centre,
RelativeSizeAxes = Axes.Both,
Masking = true,
- BorderThickness = 1,
- BorderColour = accent,
+ // we want our size to be very small so the glow dominates it.
+ Size = new Vector2(0.1f),
EdgeEffect = new EdgeEffectParameters
{
Type = EdgeEffectType.Glow,
- Colour = accent,
- Radius = 10,
- Hollow = true
+ Colour = Interpolation.ValueAt(0.1f, judgedObject.AccentColour, Color4.White, 0, 1),
+ Radius = 100,
},
- Child = inner = new Box
+ Child = new Box
{
+ Alpha = 0,
RelativeSizeAxes = Axes.Both,
- Colour = accent,
- Alpha = 1,
- AlwaysPresent = true,
+ AlwaysPresent = true
}
};
}
@@ -57,8 +58,8 @@ namespace osu.Game.Rulesets.Mania.UI
{
base.LoadComplete();
- this.ScaleTo(2f, 600, Easing.OutQuint).FadeOut(500);
- inner.FadeOut(250);
+ circle.ResizeTo(circle.Size * new Vector2(4, 20), 1000, Easing.OutQuint);
+ this.FadeIn(16).Then().FadeOut(500, Easing.OutQuint);
Expire(true);
}
diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs
index 605794c795..cb93613c7d 100644
--- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs
+++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs
@@ -9,7 +9,6 @@ using osu.Framework.Configuration;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
-using osu.Game.Graphics;
using osu.Game.Rulesets.Judgements;
using osu.Game.Rulesets.Mania.Beatmaps;
using osu.Game.Rulesets.Mania.Objects;
@@ -78,6 +77,7 @@ namespace osu.Game.Rulesets.Mania.UI
RelativeSizeAxes = Axes.Y,
AutoSizeAxes = Axes.X,
Masking = true,
+ CornerRadius = 5,
Children = new Drawable[]
{
new Box
@@ -183,15 +183,15 @@ namespace osu.Game.Rulesets.Mania.UI
}
[BackgroundDependencyLoader]
- private void load(OsuColour colours)
+ private void load()
{
normalColumnColours = new List
{
- colours.RedDark,
- colours.GreenDark
+ new Color4(94, 0, 57, 255),
+ new Color4(6, 84, 0, 255)
};
- specialColumnColour = colours.BlueDark;
+ specialColumnColour = new Color4(0, 48, 63, 255);
// Set the special column + colour + key
foreach (var column in Columns)