Example #1
0
        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);
        }
Example #2
0
        /// <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));
        }
Example #3
0
 /// <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);
         }
     }
 }