// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using osu.Game.Beatmaps; using osuTK; using osuTK.Graphics; namespace osu.Game.Graphics { public class OsuColour { public static Color4 Gray(float amt) => new Color4(amt, amt, amt, 1f); public static Color4 Gray(byte amt) => new Color4(amt, amt, amt, 255); public static Color4 FromHex(string hex) { if (hex[0] == '#') hex = hex.Substring(1); switch (hex.Length) { default: throw new ArgumentException(@"Invalid hex string length!"); case 3: return new Color4( (byte)(Convert.ToByte(hex.Substring(0, 1), 16) * 17), (byte)(Convert.ToByte(hex.Substring(1, 1), 16) * 17), (byte)(Convert.ToByte(hex.Substring(2, 1), 16) * 17), 255); case 6: return new Color4( Convert.ToByte(hex.Substring(0, 2), 16), Convert.ToByte(hex.Substring(2, 2), 16), Convert.ToByte(hex.Substring(4, 2), 16), 255); } } public Color4 ForDifficultyRating(DifficultyRating difficulty, bool useLighterColour = false) { switch (difficulty) { case DifficultyRating.Easy: return Green; default: case DifficultyRating.Normal: return Blue; case DifficultyRating.Hard: return Yellow; case DifficultyRating.Insane: return Pink; case DifficultyRating.Expert: return useLighterColour ? PurpleLight : Purple; case DifficultyRating.ExpertPlus: return useLighterColour ? Gray9 : Gray0; } } public Color4 ForOverlayElement(OverlayColourScheme colourScheme, float saturation, float lightness, float opacity = 1) => Color4.FromHsl(new Vector4(getBaseHue(colourScheme), saturation, lightness, opacity)); // See https://github.com/ppy/osu-web/blob/4218c288292d7c810b619075471eaea8bbb8f9d8/app/helpers.php#L1463 private static float getBaseHue(OverlayColourScheme colourScheme) { float hue; switch (colourScheme) { default: throw new ArgumentException($@"{colourScheme} colour scheme does not provide a hue value in {nameof(getBaseHue)}."); case OverlayColourScheme.Red: hue = 0; break; case OverlayColourScheme.Pink: hue = 333; break; case OverlayColourScheme.Orange: hue = 46; break; case OverlayColourScheme.Green: hue = 115; break; case OverlayColourScheme.Purple: hue = 255; break; case OverlayColourScheme.Blue: hue = 200; break; } return hue / 360f; } // See https://github.com/ppy/osu-web/blob/master/resources/assets/less/colors.less public readonly Color4 PurpleLighter = FromHex(@"eeeeff"); public readonly Color4 PurpleLight = FromHex(@"aa88ff"); public readonly Color4 PurpleLightAlternative = FromHex(@"cba4da"); public readonly Color4 Purple = FromHex(@"8866ee"); public readonly Color4 PurpleDark = FromHex(@"6644cc"); public readonly Color4 PurpleDarkAlternative = FromHex(@"312436"); public readonly Color4 PurpleDarker = FromHex(@"441188"); public readonly Color4 PinkLighter = FromHex(@"ffddee"); public readonly Color4 PinkLight = FromHex(@"ff99cc"); public readonly Color4 Pink = FromHex(@"ff66aa"); public readonly Color4 PinkDark = FromHex(@"cc5288"); public readonly Color4 PinkDarker = FromHex(@"bb1177"); public readonly Color4 BlueLighter = FromHex(@"ddffff"); public readonly Color4 BlueLight = FromHex(@"99eeff"); public readonly Color4 Blue = FromHex(@"66ccff"); public readonly Color4 BlueDark = FromHex(@"44aadd"); public readonly Color4 BlueDarker = FromHex(@"2299bb"); public readonly Color4 YellowLighter = FromHex(@"ffffdd"); public readonly Color4 YellowLight = FromHex(@"ffdd55"); public readonly Color4 Yellow = FromHex(@"ffcc22"); public readonly Color4 YellowDark = FromHex(@"eeaa00"); public readonly Color4 YellowDarker = FromHex(@"cc6600"); public readonly Color4 GreenLighter = FromHex(@"eeffcc"); public readonly Color4 GreenLight = FromHex(@"b3d944"); public readonly Color4 Green = FromHex(@"88b300"); public readonly Color4 GreenDark = FromHex(@"668800"); public readonly Color4 GreenDarker = FromHex(@"445500"); public readonly Color4 Sky = FromHex(@"6bb5ff"); public readonly Color4 GreySkyLighter = FromHex(@"c6e3f4"); public readonly Color4 GreySkyLight = FromHex(@"8ab3cc"); public readonly Color4 GreySky = FromHex(@"405461"); public readonly Color4 GreySkyDark = FromHex(@"303d47"); public readonly Color4 GreySkyDarker = FromHex(@"21272c"); public readonly Color4 Seafoam = FromHex(@"05ffa2"); public readonly Color4 GreySeafoamLighter = FromHex(@"9ebab1"); public readonly Color4 GreySeafoamLight = FromHex(@"4d7365"); public readonly Color4 GreySeafoam = FromHex(@"33413c"); public readonly Color4 GreySeafoamDark = FromHex(@"2c3532"); public readonly Color4 GreySeafoamDarker = FromHex(@"1e2422"); public readonly Color4 Cyan = FromHex(@"05f4fd"); public readonly Color4 GreyCyanLighter = FromHex(@"77b1b3"); public readonly Color4 GreyCyanLight = FromHex(@"436d6f"); public readonly Color4 GreyCyan = FromHex(@"293d3e"); public readonly Color4 GreyCyanDark = FromHex(@"243536"); public readonly Color4 GreyCyanDarker = FromHex(@"1e2929"); public readonly Color4 Lime = FromHex(@"82ff05"); public readonly Color4 GreyLimeLighter = FromHex(@"deff87"); public readonly Color4 GreyLimeLight = FromHex(@"657259"); public readonly Color4 GreyLime = FromHex(@"3f443a"); public readonly Color4 GreyLimeDark = FromHex(@"32352e"); public readonly Color4 GreyLimeDarker = FromHex(@"2e302b"); public readonly Color4 Violet = FromHex(@"bf04ff"); public readonly Color4 GreyVioletLighter = FromHex(@"ebb8fe"); public readonly Color4 GreyVioletLight = FromHex(@"685370"); public readonly Color4 GreyViolet = FromHex(@"46334d"); public readonly Color4 GreyVioletDark = FromHex(@"2c2230"); public readonly Color4 GreyVioletDarker = FromHex(@"201823"); public readonly Color4 Carmine = FromHex(@"ff0542"); public readonly Color4 GreyCarmineLighter = FromHex(@"deaab4"); public readonly Color4 GreyCarmineLight = FromHex(@"644f53"); public readonly Color4 GreyCarmine = FromHex(@"342b2d"); public readonly Color4 GreyCarmineDark = FromHex(@"302a2b"); public readonly Color4 GreyCarmineDarker = FromHex(@"241d1e"); public readonly Color4 Gray0 = FromHex(@"000"); public readonly Color4 Gray1 = FromHex(@"111"); public readonly Color4 Gray2 = FromHex(@"222"); public readonly Color4 Gray3 = FromHex(@"333"); public readonly Color4 Gray4 = FromHex(@"444"); public readonly Color4 Gray5 = FromHex(@"555"); public readonly Color4 Gray6 = FromHex(@"666"); public readonly Color4 Gray7 = FromHex(@"777"); public readonly Color4 Gray8 = FromHex(@"888"); public readonly Color4 Gray9 = FromHex(@"999"); public readonly Color4 GrayA = FromHex(@"aaa"); public readonly Color4 GrayB = FromHex(@"bbb"); public readonly Color4 GrayC = FromHex(@"ccc"); public readonly Color4 GrayD = FromHex(@"ddd"); public readonly Color4 GrayE = FromHex(@"eee"); public readonly Color4 GrayF = FromHex(@"fff"); public readonly Color4 RedLighter = FromHex(@"ffeded"); public readonly Color4 RedLight = FromHex(@"ed7787"); public readonly Color4 Red = FromHex(@"ed1121"); public readonly Color4 RedDark = FromHex(@"ba0011"); public readonly Color4 RedDarker = FromHex(@"870000"); public readonly Color4 ChatBlue = FromHex(@"17292e"); public readonly Color4 ContextMenuGray = FromHex(@"223034"); } public enum OverlayColourScheme { Red, Pink, Orange, Green, Purple, Blue } }