a fairly major physics update
[carveJwlIkooP6JGAAIwe30JlM.git] / player.h
index 2325f72e5c3fc71f38093f5d0851d62d45b8eb51..0e92f3aae5d6f5038bcd7703adb0c046c731844a 100644 (file)
--- a/player.h
+++ b/player.h
@@ -194,17 +194,28 @@ VG_STATIC struct gplayer
       struct ragdoll_part
       {
          u32 bone_id;
-         v3f offset;
+         //v3f offset;
+         
+         /* Collider transform relative to bone */
+         m4x3f collider_mtx,
+               inv_collider_mtx;
 
          u32 use_limits;
          v3f limits[2];
 
          rigidbody  rb;
          u32 parent;
+         u32 colour;
       }
       ragdoll[32];
       u32 ragdoll_count;
 
+      rb_constr_pos  position_constraints[32];
+      u32            position_constraints_count;
+
+      rb_constr_swingtwist cone_constraints[32];
+      u32                  cone_constraints_count;
+
       int shoes[2];
    }
    mdl;
@@ -241,6 +252,8 @@ VG_STATIC void player_mouseview(void);
  *                                    Events
  * -----------------------------------------------------------------------------
  */
+VG_STATIC int kill_player( int argc, char const *argv[] );
+VG_STATIC int reset_player( int argc, char const *argv[] );
 
 VG_STATIC void player_init(void)                                         /* 1 */
 {
@@ -364,11 +377,51 @@ VG_STATIC void player_init(void)                                         /* 1 */
       .persistent = 1
    });
 
+   vg_convar_push( (struct vg_convar){
+      .name = "k_ragdoll_limit_scale",
+      .data = &k_ragdoll_limit_scale,
+      .data_type = k_convar_dtype_f32,
+      .opt_f32 = { .clamp = 0 },
+      .persistent = 1
+   });
+
+   vg_convar_push( (struct vg_convar){
+      .name = "k_ragdoll_div",
+      .data = &k_ragdoll_div,
+      .data_type = k_convar_dtype_i32,
+      .opt_i32 = { .clamp=0 },
+      .persistent = 1
+   });
+
+   vg_convar_push( (struct vg_convar){
+      .name = "k_ragdoll_debug_collider",
+      .data = &k_ragdoll_debug_collider,
+      .data_type = k_convar_dtype_i32,
+      .opt_i32 = { .clamp=0 },
+      .persistent = 1
+   });
+
+   vg_convar_push( (struct vg_convar){
+      .name = "k_ragdoll_debug_constraints",
+      .data = &k_ragdoll_debug_constraints,
+      .data_type = k_convar_dtype_i32,
+      .opt_i32 = { .clamp=0 },
+      .persistent = 1
+   });
+
        vg_function_push( (struct vg_cmd){
                .name = "reset",
                .function = reset_player
        });
 
+       vg_function_push( (struct vg_cmd){
+               .name = "kill",
+               .function = kill_player
+       });
+
+   /* HACK */
+   rb_register_cvar();
+
    player.rewind_length = 0;
    player.rewind_buffer = 
       vg_linear_alloc( vg_mem.rtmemory,