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;
}
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,
/* 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) ){
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 );
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 );
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 );