alright heres a attempt i'm just gonna take in one camera angle but you can apply it to the other ones
public void UpdateCharacterAngle(ref KeyboardState keyboard, Body characterBody, ref Matrix cameraView)
int moveDirection = 0;
moveDirection -= 1;
moveDirection += 1;
pointingDirection = cameraView.Forward;
pointingDirection = cameraView.Right;
pointingDirection = cameraView.Left;
if((mag = pointingDirection.Length()) != 1.0f)
// bad matrix given.
Matrix orientation = Matrix.CreateWorld(Vector3.Zero, pointingDirection, Vector3.Up);
orientation.Translation = Vector.Zero;
characterBody.Orientation = orientation;
so calling that method in your code ( in like a update method would look like this )
UpdateCharacterAngle(ref keyboardState, myCharacter.PhysicsBody, ref activeCamera.ViewMatrix);
is possible that you might end up facing the oposite direction. if that happens do Matrix.Invert on the orientation local before sending it to orientation.
also its probably a better idea to use MoveTo on the body when you can and as little as you can (because it will set the body as active. if you set Orientation while the body is inactive you won't actually see the result untill its activated). so if your always setting the position of the body its probably a better idea to set this matrix orientation in as well.