latest
[carveJwlIkooP6JGAAIwe30JlM.git] / rigidbody.h
index f4d6ef9ccf0e1c5336087ba135b7fcde726118b6..d39cf1b6012926941f63860c8e441927f160bc4b 100644 (file)
@@ -43,24 +43,24 @@ VG_STATIC float
 
 VG_STATIC void rb_register_cvar(void)
 {
-   vg_convar_push( (struct vg_convar){
+   vg_var_push( (struct vg_var){
       .name = "k_limit_bias", .data = &k_limit_bias,
-      .data_type = k_convar_dtype_f32, .opt_f32 = {.clamp = 0}, .persistent = 1
+      .data_type = k_var_dtype_f32, .opt_f32 = {.clamp = 0}, .persistent = 1
    });
 
-   vg_convar_push( (struct vg_convar){
+   vg_var_push( (struct vg_var){
       .name = "k_joint_bias", .data = &k_joint_bias,
-      .data_type = k_convar_dtype_f32, .opt_f32 = {.clamp = 0}, .persistent = 1
+      .data_type = k_var_dtype_f32, .opt_f32 = {.clamp = 0}, .persistent = 1
    });
 
-   vg_convar_push( (struct vg_convar){
+   vg_var_push( (struct vg_var){
       .name = "k_joint_correction", .data = &k_joint_correction,
-      .data_type = k_convar_dtype_f32, .opt_f32 = {.clamp = 0}, .persistent = 1
+      .data_type = k_var_dtype_f32, .opt_f32 = {.clamp = 0}, .persistent = 1
    });
 
-   vg_convar_push( (struct vg_convar){
+   vg_var_push( (struct vg_var){
       .name = "k_joint_impulse", .data = &k_joint_impulse,
-      .data_type = k_convar_dtype_f32, .opt_f32 = {.clamp = 0}, .persistent = 1
+      .data_type = k_var_dtype_f32, .opt_f32 = {.clamp = 0}, .persistent = 1
    });
 }
 
@@ -2350,6 +2350,21 @@ VG_STATIC void rb_correct_swingtwist_constraints( rb_constr_swingtwist *buf,
    }
 }
 
+VG_STATIC void rb_correct_contact_constraints( rb_ct *buf, int len, float amt )
+{
+   for( int i=0; i<len; i++ )
+   {
+      rb_ct *ct = &buf[i];
+      rigidbody *rba = ct->rba,
+                *rbb = ct->rbb;
+
+      float mass_total = 1.0f / (rba->inv_mass + rbb->inv_mass);
+
+      v3_muladds( rba->co, ct->n, -mass_total * rba->inv_mass, rba->co );
+      v3_muladds( rbb->co, ct->n,  mass_total * rbb->inv_mass, rbb->co );
+   }
+}
+
 
 /* 
  * Effectors