GOAR, я к тому, что это
if (degrees >= 22.5 && degrees < 67.5)
return Keys.LEFT_UP;
не имеет смысла, ты просто получаешь градус и передаёшь его в код, а уже там или обрезаешь его диапазон, или непосредственно оперируешь, например умножаешь на вектор движения. При этом думаю придётся привести его в диапазон -180...180 а затем нормализовать вектор