projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
more tweaks
[carveJwlIkooP6JGAAIwe30JlM.git]
/
player_ragdoll.h
diff --git
a/player_ragdoll.h
b/player_ragdoll.h
index 497aedd09b87b349b5e29113864033074fd6620e..101d8f9c5850f488a5d7fe06162dfd7dca5b97db 100644
(file)
--- a/
player_ragdoll.h
+++ b/
player_ragdoll.h
@@
-9,10
+9,8
@@
#include "world.h"
#include "audio.h"
#include "world.h"
#include "audio.h"
-struct player_ragdoll
-{
- struct ragdoll_part
- {
+struct player_ragdoll{
+ struct ragdoll_part{
u32 bone_id;
/* Collider transform relative to bone */
u32 bone_id;
/* Collider transform relative to bone */
@@
-22,7
+20,7
@@
struct player_ragdoll
u32 use_limits;
v3f limits[2];
u32 use_limits;
v3f limits[2];
- r
igidbody rb
;
+ r
b_object obj
;
u32 parent;
u32 colour;
}
u32 parent;
u32 colour;
}
@@
-49,11
+47,11
@@
VG_STATIC void player_init_ragdoll_bone_collider( struct skeleton_bone *bone,
v3_muls( delta, 0.5f, delta );
v3_add( bone->hitbox[0], delta, rp->collider_mtx[3] );
v3_muls( delta, 0.5f, delta );
v3_add( bone->hitbox[0], delta, rp->collider_mtx[3] );
- v3_copy( delta, rp->rb.bbx[1] );
- v3_muls( delta, -1.0f, rp->rb.bbx[0] );
+ v3_copy( delta, rp->
obj.
rb.bbx[1] );
+ v3_muls( delta, -1.0f, rp->
obj.
rb.bbx[0] );
- q_identity( rp->rb.q );
- rp->
rb
.type = k_rb_shape_box;
+ q_identity( rp->
obj.
rb.q );
+ rp->
obj
.type = k_rb_shape_box;
rp->colour = 0xffcccccc;
}
else if( bone->collider == k_bone_collider_capsule ){
rp->colour = 0xffcccccc;
}
else if( bone->collider == k_bone_collider_capsule ){
@@
-84,22
+82,25
@@
VG_STATIC void player_init_ragdoll_bone_collider( struct skeleton_bone *bone,
v3_add( bone->hitbox[0], bone->hitbox[1], rp->collider_mtx[3] );
v3_muls( rp->collider_mtx[3], 0.5f, rp->collider_mtx[3] );
v3_add( bone->hitbox[0], bone->hitbox[1], rp->collider_mtx[3] );
v3_muls( rp->collider_mtx[3], 0.5f, rp->collider_mtx[3] );
- rp->
rb
.type = k_rb_shape_capsule;
- rp->
rb
.inf.capsule.height = l;
- rp->
rb
.inf.capsule.radius = r;
+ rp->
obj
.type = k_rb_shape_capsule;
+ rp->
obj
.inf.capsule.height = l;
+ rp->
obj
.inf.capsule.radius = r;
rp->colour = 0xff000000 | (0xff << (major_axis*8));
}
rp->colour = 0xff000000 | (0xff << (major_axis*8));
}
- else
+ else{
+ vg_warn( "type: %u\n", bone->collider );
vg_fatal_exit_loop( "Invalid bone collider type" );
vg_fatal_exit_loop( "Invalid bone collider type" );
+ }
m4x3_invert_affine( rp->collider_mtx, rp->inv_collider_mtx );
/* Position collider into rest */
m4x3_invert_affine( rp->collider_mtx, rp->inv_collider_mtx );
/* Position collider into rest */
- m3x3_q( rp->collider_mtx, rp->rb.q );
- v3_add( rp->collider_mtx[3], bone->co, rp->rb.co );
- rp->rb.is_world = 0;
- rb_init( &rp->rb );
+ m3x3_q( rp->collider_mtx, rp->obj.rb.q );
+ v3_add( rp->collider_mtx[3], bone->co, rp->obj.rb.co );
+ v3_zero( rp->obj.rb.v );
+ v3_zero( rp->obj.rb.w );
+ rb_init_object( &rp->obj );
}
/*
}
/*
@@
-130,7
+131,7
@@
VG_STATIC void player_setup_ragdoll_from_avatar( struct player_ragdoll *rd,
rd->position_constraints_count = 0;
rd->cone_constraints_count = 0;
rd->position_constraints_count = 0;
rd->cone_constraints_count = 0;
- for( u32 i=
0
; i<av->sk.bone_count; i ++ ){
+ for( u32 i=
1
; i<av->sk.bone_count; i ++ ){
struct skeleton_bone *bone = &av->sk.bones[i];
/*
struct skeleton_bone *bone = &av->sk.bones[i];
/*
@@
-166,8
+167,8
@@
VG_STATIC void player_setup_ragdoll_from_avatar( struct player_ragdoll *rd,
struct skeleton_bone *bp = &av->sk.bones[pp->bone_id];
/* Convention: rba -- parent, rbb -- child */
struct skeleton_bone *bp = &av->sk.bones[pp->bone_id];
/* Convention: rba -- parent, rbb -- child */
- c->rba = &pp->rb;
- c->rbb = &rp->rb;
+ c->rba = &pp->
obj.
rb;
+ c->rbb = &rp->
obj.
rb;
v3f delta;
v3_sub( bj->co, bp->co, delta );
v3f delta;
v3_sub( bj->co, bp->co, delta );
@@
-180,8
+181,8
@@
VG_STATIC void player_setup_ragdoll_from_avatar( struct player_ragdoll *rd,
struct rb_constr_swingtwist *a =
&rd->cone_constraints[ rd->cone_constraints_count ++ ];
struct rb_constr_swingtwist *a =
&rd->cone_constraints[ rd->cone_constraints_count ++ ];
- a->rba = &pp->rb;
- a->rbb = &rp->rb;
+ a->rba = &pp->
obj.
rb;
+ a->rbb = &rp->
obj.
rb;
a->conet = cosf( inf->conet )-0.0001f;
/* Store constraint in local space vectors */
a->conet = cosf( inf->conet )-0.0001f;
/* Store constraint in local space vectors */
@@
-216,7
+217,7
@@
VG_STATIC void copy_ragdoll_pose_to_avatar( struct player_ragdoll *rd,
struct ragdoll_part *part = &rd->parts[i];
m4x3f offset;
m3x3_identity(offset);
struct ragdoll_part *part = &rd->parts[i];
m4x3f offset;
m3x3_identity(offset);
- m4x3_mul( part->rb.to_world, part->inv_collider_mtx,
+ m4x3_mul( part->
obj.
rb.to_world, part->inv_collider_mtx,
av->sk.final_mtx[part->bone_id] );
}
av->sk.final_mtx[part->bone_id] );
}
@@
-254,16
+255,16
@@
VG_STATIC void copy_avatar_pose_to_ragdoll( struct player_avatar *av,
m4x3_mulv( av->sk.final_mtx[bone], av->sk.bones[bone].co, pos );
m3x3_mulv( av->sk.final_mtx[bone], part->collider_mtx[3], offset );
m4x3_mulv( av->sk.final_mtx[bone], av->sk.bones[bone].co, pos );
m3x3_mulv( av->sk.final_mtx[bone], part->collider_mtx[3], offset );
- v3_add( pos, offset, part->rb.co );
+ v3_add( pos, offset, part->
obj.
rb.co );
m3x3f r;
m3x3_mul( av->sk.final_mtx[bone], part->collider_mtx, r );
m3x3f r;
m3x3_mul( av->sk.final_mtx[bone], part->collider_mtx, r );
- m3x3_q( r, part->rb.q );
+ m3x3_q( r, part->
obj.
rb.q );
- v3_copy( velocity, part->rb.v );
- v3_zero( part->rb.w );
+ v3_copy( velocity, part->
obj.
rb.v );
+ v3_zero( part->
obj.
rb.w );
- rb_update_transform( &part->rb );
+ rb_update_transform( &part->
obj.
rb );
}
}
}
}
@@
-299,21
+300,21
@@
VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
int l;
int l;
- if( rd->parts[i].
rb
.type == k_rb_shape_capsule ){
- l = rb_capsule__scene( rd->parts[i].rb.to_world,
- &rd->parts[i].
rb
.inf.capsule,
+ if( rd->parts[i].
obj
.type == k_rb_shape_capsule ){
+ l = rb_capsule__scene( rd->parts[i].
obj.
rb.to_world,
+ &rd->parts[i].
obj
.inf.capsule,
NULL, &world->rb_geo.inf.scene, buf );
}
NULL, &world->rb_geo.inf.scene, buf );
}
- else if( rd->parts[i].
rb
.type == k_rb_shape_box ){
- l = rb_box__scene( rd->parts[i].rb.to_world,
- rd->parts[i].rb.bbx,
+ else if( rd->parts[i].
obj
.type == k_rb_shape_box ){
+ l = rb_box__scene( rd->parts[i].
obj.
rb.to_world,
+ rd->parts[i].
obj.
rb.bbx,
NULL, &world->rb_geo.inf.scene, buf );
}
else continue;
for( int j=0; j<l; j++ ){
NULL, &world->rb_geo.inf.scene, buf );
}
else continue;
for( int j=0; j<l; j++ ){
- buf[j].rba = &rd->parts[i].rb;
- buf[j].rbb = &world->rb_geo;
+ buf[j].rba = &rd->parts[i].
obj.
rb;
+ buf[j].rbb = &world->rb_geo
.rb
;
}
rb_contact_count += l;
}
rb_contact_count += l;
@@
-329,23
+330,23
@@
VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
if( !rb_global_has_space() )
break;
if( !rb_global_has_space() )
break;
- if( rd->parts[j].
rb
.type != k_rb_shape_capsule )
+ if( rd->parts[j].
obj
.type != k_rb_shape_capsule )
continue;
continue;
- if( rd->parts[i].
rb
.type != k_rb_shape_capsule )
+ if( rd->parts[i].
obj
.type != k_rb_shape_capsule )
continue;
rb_ct *buf = rb_global_buffer();
continue;
rb_ct *buf = rb_global_buffer();
- int l = rb_capsule__capsule( rd->parts[i].rb.to_world,
- &rd->parts[i].
rb
.inf.capsule,
- rd->parts[j].rb.to_world,
- &rd->parts[j].
rb
.inf.capsule,
+ int l = rb_capsule__capsule( rd->parts[i].
obj.
rb.to_world,
+ &rd->parts[i].
obj
.inf.capsule,
+ rd->parts[j].
obj.
rb.to_world,
+ &rd->parts[j].
obj
.inf.capsule,
buf );
for( int k=0; k<l; k++ ){
buf );
for( int k=0; k<l; k++ ){
- buf[k].rba = &rd->parts[i].rb;
- buf[k].rbb = &rd->parts[j].rb;
+ buf[k].rba = &rd->parts[i].
obj.
rb;
+ buf[k].rbb = &rd->parts[j].
obj.
rb;
}
rb_contact_count += l;
}
rb_contact_count += l;
@@
-358,8
+359,9
@@
VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
if( run_sim ){
v4f plane = {0.0f,1.0f,0.0f,0.0f};
if( run_sim ){
v4f plane = {0.0f,1.0f,0.0f,0.0f};
- rb_effect_simple_bouyency( &pj->rb, plane, k_ragdoll_floatyiness,
- k_ragdoll_floatydrag );
+ rb_effect_simple_bouyency( &pj->obj.rb, plane,
+ k_ragdoll_floatyiness,
+ k_ragdoll_floatydrag );
}
}
}
}
@@
-387,7
+389,7
@@
VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
*/
if( k_ragdoll_debug_collider ){
for( u32 i=0; i<rd->part_count; i ++ )
*/
if( k_ragdoll_debug_collider ){
for( u32 i=0; i<rd->part_count; i ++ )
- rb_
debug( &rd->parts[i].rb
, rd->parts[i].colour );
+ rb_
object_debug( &rd->parts[i].obj
, rd->parts[i].colour );
}
if( k_ragdoll_debug_constraints ){
}
if( k_ragdoll_debug_constraints ){
@@
-411,10
+413,10
@@
VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
}
for( int i=0; i<rd->part_count; i++ )
}
for( int i=0; i<rd->part_count; i++ )
- rb_iter( &rd->parts[i].rb );
+ rb_iter( &rd->parts[i].
obj.
rb );
for( int i=0; i<rd->part_count; i++ )
for( int i=0; i<rd->part_count; i++ )
- rb_update_transform( &rd->parts[i].rb );
+ rb_update_transform( &rd->parts[i].
obj.
rb );
rb_correct_swingtwist_constraints( rd->cone_constraints,
rd->cone_constraints_count, 0.25f );
rb_correct_swingtwist_constraints( rd->cone_constraints,
rd->cone_constraints_count, 0.25f );
@@
-433,7
+435,7
@@
VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
v3_sub( ct->co, ct->rba->co, ra );
v3_sub( ct->co, ct->rbb->co, rb );
rb_rcv( ct->rba, ct->rbb, ra, rb, rv );
v3_sub( ct->co, ct->rba->co, ra );
v3_sub( ct->co, ct->rbb->co, rb );
rb_rcv( ct->rba, ct->rbb, ra, rb, rv );
- float
vn = v3_dot( rv, ct->n );
+ float vn = v3_dot( rv, ct->n );
float s = fabsf(vn - contact_velocities[i]);
if( s > max_stress ){
float s = fabsf(vn - contact_velocities[i]);
if( s > max_stress ){