- if( s->state.activity <= k_skate_activity_air_to_grind )
- s->blend_fly = 1.0f;
- else
- s->blend_fly = 0.0f;
-
- s->blend_slide = 0.0f;
- s->blend_z = 0.0f;
- s->blend_x = 0.0f;
- s->blend_grind = 0.0f;
- s->blend_grind_balance = 0.0f;
- s->blend_stand = 0.0f;
- s->blend_push = 0.0f;
- s->blend_jump = 0.0f;
- s->blend_airdir = 0.0f;
- s->blend_weight = 0.0f;
- s->subslap = 0.0f;
- v2_zero( s->wobble );
-
- v3_zero( s->board_trick_residuald );
- v3_zero( s->board_trick_residualv );
- v3_zero( s->truckv0[0] );
- v3_zero( s->truckv0[1] );
-}
-
-VG_STATIC void player__skate_clear_mechanics( player_instance *player )
-{
- struct player_skate *s = &player->_skate;
- s->state.jump_charge = 0.0f;
- s->state.charging_jump = 0;
- s->state.jump_dir = 0;
- v3_zero( s->state.flip_axis );
- s->state.flip_time = 0.0f;
- s->state.flip_rate = 0.0f;
- s->state.reverse = 0.0f;
- s->state.slip = 0.0f;
- s->state.grabbing = 0.0f;
- v2_zero( s->state.grab_mouse_delta );
- s->state.slap = 0.0f;
- s->state.jump_time = 0.0;
- s->state.start_push = 0.0;
- s->state.cur_push = 0.0;
- s->state.air_start = 0.0;
-
- v3_zero( s->state.air_init_v );
- v3_zero( s->state.air_init_co );
-
- s->state.gravity_bias = k_gravity;
- v3_copy( player->rb.co, s->state.prev_pos );
- v4_copy( player->rb.q, s->state.smoothed_rotation );
- v3_zero( s->state.throw_v );
- v3_zero( s->state.trick_vel );
- v3_zero( s->state.trick_euler );
- v3_zero( s->state.cog_v );
- s->grind_cooldown = 0;
- s->surface_cooldown = 0;
- v3_muladds( player->rb.co, player->rb.to_world[1], 1.0f, s->state.cog );
- v3_copy( player->rb.to_world[1], s->state.up_dir );
- v3_copy( player->rb.to_world[1], s->surface_picture );
- v3_zero( s->weight_distribution );
- v3_copy( player->rb.co, s->state.prev_pos );
+static void player__skate_animator_exchange( bitpack_ctx *ctx, void *data ){
+ struct player_skate_animator *animator = data;
+
+ bitpack_qv3f( ctx, 24, -1024.0f, 1024.0f, animator->root_co );
+ bitpack_qquat( ctx, animator->root_q );
+
+ bitpack_qv3f( ctx, 8, -1.0f, 1.0f, animator->offset );
+ bitpack_qv3f( ctx, 8, -1.0f, 1.0f, animator->local_cog );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->slide );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->z );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->x );
+
+ /* these could likely be pressed down into single bits if needed */
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->fly );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->grind );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->stand );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->push );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->jump ); /*??*/
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->jump_charge ); /*??*/
+
+ /* just the sign bit? */
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->reverse );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->delayed_slip_dir );
+ bitpack_bytes( ctx, 1, &animator->jump_dir );
+ bitpack_bytes( ctx, 1, &animator->trick_type );
+
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->grind_balance );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->airdir );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->weight );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->trick_foot );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->slap );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->subslap );
+ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->grabbing );
+
+ /* animator->wobble is ommited */
+
+ bitpack_qv2f( ctx, 8, -1.0f, 1.0f, animator->foot_offset );
+ bitpack_qquat( ctx, animator->qfixuptotal );
+ bitpack_qquat( ctx, animator->qflip );
+
+ bitpack_qv3f( ctx, 16, -100.0f, 100.0f, animator->board_euler );
+ bitpack_qf32( ctx, 8, -1.0f, 1.0f, &animator->board_lean );
+ bitpack_qv2f( ctx, 8, -1.0f, 1.0f, animator->steer );
+ bitpack_qv2f( ctx, 8, -1.0f, 1.0f, animator->grab );
+
+ bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->push_time );
+ bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->jump_time );