+#define STEP_INTERVAL 250
+#define TURN_INTERVAL 500
+
+void update(float dt)
+{
+ int fwd = 0, right = 0, turn = 0;
+
+ /*
+ cgm_vec3 vdir = {0, 0, -1};
+
+ cgm_vmul_m3v3(&vdir, player.view_xform);
+
+ player.dir = (int)(2.0f * (-atan2(vdir.z, vdir.x) + M_PI) / M_PI + 0.5f) & 3;
+ */
+
+ if(time_msec - prev_turn >= TURN_INTERVAL) {
+ if(input_state[INP_LTURN]) turn--;
+ if(input_state[INP_RTURN]) turn++;
+
+ if(turn) {
+ turn_player(&player, turn);
+ prev_turn = time_msec;
+ }
+ }
+
+ if(time_msec - prev_step >= STEP_INTERVAL) {
+ if(input_state[INP_FWD]) fwd++;
+ if(input_state[INP_BACK]) fwd--;
+ if(input_state[INP_LEFT]) right--;
+ if(input_state[INP_RIGHT]) right++;
+
+ if(fwd | right) {
+ move_player(&player, right, fwd);
+ prev_step = time_msec;
+ }
+ }
+
+ upd_player_xform(&player);
+}
+