- int rdir = (p->dir + 1) & 3;
- p->cx += step[p->dir][0] * fwd + step[rdir][0] * right;
- p->cy += step[p->dir][1] * fwd + step[rdir][1] * right;
+ int fdir, rdir;
+ float angle;
+ cgm_vec3 vdir = {0, 0, -1};
+
+ cgm_vmul_m3v3(&vdir, p->view_xform);
+
+ angle = atan2(vdir.z, vdir.x) + 3.0 * M_PI;
+ fdir = (p->dir + (int)(2.0 * angle / M_PI)) & 3;
+
+ rdir = (fdir + 1) & 3;
+ p->cx += step[fdir][0] * fwd + step[rdir][0] * right;
+ p->cy += step[fdir][1] * fwd + step[rdir][1] * right;