ray_hit *ray = &samples[ sample_count ];
ray->dist = 2.0f;
- if( ray_world( world, pos, ray_dir, ray ) )
- {
+ if( ray_world( world, pos, ray_dir, ray, 0 ) ){
vg_line( pos, ray->pos, VG__RED );
vg_line_point( ray->pos, 0.025f, VG__BLACK );
ray_hit ray;
ray.dist = k_board_length*2.0f + 0.6f;
- if( ray_world( world, va, v0, &ray ) )
- {
+ if( ray_world( world, va, v0, &ray, 0 ) ){
vg_line( va, vb, VG__RED );
vg_line_point( ray.pos, 0.1f, VG__RED );
vg_error( "invalidated\n" );
}
v3_muls( v0, -1.0f, v0 );
- if( ray_world( world, vb, v0, &ray ) )
- {
+ if( ray_world( world, vb, v0, &ray, 0 ) ){
vg_line( va, vb, VG__RED );
vg_line_point( ray.pos, 0.1f, VG__RED );
vg_error( "invalidated\n" );
enum walk_activity prev_state = w->state.activity;
- if( player->immobile )
- return;
-
w->collider.height = 2.0f;
w->collider.radius = 0.3f;
v2f steer;
joystick_state( k_srjoystick_steer, steer );
- w->move_speed = v2_length( steer );
+ w->move_speed = player->immobile? 0.0f: v2_length( steer );
/*
* Collision detection
*/
len = rb_capsule__scene( mtx, &w->collider, NULL,
- &world->rb_geo.inf.scene, manifold );
+ &world->rb_geo.inf.scene, manifold, 0 );
player_walk_custom_filter( world, manifold, len, 0.01f );
len = rb_manifold_apply_filtered( manifold, len );
v3f n;
float t;
- if( spherecast_world( world, pa, pb, w->collider.radius, &t, n ) != -1 ){
+ if( spherecast_world( world, pa, pb,
+ w->collider.radius, &t, n, 0 ) != -1 ){
if( player_walk_normal_standable( player, n ) ){
v3_lerp( pa, pb, t, player->rb.co );
v3_muladds( player->rb.co, player->basis[1],
player->rb.v );
}
+ if( player->immobile ){
+ player->rb.v[0] = 0.0f;
+ player->rb.v[2] = 0.0f;
+ }
+
v3_muladds( player->rb.co, player->rb.v, k_rb_delta, player->rb.co );
v3_add( player->rb.co, player->basis[1], mtx[3] );
vg_line_capsule( mtx, w->collider.radius, w->collider.height, VG__GREEN );
float t, sr = w->collider.radius-0.04f;
v3f n;
- if( spherecast_world( world, lwr_prev, lwr_now, sr, &t, n ) != -1 ){
+ if( spherecast_world( world, lwr_prev, lwr_now, sr, &t, n, 0 ) != -1 ){
v3_lerp( lwr_prev, lwr_now, vg_maxf(0.01f,t), player->rb.co );
player->rb.co[1] -= w->collider.radius;
rb_update_transform( &player->rb );
v3_add( player->rb.co, player->basis[1], mtx[3] );
- vg_line_capsule( mtx, w->collider.radius, w->collider.height, VG__RED );
+ vg_line_capsule( mtx, w->collider.radius, w->collider.height, VG__RED);
}
}