some gate improvements
[carveJwlIkooP6JGAAIwe30JlM.git] / player_skate.c
index fe34de2441ce6b3d40a5bbe5542b448fc5d2f4fa..baa1ce713116ed266d3afb00af5711b00bb0a99f 100644 (file)
@@ -499,7 +499,7 @@ void player__approximate_best_trajectory( player_instance *player )
                m4x3_mulv( gate->transport, launch_co, launch_co );
                m3x3_mul( gate->transport, basis, basis );
 
-               if( gate->type == k_gate_type_nonlocel ){
+               if( gate->flags & k_ent_gate_nonlocal ){
                   trace_world = &world_static.worlds[ gate->target ];
                }
             }
@@ -1110,12 +1110,12 @@ VG_STATIC void player__skate_pre_update( player_instance *player ){
       player->subsystem = k_player_subsystem_walk;
 
       v3f angles;
-      v3_copy( player->cam.angles, angles );
-      angles[2] = 0.0f;
+      v3_copy( player->cam.angles, player->angles );
+      player->angles[2] = 0.0f;
 
       player__begin_holdout( player );
       player__skate_kill_audio( player );
-      player__walk_transition( player, angles );
+      player__walk_transition( player );
       return;
    }
 
@@ -2773,6 +2773,19 @@ VG_STATIC void player__skate_animate( player_instance *player ){
    animator->board_euler[1] += extra;
    animator->trick_type = s->state.trick_type;
 
+   /* board lean */
+   f32 lean1, lean2 = animator->steer[0] * animator->reverse * -0.36f,
+       lean;
+
+   lean1 = animator->slide * animator->delayed_slip_dir;
+   if( fabsf(lean1)>fabsf(lean2) ) lean = lean1;
+   else                            lean = lean2;
+
+   if( ((int)roundf(animator->board_euler[0]/VG_PIf)) % 2 ) lean = -lean;
+   lean = vg_clampf( lean, -1.0f, 1.0f );
+   animator->board_lean = 
+      vg_lerpf(animator->board_lean, lean, vg.time_delta*18.0f);
+
    /* feet placement */
    struct player_board *board = 
       addon_cache_item_if_loaded( k_addon_type_board,
@@ -2811,6 +2824,10 @@ VG_STATIC void player__skate_animate( player_instance *player ){
    /* steer */
    joystick_state( k_srjoystick_steer, animator->steer );
 
+   animator->airdir = vg_lerpf( animator->airdir, -animator->steer[0],
+                                2.4f*vg.time_delta );
+      
+
    /* flip angle */
    if( (s->state.activity <= k_skate_activity_air_to_grind) &&
        (fabsf(s->state.flip_rate) > 0.01f) ){
@@ -2879,20 +2896,18 @@ VG_STATIC void player__skate_animate( player_instance *player ){
 
       vg_line_arrow( player->rb.co, p1, 0.25f, VG__PINK );
       vg_line_arrow( player->rb.co, p2, 0.25f, VG__PINK );
-
    }
    else q_identity( animator->qfixuptotal );
    q_identity( animator->qfixuptotal );
    rb_extrapolate( &player->rb, animator->root_co, animator->root_q );
 }
                         
-VG_STATIC void player__skate_pose( player_instance *player ){
+VG_STATIC void player__skate_pose( player_instance *player, player_pose *pose ){
    struct player_avatar *av = player->playeravatar;
    struct skeleton *sk = &av->sk;
    struct player_skate *s = &player->_skate;
    struct player_skate_animator *animator = &s->animator;
-   player_pose *pose = &player->pose;
-   pose->type = k_player_pose_type_fk;
+   pose->type = k_player_pose_type_ik;
    v3_copy( animator->root_co, pose->root_co );
    v4_copy( animator->root_q, pose->root_q );
 
@@ -2923,17 +2938,7 @@ VG_STATIC void player__skate_pose( player_instance *player ){
       f32 dir_frame   = animator->z * (15.0f/30.0f),
           stand_blend = animator->offset[1]*-2.0f;
 
-      f32 lean1,
-          lean2 = animator->steer[0] * animator->reverse * -0.36f,
-          lean;
-
-      lean1 = animator->slide * animator->delayed_slip_dir;
-      if( fabsf(lean1)>fabsf(lean2) ) lean = lean1;
-      else                            lean = lean2;
-
-      if( ((int)roundf(animator->board_euler[0])) % 2 ) lean = -lean;
-      lean = vg_clampf( lean, -1.0f, 1.0f );
-      pose->board.lean = vg_lerpf(pose->board.lean, lean, vg.time_delta*18.0f);
+      pose->board.lean = animator->board_lean;
 
       stand_blend = vg_clampf( 1.0f-animator->local_cog[1], 0, 1 );
 
@@ -2964,10 +2969,6 @@ VG_STATIC void player__skate_pose( player_instance *player ){
    
    mdl_keyframe air_pose[32];
    {
-      float target = -animator->steer[1];
-      animator->airdir = vg_lerpf( animator->airdir, target, 
-                                   2.4f*vg.time_delta );
-      
       float air_frame = (animator->airdir*0.5f+0.5f) * (15.0f/30.0f);
       skeleton_sample_anim( sk, s->anim_air, air_frame, apose );