private void SetClosestColor() { closestColor = GfxEffects.ClosestColor(building, myDebug); }
// closed match in RGB space public static MyGfx.ClosestColor ClosestColor(Building building, bool myDebug = false) { Color bColor = building.DrawColor; MyGfx.ClosestColor answer = MyGfx.ClosestColor.blue; int blueDiff, orangeDiff, purpleDiff; int minVal = 1000; int bColorRed = (int)(bColor.r * 256); int bColorGreen = (int)(bColor.g * 256); int bColorBlue = (int)(bColor.b * 256); blueDiff = ( Math.Abs(bColorRed - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.blue].r) / 3 + Math.Abs(bColorGreen - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.blue].g) / 2 + Math.Abs(bColorBlue - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.blue].b) ); orangeDiff = ( Math.Abs(bColorRed - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.orange].r) + Math.Abs(bColorGreen - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.orange].g) / 2 + Math.Abs(bColorBlue - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.orange].b) / 3 ); purpleDiff = ( Math.Abs(bColorRed - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.purple].r) + Math.Abs(bColorGreen - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.purple].g) / 3 + Math.Abs(bColorBlue - (int)MyGfx.ChosenColors[(int)MyGfx.ClosestColor.purple].b) / 2 ); Tools.Warn( "bColor: " + bColor + "; blue: " + MyGfx.ChosenColors[(int)MyGfx.ClosestColor.blue] + "; orange: " + MyGfx.ChosenColors[(int)MyGfx.ClosestColor.orange] + "; purple: " + MyGfx.ChosenColors[(int)MyGfx.ClosestColor.purple] , myDebug ); Tools.Warn( "blueDiff: " + blueDiff + "; orangeDiff: " + orangeDiff + "; purpleDiff: " + purpleDiff , myDebug ); if (blueDiff < minVal) { minVal = blueDiff; answer = MyGfx.ClosestColor.blue; } if (orangeDiff < minVal) { minVal = orangeDiff; answer = MyGfx.ClosestColor.orange; } if (purpleDiff < minVal) { minVal = purpleDiff; answer = MyGfx.ClosestColor.purple; } Tools.Warn("closest Color=" + answer, myDebug); return(answer); }