… the insinuation that because of a different input device a circle is not composed of 2PI radians is just plain asinine.
Input methods have no relationship whatsoever with the amount of degrees you rotate something.
ergo, just make it so that your vector for shooting is rotated by a set amount.
And remember that you have the forward, right, and Up vector you can base the starting calculations on.
In your case, with only 8 directions you have an increment of 360/8 - or 45°.
In the case of gaining input data form the mouse, the situation is no different. You still increment and decrement a rotation value based on the current mouse position. You don’t need anything fancy, just to know if you are before/after the previous frame.