X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=physics_test.h;h=bd8bc073acaf68a392495b40ceac7765a12aa173;hb=55faf7fcd56fad190f53e6da4417c5bb1c2234d7;hp=8187b914ab39c5ddf5e19c6fed7a28b33212b946;hpb=84a7ae83a25966e0004a1a4b409dbb3d49fae286;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/physics_test.h b/physics_test.h index 8187b91..bd8bc07 100644 --- a/physics_test.h +++ b/physics_test.h @@ -9,6 +9,16 @@ rigidbody ground = { .type = k_rb_shape_box, .co = {0.0f, 0.0f, 0.0f}, .q = {0.0f,0.0f,0.0f,1.0f}, .is_world = 1 }; + +rigidbody blocky = + { + .type = k_rb_shape_box, + .bbx = {{-2.0f,-1.0f,-3.0f},{2.0f,1.0f,2.0f}}, + .co = {30.0f,2.0f,30.0f}, + .q = {0.0f,0.0f,0.0f,1.0f}, + .is_world = 1 + }; + rigidbody funnel[4] = { { .type = k_rb_shape_box, @@ -36,6 +46,11 @@ rigidbody funnel[4] = { } }; +rigidbody jeff1 = { .type = k_rb_shape_capsule, + .inf.capsule = { .radius = 0.75f, .height = 3.0f }, + .co = {30.0f, 4.0f, 30.0f }, + .q = {0.0f,0.0f,0.0f,1.0f} +}; rigidbody ball = { .type = k_rb_shape_sphere, .inf.sphere = { .radius = 2.0f }, @@ -60,6 +75,8 @@ static void physics_test_start(void) rb_init( &ground ); rb_init( &ball ); rb_init( &ball1 ); + rb_init( &jeff1 ); + rb_init( &blocky ); } static void physics_test_update(void) @@ -71,6 +88,7 @@ static void physics_test_update(void) rb_iter( &ball ); rb_iter( &ball1 ); + rb_iter( &jeff1 ); rb_solver_reset(); @@ -84,21 +102,25 @@ static void physics_test_update(void) rb_contact_count += rb_sphere_vs_box( &ball1, &ground, rb_global_ct() ); rb_contact_count += rb_sphere_vs_sphere( &ball, &ball1, rb_global_ct() ); - rb_presolve_contacts(); + rb_contact_count += rb_capsule_vs_box( &jeff1, &ground, rb_global_ct() ); + rb_contact_count += rb_capsule_vs_box( &jeff1, &blocky, rb_global_ct() ); + + rb_presolve_contacts( rb_contact_buffer, rb_contact_count ); for( int i=0; i<5; i++ ) - rb_solve_contacts(); + rb_solve_contacts( rb_contact_buffer, rb_contact_count ); rb_update_transform( &ball ); rb_update_transform( &ball1 ); + rb_update_transform( &jeff1 ); } if(glfwGetKey( vg_window, GLFW_KEY_L )) { - v3_copy( player.camera_pos, ball.co ); - v3_zero( ball.v ); - v3_zero( ball.w ); + v3_copy( player.camera_pos, jeff1.co ); + v3_zero( jeff1.v ); + v3_zero( jeff1.w ); } for( int i=0; i<4; i++ ) @@ -106,6 +128,9 @@ static void physics_test_update(void) rb_debug( &ground, 0xff00ff00 ); rb_debug( &ball, 0xffe00040 ); rb_debug( &ball1, 0xff00e050 ); + + rb_debug( &blocky, 0xffcccccc ); + rb_debug( &jeff1, 0xff00ffff ); } static void physics_test_render(void) @@ -113,7 +138,7 @@ static void physics_test_render(void) m4x4f world_4x4; m4x3_expand( player.camera_inverse, world_4x4 ); - gpipeline.fov = freecam? 60.0f: 135.0f; /* 120 */ + gpipeline.fov = 60.0f; m4x4_projection( vg_pv, gpipeline.fov, (float)vg_window_x / (float)vg_window_y, 0.1f, 2100.0f );