Utils/TycoonColor.cs
using System.Text.Json.Serialization;
using System;
public struct TycoonColor
{
[JsonInclude]
public Color Value;
public TycoonColor( Color color )
{
Value = color;
}
public static implicit operator TycoonColor( Color color ) => new TycoonColor( color );
public static implicit operator Color( TycoonColor tycoonColor ) => tycoonColor.Value;
public static implicit operator Color?( TycoonColor? tycoonColor ) => tycoonColor?.Value;
public override string ToString() => Value.ToString();
public string Hex()
{
int r = (int)Math.Round( Value.r * 255 );
int g = (int)Math.Round( Value.g * 255 );
int b = (int)Math.Round( Value.b * 255 );
return $"#{r:X2}{g:X2}{b:X2}";
}
public static TycoonColor Palette( int index )
{
if ( index < 0 || index >= PaletteColors.Length )
throw new ArgumentOutOfRangeException( nameof( index ), $"Palette index {index} is out of range." );
return PaletteColors[index];
}
public static TycoonColor RandomPalette()
{
var rand = new Random();
int index = rand.Next( PaletteColors.Length );
return PaletteColors[index];
}
public static readonly Color[] PaletteColors = new Color[]
{
new Color32(23, 80, 68, 255), // 0
new Color32(45, 126, 99, 255), // 1
new Color32(80, 176, 64, 255), // 2
new Color32(153, 210, 70, 255),// 3
new Color32(251, 245, 111, 255),// 4
new Color32(251, 125, 78, 255),// 5
new Color32(251, 78, 78, 255), // 6
new Color32(234, 47, 69, 255), // 7
new Color32(220, 65, 108, 255),// 8
new Color32(163, 37, 83, 255), // 9
new Color32(96, 27, 81, 255), //10
new Color32(54, 24, 71, 255), //11
new Color32(12, 8, 41, 255), //12
new Color32(37, 17, 81, 255), //13
new Color32(38, 36, 113, 255), //14
new Color32(71, 116, 184, 255),//15
new Color32(125, 208, 226, 255),//16
new Color32(196, 243, 238, 255),//17
new Color32(207, 154, 136, 255),//18
new Color32(156, 76, 76, 255), //19
new Color32(111, 39, 52, 255), //20
new Color32(92, 24, 52, 255), //21
new Color32(52, 8, 41, 255), //22
new Color32(0, 0, 0, 255), //23
new Color32(58, 58, 58, 255), //24
new Color32(117, 117, 117, 255),//25
new Color32(182, 182, 182, 255),//26
new Color32(251, 251, 251, 255)//27
};
// Named palette shortcuts
public static TycoonColor DarkTeal => Palette( 0 );
public static TycoonColor JungleGreen => Palette( 1 );
public static TycoonColor BrightGreen => Palette( 2 );
public static TycoonColor Lime => Palette( 3 );
public static TycoonColor Yellow => Palette( 4 );
public static TycoonColor Orange => Palette( 5 );
public static TycoonColor Red => Palette( 6 );
public static TycoonColor Scarlet => Palette( 7 );
public static TycoonColor Pink => Palette( 8 );
public static TycoonColor DeepPink => Palette( 9 );
public static TycoonColor Purple => Palette( 10 );
public static TycoonColor DarkPurple => Palette( 11 );
public static TycoonColor Midnight => Palette( 12 );
public static TycoonColor Indigo => Palette( 13 );
public static TycoonColor RoyalBlue => Palette( 14 );
public static TycoonColor SkyBlue => Palette( 15 );
public static TycoonColor LightCyan => Palette( 16 );
public static TycoonColor PaleCyan => Palette( 17 );
public static TycoonColor Peach => Palette( 18 );
public static TycoonColor BrickRed => Palette( 19 );
public static TycoonColor Maroon => Palette( 20 );
public static TycoonColor DarkMaroon => Palette( 21 );
public static TycoonColor BlackPurple => Palette( 22 );
public static TycoonColor Black => Palette( 23 );
public static TycoonColor DarkGray => Palette( 24 );
public static TycoonColor Gray => Palette( 25 );
public static TycoonColor LightGray => Palette( 26 );
public static TycoonColor White => Palette( 27 );
}