Magically import images and more into Gamecraft as blocks
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

322 lines
20KB

  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Runtime.CompilerServices;
  5. using UnityEngine;
  6. using UnityEngine.AddressableAssets;
  7. using UnityEngine.ResourceManagement.AsyncOperations;
  8. using GamecraftModdingAPI.App;
  9. using GamecraftModdingAPI.Blocks;
  10. using GamecraftModdingAPI.Tasks;
  11. using GamecraftModdingAPI.Utility;
  12. using MiniJSON;
  13. using Svelto.Tasks;
  14. using UnityEngine.ResourceManagement.ResourceLocations;
  15. namespace Pixi.Common
  16. {
  17. public static class ColorSpaceUtility
  18. {
  19. private const float optimal_delta = 0.2f;
  20. private static Dictionary<BlockColor, float[]> colorMap = null;
  21. private static Dictionary<byte, BlockColor> botColorMap = null;
  22. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  23. public static BlockColor QuantizeToBlockColor(Color pixel)
  24. {
  25. //if (colorMap == null) BuildColorMap();
  26. float[] closest = new float[3] { 1, 1, 1 };
  27. BlockColor c = new BlockColor
  28. {
  29. Color = BlockColors.Default,
  30. Darkness = 0,
  31. };
  32. BlockColor[] keys = colorMap.Keys.ToArray();
  33. float geometricClosest = float.MaxValue;
  34. for (int k = 0; k < keys.Length; k++)
  35. {
  36. float[] color = colorMap[keys[k]];
  37. float[] distance = new float[3] { Math.Abs(pixel.r - color[0]), Math.Abs(pixel.g - color[1]), Math.Abs(pixel.b - color[2]) };
  38. float dist = Mathf.Sqrt(Mathf.Pow(distance[0], 2) + Mathf.Pow(distance[1], 2) + Mathf.Pow(distance[2], 2));
  39. if (dist < geometricClosest)
  40. {
  41. c = keys[k];
  42. closest = distance;
  43. geometricClosest = Mathf.Sqrt(Mathf.Pow(closest[0], 2) + Mathf.Pow(closest[1], 2) + Mathf.Pow(closest[2], 2));
  44. if (geometricClosest < optimal_delta)
  45. {
  46. #if DEBUG
  47. Logging.MetaLog($"Final delta ({closest[0]},{closest[1]},{closest[2]}) t:{geometricClosest}");
  48. #endif
  49. return c;
  50. }
  51. }
  52. }
  53. #if DEBUG
  54. Logging.MetaLog($"Final delta ({closest[0]},{closest[1]},{closest[2]}) t:{geometricClosest}");
  55. #endif
  56. return c;
  57. }
  58. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  59. public static BlockColor QuantizeToBlockColor(byte cubeColorEnum)
  60. {
  61. if (botColorMap == null) BuildBotColorMap();
  62. return botColorMap[cubeColorEnum];
  63. }
  64. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  65. public static BlockColor QuantizeToBlockColor(float[] pixel)
  66. {
  67. if (pixel.Length < 3 || pixel[0] < 0 || pixel[1] < 0 || pixel[2] < 0)
  68. {
  69. return new BlockColor
  70. {
  71. Color = BlockColors.Default,
  72. Darkness = 0,
  73. };
  74. }
  75. return QuantizeToBlockColor(new Color(pixel[0], pixel[1], pixel[2]));
  76. }
  77. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  78. public static float[] UnquantizeToArray(BlockColor c)
  79. {
  80. //if (colorMap == null) BuildColorMap();
  81. return colorMap[c];
  82. }
  83. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  84. public static float[] UnquantizeToArray(BlockColors color, byte darkness = 0)
  85. {
  86. return UnquantizeToArray(new BlockColor
  87. {
  88. Color = color,
  89. Darkness = darkness,
  90. });
  91. }
  92. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  93. public static Color UnquantizeToColor(BlockColor c)
  94. {
  95. float[] t = UnquantizeToArray(c);
  96. return new Color(t[0], t[1], t[2]);
  97. }
  98. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  99. public static Color UnquantizeToColor(BlockColors color, byte darkness = 0)
  100. {
  101. return UnquantizeToColor(new BlockColor
  102. {
  103. Color = color,
  104. Darkness = darkness,
  105. });
  106. }
  107. public static void LoadColorMenuEvent(object caller, MenuEventArgs info)
  108. {
  109. Scheduler.Schedule(new AsyncRunner());
  110. }
  111. private static void BuildColorMap()
  112. {
  113. // old manual version for building color map
  114. colorMap = new Dictionary<BlockColor, float[]>();
  115. // this was done manually -- never again
  116. // White
  117. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 0 }] = new float[3] { 1f, 1f, 1f};
  118. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 1 }] = new float[3] { 0.88f, 0.98f, 0.99f };
  119. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 2 }] = new float[3] { 0.80f, 0.89f, 0.99f };
  120. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 3 }] = new float[3] { 0.746f, 0.827f, 0.946f };
  121. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 4 }] = new float[3] { 0.71f, 0.789f, 0.888f };
  122. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 5 }] = new float[3] { 0.597f, 0.664f, 0.742f };
  123. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 6 }] = new float[3] { 0.484f, 0.535f, 0.61f };
  124. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 7 }] = new float[3] { 0.355f, 0.39f, 0.449f };
  125. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 8 }] = new float[3] { 0f, 0f, 0f };
  126. colorMap[new BlockColor { Color = BlockColors.White, Darkness = 9 }] = new float[3] { 0.581f, 0.643f, 0.745f };
  127. // Pink
  128. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 0 }] = new float[3] { 1f, 0.657f, 1f };
  129. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 1 }] = new float[3] { 0.912f, 0.98f, 0.993f };
  130. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 2 }] = new float[3] { 0.897f, 0.905f, 0.991f };
  131. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 3 }] = new float[3] { 0.892f, 0.776f, 0.988f };
  132. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 4 }] = new float[3] { 0.898f, 0.698f, 0.992f };
  133. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 5 }] = new float[3] { 0.875f, 0.267f, 0.882f };
  134. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 6 }] = new float[3] { 0.768f, 0.199f, 0.767f };
  135. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 7 }] = new float[3] { 0.628f, 0.15f, 0.637f };
  136. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 8 }] = new float[3] { 0.435f, 0.133f, 0.439f };
  137. colorMap[new BlockColor { Color = BlockColors.Pink, Darkness = 9 }] = new float[3] { 0.726f, 0.659f, 0.871f };
  138. // Purple
  139. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 0 }] = new float[3] { 0.764f, 0.587f, 1f };
  140. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 1 }] = new float[3] { 0.893f, 0.966f, 0.992f };
  141. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 2 }] = new float[3] { 0.842f, 0.877f, 0.991f };
  142. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 3 }] = new float[3] { 0.794f, 0.747f, 0.99f };
  143. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 4 }] = new float[3] { 0.783f, 0.669f, 0.992f };
  144. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 5 }] = new float[3] { 0.636f, 0.249f, 0.991f };
  145. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 6 }] = new float[3] { 0.548f, 0.18f, 0.896f };
  146. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 7 }] = new float[3] { 0.441f, 0.152f, 0.726f };
  147. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 8 }] = new float[3] { 0.308f, 0.135f, 0.498f };
  148. colorMap[new BlockColor { Color = BlockColors.Purple, Darkness = 9 }] = new float[3] { 0.659f, 0.646f, 0.909f };
  149. // Blue
  150. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 0 }] = new float[3] { 0.449f, 0.762f, 1f };
  151. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 1 }] = new float[3] { 0.856f, 0.971f, 0.992f };
  152. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 2 }] = new float[3] { 0.767f, 0.907f, 0.989f };
  153. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 3 }] = new float[3] { 0.642f, 0.836f, 0.992f };
  154. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 4 }] = new float[3] { 0.564f, 0.812f, 0.989f };
  155. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 5 }] = new float[3] { 0.211f, 0.621f, 0.989f };
  156. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 6 }] = new float[3] { 0.143f, 0.525f, 0.882f };
  157. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 7 }] = new float[3] { 0.114f, 0.410f, 0.705f };
  158. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 8 }] = new float[3] { 0.116f, 0.289f, 0.481f };
  159. colorMap[new BlockColor { Color = BlockColors.Blue, Darkness = 9 }] = new float[3] { 0.571f, 0.701f, 0.901f };
  160. // Aqua
  161. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 0 }] = new float[3] { 0.408f, 0.963f, 1f };
  162. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 1 }] = new float[3] { 0.838f, 0.976f, 0.990f };
  163. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 2 }] = new float[3] { 0.747f, 0.961f, 0.994f };
  164. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 3 }] = new float[3] { 0.605f, 0.948f, 0.990f };
  165. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 4 }] = new float[3] { 0.534f, 0.954f, 0.993f };
  166. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 5 }] = new float[3] { 0.179f, 0.841f, 0.991f };
  167. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 6 }] = new float[3] { 0.121f, 0.719f, 0.868f };
  168. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 7 }] = new float[3] { 0.117f, 0.574f, 0.687f };
  169. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 8 }] = new float[3] { 0.116f, 0.399f, 0.478f };
  170. colorMap[new BlockColor { Color = BlockColors.Aqua, Darkness = 9 }] = new float[3] { 0.556f, 0.768f, 0.901f };
  171. // Green
  172. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 0 }] = new float[3] { 0.344f, 1f, 0.579f };
  173. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 1 }] = new float[3] { 0.823f, 0.977f, 0.994f };
  174. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 2 }] = new float[3] { 0.731f, 0.966f, 0.958f };
  175. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 3 }] = new float[3] { 0.643f, 0.964f, 0.873f };
  176. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 4 }] = new float[3] { 0.498f, 0.961f, 0.721f };
  177. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 5 }] = new float[3] { 0.176f, 0.853f, 0.415f };
  178. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 6 }] = new float[3] { 0.120f, 0.728f, 0.350f };
  179. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 7 }] = new float[3] { 0.105f, 0.560f, 0.264f };
  180. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 8 }] = new float[3] { 0.122f, 0.392f, 0.221f };
  181. colorMap[new BlockColor { Color = BlockColors.Green, Darkness = 9 }] = new float[3] { 0.542f, 0.771f, 0.717f };
  182. // Lime
  183. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 0 }] = new float[3] { 0.705f, 1f, 0.443f };
  184. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 1 }] = new float[3] { 0.869f, 0.978f, 0.991f };
  185. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 2 }] = new float[3] { 0.815f, 0.967f, 0.932f };
  186. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 3 }] = new float[3] { 0.778f, 0.962f, 0.821f };
  187. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 4 }] = new float[3] { 0.753f, 0.964f, 0.631f };
  188. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 5 }] = new float[3] { 0.599f, 0.855f, 0.268f };
  189. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 6 }] = new float[3] { 0.505f, 0.712f, 0.201f };
  190. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 7 }] = new float[3] { 0.376f, 0.545f, 0.185f };
  191. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 8 }] = new float[3] { 0.268f, 0.379f, 0.172f };
  192. colorMap[new BlockColor { Color = BlockColors.Lime, Darkness = 9 }] = new float[3] { 0.631f, 0.768f, 0.690f };
  193. // Yellow
  194. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 0 }] = new float[3] { 0.893f, 1f, 0.457f };
  195. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 1 }] = new float[3] { 0.887f, 0.981f, 0.995f };
  196. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 2 }] = new float[3] { 0.878f, 0.971f, 0.920f };
  197. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 3 }] = new float[3] { 0.874f, 0.964f, 0.802f };
  198. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 4 }] = new float[3] { 0.875f, 0.964f, 0.619f };
  199. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 5 }] = new float[3] { 0.771f, 0.846f, 0.246f };
  200. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 6 }] = new float[3] { 0.638f, 0.703f, 0.192f };
  201. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 7 }] = new float[3] { 0.477f, 0.522f, 0.142f };
  202. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 8 }] = new float[3] { 0.330f, 0.363f, 0.151f };
  203. colorMap[new BlockColor { Color = BlockColors.Yellow, Darkness = 9 }] = new float[3] { 0.693f, 0.763f, 0.678f };
  204. // Orange
  205. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 0 }] = new float[3] { 0.891f, 0.750f, 0.423f };
  206. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 1 }] = new float[3] { 0.883f, 0.948f, 0.992f };
  207. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 2 }] = new float[3] { 0.877f, 0.873f, 0.894f };
  208. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 3 }] = new float[3] { 0.878f, 0.831f, 0.771f };
  209. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 4 }] = new float[3] { 0.886f, 0.801f, 0.595f };
  210. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 5 }] = new float[3] { 0.777f, 0.621f, 0.241f };
  211. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 6 }] = new float[3] { 0.637f, 0.507f, 0.168f };
  212. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 7 }] = new float[3] { 0.466f, 0.364f, 0.123f };
  213. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 8 }] = new float[3] { 0.323f, 0.266f, 0.138f };
  214. colorMap[new BlockColor { Color = BlockColors.Orange, Darkness = 9 }] = new float[3] { 0.689f, 0.672f, 0.667f };
  215. // Red
  216. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 0 }] = new float[3] { 0.890f, 0.323f, 0.359f };
  217. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 1 }] = new float[3] { 0.879f, 0.863f, 0.987f };
  218. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 2 }] = new float[3] { 0.872f, 0.758f, 0.868f };
  219. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 3 }] = new float[3] { 0.887f, 0.663f, 0.756f };
  220. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 4 }] = new float[3] { 0.903f, 0.546f, 0.608f };
  221. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 5 }] = new float[3] { 0.785f, 0.222f, 0.222f };
  222. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 6 }] = new float[3] { 0.641f, 0.155f, 0.152f };
  223. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 7 }] = new float[3] { 0.455f, 0.105f, 0.108f };
  224. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 8 }] = new float[3] { 0.320f, 0.121f, 0.133f };
  225. colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 9 }] = new float[3] { 0.687f, 0.571f, 0.661f };
  226. // default
  227. colorMap[new BlockColor { Color = BlockColors.Default, Darkness = 0 }] = new float[3] { -1f, -1f, -1f };
  228. }
  229. private static void BuildBotColorMap()
  230. {
  231. botColorMap = new Dictionary<byte, BlockColor>();
  232. // standard colours
  233. botColorMap[0] = new BlockColor { Color = BlockColors.White, Darkness = 0 };
  234. botColorMap[1] = new BlockColor { Color = BlockColors.White, Darkness = 6 };
  235. botColorMap[4] = new BlockColor { Color = BlockColors.White, Darkness = 8 };
  236. botColorMap[5] = new BlockColor { Color = BlockColors.Red, Darkness = 5 };
  237. botColorMap[2] = new BlockColor { Color = BlockColors.Orange, Darkness = 0 };
  238. botColorMap[6] = new BlockColor { Color = BlockColors.Yellow, Darkness = 0 };
  239. botColorMap[7] = new BlockColor { Color = BlockColors.Green, Darkness = 5 };
  240. botColorMap[3] = new BlockColor { Color = BlockColors.Aqua, Darkness = 5 };
  241. botColorMap[9] = new BlockColor { Color = BlockColors.Blue, Darkness = 5 };
  242. botColorMap[10] = new BlockColor { Color = BlockColors.Purple, Darkness = 5 };
  243. // premium colours
  244. botColorMap[16] = new BlockColor { Color = BlockColors.Red, Darkness = 0 };
  245. botColorMap[17] = new BlockColor { Color = BlockColors.Red, Darkness = 7 };
  246. botColorMap[11] = new BlockColor { Color = BlockColors.Orange, Darkness = 6 };
  247. botColorMap[18] = new BlockColor { Color = BlockColors.Purple, Darkness = 9 };
  248. botColorMap[19] = new BlockColor { Color = BlockColors.Pink, Darkness = 9 };
  249. botColorMap[20] = new BlockColor { Color = BlockColors.Orange, Darkness = 5 };
  250. botColorMap[14] = new BlockColor { Color = BlockColors.Yellow, Darkness = 3 };
  251. botColorMap[21] = new BlockColor { Color = BlockColors.Green, Darkness = 7 };
  252. botColorMap[22] = new BlockColor { Color = BlockColors.Lime, Darkness = 8 };
  253. botColorMap[13] = new BlockColor { Color = BlockColors.Green, Darkness = 6 };
  254. botColorMap[12] = new BlockColor { Color = BlockColors.Lime, Darkness = 5 };
  255. // blue gang
  256. botColorMap[23] = new BlockColor { Color = BlockColors.Blue, Darkness = 8 };
  257. botColorMap[24] = new BlockColor { Color = BlockColors.Aqua, Darkness = 8 };
  258. botColorMap[25] = new BlockColor { Color = BlockColors.Blue, Darkness = 7 };
  259. botColorMap[26] = new BlockColor { Color = BlockColors.White, Darkness = 5 };
  260. botColorMap[27] = new BlockColor { Color = BlockColors.White, Darkness = 4 };
  261. botColorMap[28] = new BlockColor { Color = BlockColors.Aqua, Darkness = 4 };
  262. botColorMap[29] = new BlockColor { Color = BlockColors.Purple, Darkness = 8 };
  263. // purples & pinks
  264. botColorMap[30] = new BlockColor { Color = BlockColors.Pink, Darkness = 0 };
  265. botColorMap[8] = new BlockColor { Color = BlockColors.Pink, Darkness = 5 };
  266. botColorMap[31] = new BlockColor { Color = BlockColors.Pink, Darkness = 4 };
  267. botColorMap[15] = new BlockColor { Color = BlockColors.Red, Darkness = 3 };
  268. }
  269. private class AsyncRunner : ISchedulable
  270. {
  271. public IEnumerator<TaskContract> Run()
  272. {
  273. AsyncOperationHandle<TextAsset> asyncHandle = Addressables.LoadAssetAsync<TextAsset>("colours");
  274. yield return asyncHandle.Continue();
  275. Dictionary<string, object> colourData = Json.Deserialize(asyncHandle.Result.text) as Dictionary<string, object>;
  276. if (colourData == null) yield break;
  277. Client.EnterMenu -= LoadColorMenuEvent;
  278. // Logging.MetaLog((List<object>)((colourData["Colours"] as Dictionary<string, object>)["Data"] as Dictionary<string, object>)["Slots"]);
  279. // Generate color map
  280. List<object> hexColors =
  281. (((colourData["Colours"] as Dictionary<string, object>)?["Data"] as Dictionary<string, object>)?
  282. ["Slots"] as List<object>);
  283. int count = 0;
  284. colorMap = new Dictionary<BlockColor, float[]>();
  285. for (byte d = 0; d < 10; d++)
  286. {
  287. foreach (BlockColors c in Enum.GetValues(typeof(BlockColors)))
  288. {
  289. if (c != BlockColors.Default)
  290. {
  291. BlockColor colorStruct = new BlockColor
  292. {
  293. Color = c,
  294. Darkness = d,
  295. };
  296. Color pixel = Images.PixelUtility.PixelHex((string)hexColors[count]);
  297. colorMap[colorStruct] = new float[] {pixel.r, pixel.g, pixel.b};
  298. count++;
  299. }
  300. }
  301. }
  302. }
  303. }
  304. }
  305. }