fix some errors
[carveJwlIkooP6JGAAIwe30JlM.git] / player_device_skate.h
index 62c21210b9bd29fd9e89950ec57058c54fe51b59..5370c291d7e98b384b99cfa156f9e50e9f414666 100644 (file)
@@ -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 */