better physics
[carveJwlIkooP6JGAAIwe30JlM.git] / player.h
index 972807b7a9892c1c09caedddd7a3b5a831023d2e..c8c9abc54b8932ecd480838014a44001ca9c4dfb 100644 (file)
--- a/player.h
+++ b/player.h
@@ -14,7 +14,7 @@
 #include "bvh.h"
 
 VG_STATIC float 
-   k_walkspeed             = 20.0f,  /* no longer used */
+   k_walkspeed             = 12.0f,  /* no longer used */
    k_runspeed              = 20.0f,
    k_board_radius          = 0.3f,
    k_board_length          = 0.45f,
@@ -97,7 +97,8 @@ VG_STATIC struct gplayer
                         *input_emjs2v,
                         *input_jump,
                         *input_push,
-                        *input_walk,
+                        *input_walkh,
+                        *input_walkv,
                         *input_switch_mode,
                         *input_reset,
                         *input_grab;
@@ -203,6 +204,8 @@ VG_STATIC void player_save_rewind_frame(void);
 /* 
  * Submodules
  */
+VG_STATIC void player_mouseview(void);
+
 #include "player_physics.h"
 #include "player_ragdoll.h"
 #include "player_model.h"
@@ -226,21 +229,26 @@ VG_STATIC void player_init(void)                                            /* 1
    player.input_emjs2v = vg_create_named_input( "kbgrab-v", k_input_type_axis );
    player.input_jump = vg_create_named_input( "jump", k_input_type_button );
    player.input_push = vg_create_named_input( "push", k_input_type_axis_norm );
-   player.input_walk = vg_create_named_input( "walk", k_input_type_axis_norm );
+
+   player.input_walkh = vg_create_named_input( "walk-h", 
+                                               k_input_type_axis );
+   player.input_walkv = vg_create_named_input( "walk-v", 
+                                               k_input_type_axis );
+
+
    player.input_switch_mode = vg_create_named_input( "switch-mode",
                                                      k_input_type_button );
    player.input_reset = vg_create_named_input( "reset", k_input_type_button );
 
    const char *default_cfg[] = 
    {
-      "bind steer-h gp-ls-h",
       "bind  steer-h gp-ls-h",
       "bind -steer-h a",
       "bind +steer-h d",
 
       "bind  steer-v gp-ls-v",
-      "bind -steer-v s",
-      "bind +steer-v w",
+      "bind -steer-v w",
+      "bind +steer-v s",
 
       "bind grab gp-rt",
       "bind grab-h gp-rs-h",
@@ -256,9 +264,13 @@ VG_STATIC void player_init(void)                                            /* 1
 
       "bind  push gp-lt",
       "bind +push shift",
-
-      "bind  walk gp-lt",
-      "bind +walk w",
+      
+      "bind  walk-h gp-ls-h",
+      "bind  walk-v gp-ls-v",
+      "bind +walk-h d",
+      "bind -walk-h a",
+      "bind +walk-v w",
+      "bind -walk-v s",
 
       "bind reset gp-lb",
       "bind reset r",
@@ -287,7 +299,7 @@ VG_STATIC void player_init(void)                                            /* 1
       .data = &k_walkspeed,
       .data_type = k_convar_dtype_f32,
       .opt_f32 = { .clamp = 0 },
-      .persistent = 1
+      .persistent = 0
    });
 
    vg_convar_push( (struct vg_convar){
@@ -359,6 +371,18 @@ VG_STATIC void player_save_rewind_frame(void)
    }
 }
 
+/*
+ * Free camera movement
+ */
+VG_STATIC void player_mouseview(void)
+{
+   if( ui_want_mouse() )
+      return;
+
+   v2_muladds( player.angles, vg.mouse_delta, 0.0025f, player.angles );
+   player.angles[1] = vg_clampf( player.angles[1], -VG_PIf*0.5f, VG_PIf*0.5f );
+}
+
 /* Deal with input etc */
 VG_STATIC void player_update_pre(void)
 {
@@ -450,6 +474,9 @@ VG_STATIC void player_update_pre(void)
 
       audio_unlock();
    }
+
+   if( !phys->on_board )
+      player_mouseview();
 }
 
 VG_STATIC void player_update_fixed(void)                                    /* 2 */