static struct skeleton_anim *player_walk_outro_anim( enum walk_outro type ){
struct player_walk *w = &player_walk;
+ if( type >= k_walk_outro_max )
+ return NULL;
+
return (struct skeleton_anim *[]){
[k_walk_outro_none] = NULL,
[k_walk_outro_jump_to_air] = w->anim_jump_to_air,
{
f32 head_yaw = localplayer.angles[0] + VG_PIf,
y = vg_angle_diff( head_yaw, -walk_yaw ),
- mp = VG_PIf / 4.0f,
- p = vg_clampf( localplayer.angles[1], -mp, mp );
+ p = vg_clampf( localplayer.angles[1],
+ -k_sit_pitch_limit, k_sit_pitch_limit );
- if( fabsf(y) > VG_PIf/1.7f ){
+ if( fabsf(y) > k_sit_yaw_limit ){
y = 0.0f;
p = 0.0f;
}
if( animator->outro_type ){
struct skeleton_anim *anim = player_walk_outro_anim(animator->outro_type);
+
+ if( !anim ){
+ skeleton_copy_pose( sk, apose, pose->keyframes );
+ return;
+ }
f32 outro_length = (f32)anim->length / anim->rate,
outro_time = animator->outro_t*outro_length;
bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->walk );
bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->walk_timer );
- bitpack_bytes( ctx, 8, &animator->outro_type );
- if( animator->outro_type ){
- bitpack_bytes(ctx, sizeof(animator->foot_anchor), animator->foot_anchor );
- bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->outro_t );
- bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->commit_t );
+ for( int i=0; i<1; i++ ){ /* without this you get a warning from gcc. lol */
+ bitpack_bytes( ctx, 8, &animator->outro_type );
+ if( animator->outro_type ){
+ bitpack_bytes( ctx, sizeof(animator->foot_anchor),
+ animator->foot_anchor );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->outro_t );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->commit_t );
+ }
+ }
+
+ u32 code = bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->sit_t );
+ if( code ){
+ bitpack_qf32( ctx, 8, -k_sit_yaw_limit, k_sit_yaw_limit, &animator->yaw );
+ bitpack_qf32( ctx, 8, -k_sit_pitch_limit, k_sit_pitch_limit,
+ &animator->pitch );
}
}
#endif /* PLAYER_DEVICE_WALK_H */