diff --git a/Pixi/Common/ColorSpaceUtility.cs b/Pixi/Common/ColorSpaceUtility.cs index 7a2ca5c..a9ef920 100644 --- a/Pixi/Common/ColorSpaceUtility.cs +++ b/Pixi/Common/ColorSpaceUtility.cs @@ -16,6 +16,8 @@ namespace Pixi.Common private static Dictionary colorMap = null; + private static Dictionary botColorMap = null; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static BlockColor QuantizeToBlockColor(Color pixel) { @@ -47,6 +49,13 @@ namespace Pixi.Common return c; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static BlockColor QuantizeToBlockColor(byte cubeColorEnum) + { + if (botColorMap == null) BuildBotColorMap(); + return botColorMap[cubeColorEnum]; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static BlockColor QuantizeToBlockColor(float[] pixel) { @@ -215,5 +224,46 @@ namespace Pixi.Common colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 8 }] = new float[3] { 0.320f, 0.121f, 0.133f }; colorMap[new BlockColor { Color = BlockColors.Red, Darkness = 9 }] = new float[3] { 0.687f, 0.571f, 0.661f }; } + + private static void BuildBotColorMap() + { + botColorMap = new Dictionary(); + // standard colours + botColorMap[0] = new BlockColor { Color = BlockColors.White, Darkness = 0 }; + botColorMap[1] = new BlockColor { Color = BlockColors.White, Darkness = 6 }; + botColorMap[4] = new BlockColor { Color = BlockColors.White, Darkness = 8 }; + botColorMap[5] = new BlockColor { Color = BlockColors.Red, Darkness = 5 }; + botColorMap[2] = new BlockColor { Color = BlockColors.Orange, Darkness = 0 }; + botColorMap[6] = new BlockColor { Color = BlockColors.Yellow, Darkness = 0 }; + botColorMap[7] = new BlockColor { Color = BlockColors.Green, Darkness = 5 }; + botColorMap[3] = new BlockColor { Color = BlockColors.Aqua, Darkness = 5 }; + botColorMap[9] = new BlockColor { Color = BlockColors.Blue, Darkness = 5 }; + botColorMap[10] = new BlockColor { Color = BlockColors.Purple, Darkness = 5 }; + // premium colours + botColorMap[16] = new BlockColor { Color = BlockColors.Red, Darkness = 0 }; + botColorMap[17] = new BlockColor { Color = BlockColors.Red, Darkness = 7 }; + botColorMap[11] = new BlockColor { Color = BlockColors.Orange, Darkness = 6 }; + botColorMap[18] = new BlockColor { Color = BlockColors.Purple, Darkness = 9 }; + botColorMap[19] = new BlockColor { Color = BlockColors.Pink, Darkness = 9 }; + botColorMap[20] = new BlockColor { Color = BlockColors.Orange, Darkness = 5 }; + botColorMap[20] = new BlockColor { Color = BlockColors.Yellow, Darkness = 3 }; + botColorMap[14] = new BlockColor { Color = BlockColors.Green, Darkness = 7 }; + botColorMap[21] = new BlockColor { Color = BlockColors.Lime, Darkness = 8 }; + botColorMap[22] = new BlockColor { Color = BlockColors.Green, Darkness = 6 }; + botColorMap[13] = new BlockColor { Color = BlockColors.Lime, Darkness = 5 }; + // blue gang + botColorMap[23] = new BlockColor { Color = BlockColors.Blue, Darkness = 8 }; + botColorMap[24] = new BlockColor { Color = BlockColors.Aqua, Darkness = 8 }; + botColorMap[25] = new BlockColor { Color = BlockColors.Blue, Darkness = 7 }; + botColorMap[26] = new BlockColor { Color = BlockColors.White, Darkness = 5 }; + botColorMap[27] = new BlockColor { Color = BlockColors.White, Darkness = 4 }; + botColorMap[28] = new BlockColor { Color = BlockColors.Aqua, Darkness = 4 }; + botColorMap[29] = new BlockColor { Color = BlockColors.Purple, Darkness = 8 }; + // purples & pinks + botColorMap[30] = new BlockColor { Color = BlockColors.Pink, Darkness = 0 }; + botColorMap[8] = new BlockColor { Color = BlockColors.Pink, Darkness = 5 }; + botColorMap[31] = new BlockColor { Color = BlockColors.Pink, Darkness = 4 }; + botColorMap[15] = new BlockColor { Color = BlockColors.Red, Darkness = 3 }; + } } } diff --git a/Pixi/Robots/CubeUtility.cs b/Pixi/Robots/CubeUtility.cs index 6c27a1b..38f4e61 100644 --- a/Pixi/Robots/CubeUtility.cs +++ b/Pixi/Robots/CubeUtility.cs @@ -186,143 +186,11 @@ namespace Pixi.Robots [MethodImpl(MethodImplOptions.AggressiveInlining)] private static void TranslateBlockColour(byte colour, ref CubeInfo result) { - // I hope these colours are accurate, I just guessed - // TODO colour accuracy (lol that won't ever happen) - switch (colour) - { - case 0: - result.color = BlockColors.White; - result.darkness = 0; - break; - case 1: - result.color = BlockColors.White; - result.darkness = 5; - break; - case 2: - result.color = BlockColors.Orange; - result.darkness = 0; - break; - case 3: - result.color = BlockColors.Blue; - result.darkness = 2; - break; - case 4: - result.color = BlockColors.White; - result.darkness = 8; - break; - case 5: - result.color = BlockColors.Red; - result.darkness = 0; - break; - case 6: - result.color = BlockColors.Yellow; - result.darkness = 0; - break; - case 7: - result.color = BlockColors.Green; - result.darkness = 0; - break; - case 8: - result.color = BlockColors.Purple; - result.darkness = 0; - break; - case 9: - result.color = BlockColors.Blue; - result.darkness = 7; - break; - case 10: - result.color = BlockColors.Purple; - result.darkness = 5; - break; - case 11: - result.color = BlockColors.Orange; - result.darkness = 7; - break; - case 12: - result.color = BlockColors.Green; - result.darkness = 3; - break; - case 13: - result.color = BlockColors.Green; - result.darkness = 2; - break; - case 14: - result.color = BlockColors.Pink; - result.darkness = 3; - break; - case 15: - result.color = BlockColors.Pink; - result.darkness = 2; - break; - case 16: - result.color = BlockColors.Red; - result.darkness = 2; - break; - case 17: - result.color = BlockColors.Orange; - result.darkness = 8; - break; - case 18: - result.color = BlockColors.Red; - result.darkness = 7; - break; - case 19: - result.color = BlockColors.Pink; - result.darkness = 0; - break; - case 20: - result.color = BlockColors.Yellow; - result.darkness = 2; - break; - case 21: - result.color = BlockColors.Green; - result.darkness = 7; - break; - case 22: - result.color = BlockColors.Green; - result.darkness = 8; - break; - case 23: - result.color = BlockColors.Blue; - result.darkness = 8; - break; - case 24: - result.color = BlockColors.Aqua; - result.darkness = 7; - break; - case 25: - result.color = BlockColors.Blue; - result.darkness = 6; - break; - case 26: - result.color = BlockColors.Aqua; - result.darkness = 5; - break; - case 27: - result.color = BlockColors.Blue; - result.darkness = 4; - break; - case 28: - result.color = BlockColors.Aqua; - result.darkness = 3; - break; - case 29: - result.color = BlockColors.Blue; - result.darkness = 5; - break; - case 30: - result.color = BlockColors.Purple; - result.darkness = 3; - break; - case 31: - result.color = BlockColors.Purple; - result.darkness = 1; - break; - default: - result.color = BlockColors.Aqua; - result.darkness = 0; - break; - } + // I hope these colours are accurate, I just guessed + // TODO colour accuracy (lol that won't ever happen) + BlockColor c = ColorSpaceUtility.QuantizeToBlockColor(colour); + result.color = c.Color; + result.darkness = c.Darkness; } [MethodImpl(MethodImplOptions.AggressiveInlining)]