X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_device_skate.h;fp=player_device_skate.h;h=5370c291d7e98b384b99cfa156f9e50e9f414666;hb=c5b57b50f0a67361fa4c49feb05750d1cd0ae2ba;hp=62c21210b9bd29fd9e89950ec57058c54fe51b59;hpb=03aada77bbf0d268216a4ace0281ccb97ea9a409;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_device_skate.h b/player_device_skate.h index 62c2121..5370c29 100644 --- a/player_device_skate.h +++ b/player_device_skate.h @@ -1149,6 +1149,14 @@ VG_STATIC void player_skate_update( player_interface *player, skate_apply_air_model( player, s ); skate_integrate( player, s ); + + vg_line_pt3( s->state.cog, 0.1f, VG__WHITE ); + vg_line_pt3( s->state.cog, 0.11f, VG__WHITE ); + vg_line_pt3( s->state.cog, 0.12f, VG__WHITE ); + vg_line_pt3( s->state.cog, 0.13f, VG__WHITE ); + vg_line_pt3( s->state.cog, 0.14f, VG__WHITE ); + + vg_line( player->rb.co, s->state.cog, VG__RED ); } VG_STATIC void player_skate_post_update( player_interface *player, @@ -1211,6 +1219,9 @@ VG_STATIC void player_skate_pose( player_interface *player, v3f offset; v3_zero( offset ); + m4x3_mulv( player->rb.to_local, s->state.cog, offset ); + v3_muls( offset, -4.0f, offset ); + #if 0 m3x3_mulv( player.inv_visual_transform, phys->bob, offset ); #endif @@ -1428,7 +1439,7 @@ VG_STATIC void player_skate_get_camera( player_interface *player, look_dir; v3_copy( player->rb.v, vel_dir ); - v3_normalize( vel_dir ); + //v3_normalize( vel_dir ); float tti = s->land_dist; v3f norm; @@ -1440,12 +1451,11 @@ VG_STATIC void player_skate_get_camera( player_interface *player, v3_copy( player->rb.to_world[1], norm ); } - v3_muladds( vel_dir, norm, -v3_dot(vel_dir,norm), flat_dir ); - v3_normalize( flat_dir ); + //v3_normalize( flat_dir ); v3_lerp( flat_dir, vel_dir, vg_clampf( tti / 2.0f, 0.4f, 1.0f ), look_dir ); - v3_lerp( s->state.vl, look_dir, 8.0f*vg.time_delta, s->state.vl ); + v3_lerp( s->state.vl, look_dir, 4.0f*vg.time_delta, s->state.vl ); float *v = s->state.vl, yaw = atan2f( v[0], -v[2] ), @@ -1470,18 +1480,28 @@ VG_STATIC void player_skate_transport( player_interface *player, struct player_device_skate *s = at->storage; m4x3_mulv( gate->transport, player->rb.co, player->rb.co ); + m3x3_mulv( gate->transport, player->rb.v, player->rb.v ); m4x3_mulv( gate->transport, s->state.cog, s->state.cog ); m3x3_mulv( gate->transport, s->state.cog_v, s->state.cog_v ); - m3x3_mulv( gate->transport, player->rb.v, player->rb.v ); m3x3_mulv( gate->transport, s->state.vl, s->state.vl ); + m3x3_mulv( gate->transport, s->state.throw_v, s->state.throw_v ); v4f transport_rotation; m3x3_q( gate->transport, transport_rotation ); q_mul( transport_rotation, player->rb.q, player->rb.q ); + rb_update_transform( &player->rb ); s->state_gate_storage = s->state; } +VG_STATIC void player_skate_reset( player_interface *player, + player_attachment *at, + struct respawn_point *rp ) +{ + struct player_device_skate *s = at->storage; + v3_muladds( player->rb.co, player->rb.to_world[1], 1.0f, s->state.cog ); +} + VG_STATIC player_device player_device_skate = { .pre_update = player_skate_pre_update, @@ -1491,7 +1511,8 @@ VG_STATIC player_device player_device_skate = .debug_ui = player_skate_ui, .bind = player_skate_bind, .pose = player_skate_pose, - .gate_transport= player_skate_transport + .gate_transport= player_skate_transport, + .reset = player_skate_reset }; #endif /* PLAYER_DEVICE_SKATE_H */