X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=character.h;h=df05295611492ecb41cbafafd266bf9623830c50;hb=86dbcd5796ed674ca9433cce1ace8bef322cd121;hp=3421d3a4df9117a648f5446182cf08811c3fa73a;hpb=344f0153cf1907da87dd041db3ec517325b1c429;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/character.h b/character.h index 3421d3a..df05295 100644 --- a/character.h +++ b/character.h @@ -4,8 +4,10 @@ #include "common.h" #include "model.h" #include "scene.h" +#include "world.h" #include "ik.h" #include "rigidbody.h" +#include "render.h" #include "shaders/character.h" vg_tex2d tex_pallet = { .path = "textures/ch_gradient.qoi" }; @@ -432,6 +434,7 @@ void character_pose_blend( struct character *ch, character_pose *pose, float q ) v3_muladds( ch->cam_pos, pose->cam, q, ch->cam_pos ); } +#if 1 static void character_final_pose( struct character *ch, v3f cog, character_pose *pose, float q ) @@ -464,6 +467,34 @@ void character_final_pose( struct character *ch, v3f cog, character_pose_blend( ch, &npose, q ); } +#else +static +void character_final_pose( struct character *ch, v4f rot, + character_pose *pose, float q ) +{ + character_pose npose; + + m4x3f tr; + q_m3x3( rot, tr ); + v3_zero( tr[3] ); + + m4x3_mulv( tr, pose->b0, npose.b0 ); + m4x3_mulv( tr, pose->b1, npose.b1 ); + m4x3_mulv( tr, pose->p, npose.p ); + m4x3_mulv( tr, pose->pl, npose.pl ); + m4x3_mulv( tr, pose->pr, npose.pr ); + m4x3_mulv( tr, pose->hl, npose.hl ); + m4x3_mulv( tr, pose->hr, npose.hr ); + m4x3_mulv( tr, pose->apl, npose.apl ); + m4x3_mulv( tr, pose->apr, npose.apr ); + + v3_copy( pose->fr, npose.fr ); + v3_copy( pose->fl, npose.fl ); + v3_copy( pose->cam, npose.cam ); + + character_pose_blend( ch, &npose, q ); +} +#endif static void character_yaw_upper( struct character *ch, float yaw ) { @@ -886,18 +917,7 @@ static void character_ragdoll_iter( struct character *ch ) for( int i=0; iragdoll[i] ); - - /* TODO: Cars, piece-to-piece collision */ -#if 0 - u32 colliders[16]; - int len = bh_select( &world.bhcubes, ch->ragdoll[i].bbx_world, - colliders, 16 ); - - for( int j=0; jragdoll[i], - &world.temp_rbs[colliders[j]] ); -#endif + rb_collide( &ch->ragdoll[i], &world.rb_geo ); } rb_presolve_contacts( rb_contact_buffer, rb_contact_count ); @@ -910,7 +930,7 @@ static void character_ragdoll_iter( struct character *ch ) shoe_vel[i] = v3_length( ch->ragdoll[i].v ); /* This used to be 20 iterations */ - for( int i=0; i<5; i++ ) + for( int i=0; i<10; i++ ) { float const k_springfactor = 1.0f/20.0f;