From 137d40d96fe923600d8378b8e138e3c276f27ff4 Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 4 Nov 2023 16:31:33 +0000 Subject: [PATCH] small compression --- network_compression.h | 6 ++++-- player_walk.c | 18 ++++++++++++++---- player_walk.h | 3 ++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/network_compression.h b/network_compression.h index 6ef08f9..2c000b7 100644 --- a/network_compression.h +++ b/network_compression.h @@ -34,18 +34,20 @@ static void bitpack_bytes( bitpack_ctx *ctx, u32 bytes, void *data ){ ctx->bytes += bytes; } -static void bitpack_qf32( bitpack_ctx *ctx, u32 bits, - f32 min, f32 max, f32 *v ){ +static u32 bitpack_qf32( bitpack_ctx *ctx, u32 bits, + f32 min, f32 max, f32 *v ){ u32 mask = (0x1 << bits) - 1; if( ctx->mode == k_bitpack_compress ){ u32 a = vg_quantf( *v, bits, min, max ); bitpack_bytes( ctx, bits/8, &a ); + return a; } else { u32 a = 0; bitpack_bytes( ctx, bits/8, &a ); *v = vg_dequantf( a, bits, min, max ); + return a; } } diff --git a/player_walk.c b/player_walk.c index 7d3093d..7d09f15 100644 --- a/player_walk.c +++ b/player_walk.c @@ -228,6 +228,9 @@ static int player_walk_scan_for_drop_in(void){ 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, @@ -911,6 +914,11 @@ static void player__walk_pose( void *_animator, player_pose *pose ){ 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; @@ -1044,9 +1052,6 @@ static void player__walk_animator_exchange( bitpack_ctx *ctx, void *data ){ bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->run ); bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->walk ); bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->walk_timer ); - 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 ); for( int i=0; i<1; i++ ){ /* without this you get a warning from gcc. lol */ bitpack_bytes( ctx, 8, &animator->outro_type ); @@ -1058,6 +1063,11 @@ static void player__walk_animator_exchange( bitpack_ctx *ctx, void *data ){ } } - bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->sit_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 */ diff --git a/player_walk.h b/player_walk.h index 48be2ac..a8dd9fa 100644 --- a/player_walk.h +++ b/player_walk.h @@ -34,7 +34,8 @@ struct player_walk{ k_walk_outro_none, k_walk_outro_jump_to_air, k_walk_outro_drop_in, - k_walk_outro_regular + k_walk_outro_regular, + k_walk_outro_max } outro_type; double outro_start_time; -- 2.25.1