X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=rigidbody.h;h=026d8676dbd0cbccab6b7174c2a1498626ce2e77;hb=86dbcd5796ed674ca9433cce1ace8bef322cd121;hp=05d2db1100fe78310d8a548691d99138c90a9d3a;hpb=4a883ac1b2506032f9dddab342712de46f2ca734;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/rigidbody.h b/rigidbody.h index 05d2db1..026d867 100644 --- a/rigidbody.h +++ b/rigidbody.h @@ -1860,6 +1860,23 @@ static void rb_constraint_position( rigidbody *ra, v3f lca, } } +/* + * Effectors + */ + +static void rb_effect_simple_bouyency( rigidbody *ra, v4f plane, + float amt, float drag ) +{ + /* float */ + float depth = v3_dot( plane, ra->co ) - plane[3], + lambda = vg_clampf( -depth, 0.0f, 1.0f ) * amt; + + v3_muladds( ra->v, plane, lambda * ktimestep, ra->v ); + + if( depth < 0.0f ) + v3_muls( ra->v, 1.0f-(drag*ktimestep), ra->v ); +} + /* * ----------------------------------------------------------------------------- * BVH implementation, this is ONLY for static rigidbodies, its to slow for