osu/osu.Game.Rulesets.Osu/Skinning/Default/SpinnerTicks.cs

75 lines
2.2 KiB
C#
Raw Normal View History

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2018-04-13 09:19:50 +00:00
using System;
2020-07-20 08:48:35 +00:00
using System.Linq;
2018-04-13 09:19:50 +00:00
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
2019-04-02 05:51:28 +00:00
using osu.Framework.Graphics.Effects;
2018-04-13 09:19:50 +00:00
using osu.Framework.Graphics.Shapes;
2020-07-20 08:48:35 +00:00
using osu.Game.Graphics;
2020-12-04 11:21:53 +00:00
using osuTK;
using osuTK.Graphics;
2018-04-13 09:19:50 +00:00
2020-12-04 11:21:53 +00:00
namespace osu.Game.Rulesets.Osu.Skinning.Default
2018-04-13 09:19:50 +00:00
{
2020-07-20 08:48:35 +00:00
public class SpinnerTicks : Container, IHasAccentColour
2018-04-13 09:19:50 +00:00
{
public SpinnerTicks()
{
Origin = Anchor.Centre;
Anchor = Anchor.Centre;
RelativeSizeAxes = Axes.Both;
2020-07-20 06:19:17 +00:00
const float count = 8;
2018-04-13 09:19:50 +00:00
for (float i = 0; i < count; i++)
2018-04-13 09:19:50 +00:00
{
Add(new Container
{
2020-07-20 08:48:35 +00:00
Alpha = 0.4f,
Blending = BlendingParameters.Additive,
2018-04-13 09:19:50 +00:00
RelativePositionAxes = Axes.Both,
Masking = true,
CornerRadius = 5,
2020-07-20 08:52:59 +00:00
Size = new Vector2(60, 10),
2018-04-13 09:19:50 +00:00
Origin = Anchor.Centre,
Position = new Vector2(
2020-07-20 08:52:59 +00:00
0.5f + MathF.Sin(i / count * 2 * MathF.PI) / 2 * 0.83f,
0.5f + MathF.Cos(i / count * 2 * MathF.PI) / 2 * 0.83f
2018-04-13 09:19:50 +00:00
),
Rotation = -i / count * 360 + 90,
2018-04-13 09:19:50 +00:00
Children = new[]
{
new Box
{
RelativeSizeAxes = Axes.Both,
}
}
});
}
}
2020-07-20 08:48:35 +00:00
public Color4 AccentColour
{
get => Colour;
set
{
Colour = value;
foreach (var c in Children.OfType<Container>())
{
c.EdgeEffect =
new EdgeEffectParameters
{
Type = EdgeEffectType.Glow,
Radius = 20,
Colour = value.Opacity(0.8f),
};
}
}
}
2018-04-13 09:19:50 +00:00
}
}