using System; namespace DesertPaintCodex.Models { public class PaintColor { private const byte LightTextValueCutoff = 150; private const float RedIntensity = 0.299f; private const float GreenIntensity = 0.587f; private const float BlueIntensity = 0.114f; public byte Red { get; set; } public byte Blue { get; set; } public byte Green { get; set; } public string Name { get; private set; } public bool UseWhiteText => Red * RedIntensity + Green * GreenIntensity + Blue * BlueIntensity < LightTextValueCutoff; public PaintColor() { Name = "Undefined"; Red = 0; Green = 0; Blue = 0; } public PaintColor(string name, string hexRed, string hexGreen, string hexBlue) { Name = name; Red = byte.Parse(hexRed, System.Globalization.NumberStyles.AllowHexSpecifier); Green = byte.Parse(hexGreen, System.Globalization.NumberStyles.AllowHexSpecifier); Blue = byte.Parse(hexBlue, System.Globalization.NumberStyles.AllowHexSpecifier); } public PaintColor(byte red, byte green, byte blue) { Name = "Undefined"; Red = red; Green = green; Blue = blue; } public PaintColor(PaintColor other) { Name = other.Name; Red = other.Red; Green = other.Green; Blue = other.Blue; } public int GetDistanceSquared(PaintColor otherColor) { return (int)(Math.Pow(Red - otherColor.Red, 2) + Math.Pow(Green - otherColor.Green, 2) + Math.Pow(Blue - otherColor.Blue, 2)); } public void Clear() { Red = 0; Green = 0; Blue = 0; } public void Set(PaintColor other) { Red = other.Red; Green = other.Green; Blue = other.Blue; Name = other.Name; } public string ToHexString() { return "#" + Red.ToString("X2") + Green.ToString("X2") + Blue.ToString("X2"); } public override string ToString() { return "[" + Name + ", " + Red + ", " + Green + ", " + Blue + "]"; } } }