2020-01-24 17:24:35 +08:00
// 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.
using osuTK ;
using osuTK.Graphics ;
namespace osu.Game.Overlays
{
public class OverlayColourProvider
{
2024-06-29 14:59:40 +08:00
public OverlayColourScheme ColourScheme { get ; private set ; }
2020-01-24 17:24:35 +08:00
public OverlayColourProvider ( OverlayColourScheme colourScheme )
{
2024-06-29 14:59:40 +08:00
ColourScheme = colourScheme ;
2020-01-24 17:24:35 +08:00
}
2022-02-21 03:40:08 +08:00
// Note that the following five colours are also defined in `OsuColour` as `{colourScheme}{0,1,2,3,4}`.
// The difference as to which should be used where comes down to context.
// If the colour in question is supposed to always match the view in which it is displayed theme-wise, use `OverlayColourProvider`.
// If the colour usage is special and in general differs from the surrounding view in choice of hue, use the `OsuColour` constants.
2022-02-21 03:40:39 +08:00
public Color4 Colour0 = > getColour ( 1 , 0.8f ) ;
2021-01-13 22:06:44 +08:00
public Color4 Colour1 = > getColour ( 1 , 0.7f ) ;
public Color4 Colour2 = > getColour ( 0.8f , 0.6f ) ;
public Color4 Colour3 = > getColour ( 0.6f , 0.5f ) ;
public Color4 Colour4 = > getColour ( 0.4f , 0.3f ) ;
2020-01-26 17:42:23 +08:00
public Color4 Highlight1 = > getColour ( 1 , 0.7f ) ;
public Color4 Content1 = > getColour ( 0.4f , 1 ) ;
public Color4 Content2 = > getColour ( 0.4f , 0.9f ) ;
public Color4 Light1 = > getColour ( 0.4f , 0.8f ) ;
public Color4 Light2 = > getColour ( 0.4f , 0.75f ) ;
public Color4 Light3 = > getColour ( 0.4f , 0.7f ) ;
public Color4 Light4 = > getColour ( 0.4f , 0.5f ) ;
public Color4 Dark1 = > getColour ( 0.2f , 0.35f ) ;
public Color4 Dark2 = > getColour ( 0.2f , 0.3f ) ;
public Color4 Dark3 = > getColour ( 0.2f , 0.25f ) ;
public Color4 Dark4 = > getColour ( 0.2f , 0.2f ) ;
public Color4 Dark5 = > getColour ( 0.2f , 0.15f ) ;
public Color4 Dark6 = > getColour ( 0.2f , 0.1f ) ;
public Color4 Foreground1 = > getColour ( 0.1f , 0.6f ) ;
public Color4 Background1 = > getColour ( 0.1f , 0.4f ) ;
public Color4 Background2 = > getColour ( 0.1f , 0.3f ) ;
public Color4 Background3 = > getColour ( 0.1f , 0.25f ) ;
public Color4 Background4 = > getColour ( 0.1f , 0.2f ) ;
public Color4 Background5 = > getColour ( 0.1f , 0.15f ) ;
public Color4 Background6 = > getColour ( 0.1f , 0.1f ) ;
2020-01-26 17:39:15 +08:00
2024-06-29 14:59:40 +08:00
/// <summary>
/// Changes the value of <see cref="ColourScheme"/> to a different colour scheme.
/// Note that this does not trigger any kind of signal to any drawable that received colours from here, all drawables need to be updated manually.
/// </summary>
/// <param name="colourScheme">The proposed colour scheme.</param>
public void ChangeColourScheme ( OverlayColourScheme colourScheme )
{
ColourScheme = colourScheme ;
}
private Color4 getColour ( float saturation , float lightness ) = > Color4 . FromHsl ( new Vector4 ( getBaseHue ( ColourScheme ) , saturation , lightness , 1 ) ) ;
2020-01-24 17:24:35 +08:00
2024-07-13 23:29:03 +08:00
private static float getBaseHue ( OverlayColourScheme colourScheme )
{
// intentionally round hue number back to zero when it's 360, because that number apparently gives off a nice-looking gray colour scheme but is totally against expectation (maybe we can use this one day).
int hueNumber = ( int ) colourScheme % 360 ;
return hueNumber / 360f ;
}
2020-01-24 17:24:35 +08:00
}
2024-07-13 16:46:39 +08:00
// See https://github.com/ppy/osu-web/blob/5a536d217a21582aad999db50a981003d3ad5659/app/helpers.php#L1620-L1628
2020-01-24 17:24:35 +08:00
public enum OverlayColourScheme
{
2024-07-13 16:46:39 +08:00
Red = 0 ,
Orange = 45 ,
Lime = 90 ,
Green = 125 ,
Aquamarine = 160 ,
Blue = 200 ,
Purple = 255 ,
Plum = 320 ,
Pink = 333 ,
2020-01-24 17:24:35 +08:00
}
}