public ArkColors(List <List <object> > colorDefinitions, List <List <object> > colorDefinitions2 = null) { colorsByHash = new Dictionary <int, ArkColor>(); colorsByName = new Dictionary <string, ArkColor>(); colorsList = new List <ArkColor> { new ArkColor() }; if (colorDefinitions == null) { return; } ParseColors(colorDefinitions, 1); if (colorDefinitions2 != null) { ParseColors(colorDefinitions2, 201); // dye colors can appear as color mutation, they start with id 201 } void ParseColors(List <List <object> > colorDefs, byte idStart) { foreach (List <object> cd in colorDefs) { var t = cd[0].GetType(); var tt = cd[1].GetType(); if (cd.Count == 2 && cd[0] is string colorName && cd[1] is Newtonsoft.Json.Linq.JArray colorValues) { ArkColor ac = new ArkColor(colorName, new double[] { (double)colorValues[0], (double)colorValues[1], (double)colorValues[2], (double)colorValues[3], }) { Id = idStart }; // add color to lists if it is valid if (ac.LinearRgba != null) { if (!colorsByHash.ContainsKey(ac.Hash)) { colorsByHash.Add(ac.Hash, ac); } if (!colorsByName.ContainsKey(ac.Name)) { colorsByName.Add(ac.Name, ac); } colorsList.Add(ac); } } idStart++; } } colorsById = colorsList.ToDictionary(c => c.Id, c => c); }
/// <summary> /// Returns the ARKColor that is closest to the given argb (sRGB) values. /// </summary> /// <param name="r"></param> /// <param name="g"></param> /// <param name="b"></param> /// <param name="a"></param> /// <returns></returns> private ArkColor ClosestColor(double r, double g, double b, double a) { int hash = ArkColor.ColorHashCode(r, g, b, a); ArkColor ac = ByHash(hash); if (ac.Id != 0) { return(ac); } return(ClosestColorFromRgb(r, g, b, a)); }
/// <summary> /// Sets the ARKColor objects /// </summary> internal void Initialize(ARKColors arkColors) { if (colors == null) { return; } naturalColors = new List <ArkColor>(); foreach (var c in colors) { ArkColor cl = arkColors.ByName(c); if (cl.Hash != 0 && !naturalColors.Contains(cl)) { naturalColors.Add(cl); } } }