X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_dead.c;h=72eba265f443c92512051b77b485e41b6e15b030;hb=refs%2Fheads%2Fmenu2;hp=1f6087be079b30fe671ac9235b0d881ecfc0ad42;hpb=330eda0436ed73d6c68214fef8922904abe19422;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_dead.c b/player_dead.c index 1f6087b..43b6211 100644 --- a/player_dead.c +++ b/player_dead.c @@ -1,25 +1,43 @@ -#ifndef PLAYER_DEAD_C -#define PLAYER_DEAD_C - -#include "player.h" +#include "skaterift.h" +#include "player_dead.h" #include "gui.h" -static void player__dead_update(void){ +struct player_dead player_dead; +struct player_subsystem_interface player_subsystem_dead = { + .update = player__dead_update, + .post_update = player__dead_post_update, + .animate = player__dead_animate, + .pose = player__dead_pose, + .post_animate = player__dead_post_animate, + .im_gui = player__dead_im_gui, + .bind = player__dead_bind, + + .animator_data = &player_dead.animator, + .animator_size = sizeof(player_dead.animator), + .network_animator_exchange = player__dead_animator_exchange, + .name = "Dead" +}; + +void player__dead_update(void) +{ player_ragdoll_iter( &localplayer.ragdoll ); + + world_instance *world = world_current_instance(); + world_water_player_safe( world, 0.2f ); } -static void player__dead_post_update(void){ +void player__dead_post_update(void){ struct ragdoll_part *part = &localplayer.ragdoll.parts[ localplayer.id_hip-1 ]; struct player_dead *d = &player_dead; v3f ext_co; v4f ext_q; - rb_extrapolate( &part->obj.rb, ext_co, ext_q ); + rb_extrapolate( &part->rb, ext_co, ext_q ); v3_lerp( d->co_lpf, ext_co, vg.time_frame_delta*4.0f, d->co_lpf ); - v3_lerp( d->v_lpf, part->obj.rb.v, vg.time_frame_delta*4.0f, d->v_lpf ); - v3_lerp( d->w_lpf, part->obj.rb.w, vg.time_frame_delta*4.0f, d->w_lpf ); + v3_lerp( d->v_lpf, part->rb.v, vg.time_frame_delta*4.0f, d->v_lpf ); + v3_lerp( d->w_lpf, part->rb.w, vg.time_frame_delta*4.0f, d->w_lpf ); v3_copy( d->co_lpf, localplayer.rb.co ); v3_zero( localplayer.rb.v ); @@ -41,7 +59,7 @@ static void player__dead_post_update(void){ } } -static void player__dead_animate(void){ +void player__dead_animate(void){ struct player_dead *d = &player_dead; struct player_dead_animator *animator = &d->animator; struct player_ragdoll *rd = &localplayer.ragdoll; @@ -66,9 +84,9 @@ static void player__dead_animate(void){ v3f co_int; float substep = vg.time_fixed_extrapolate; - v3_lerp( part->prev_co, part->obj.rb.co, substep, co_int ); - q_nlerp( part->prev_q, part->obj.rb.q, substep, q_int ); - v4_copy( part->obj.rb.q, q_int ); + v3_lerp( part->prev_co, part->rb.co, substep, co_int ); + q_nlerp( part->prev_q, part->rb.q, substep, q_int ); + v4_copy( part->rb.q, q_int ); q_m3x3( q_int, mtx ); v3_copy( co_int, mtx[3] ); @@ -113,7 +131,8 @@ static void player__dead_animate(void){ } } -static void player__dead_pose( void *_animator, player_pose *pose ){ +void player__dead_pose( void *_animator, player_pose *pose ) +{ struct player_dead_animator *animator = _animator; struct player_ragdoll *rd = &localplayer.ragdoll; struct skeleton *sk = &localplayer.skeleton; @@ -131,39 +150,46 @@ static void player__dead_pose( void *_animator, player_pose *pose ){ } } -static void player__dead_post_animate(void){ +void player__dead_post_animate(void) +{ localplayer.cam_velocity_influence = 1.0f; } -static void player__dead_im_gui(void){ +void player__dead_im_gui( ui_context *ctx ) +{ } -static void player__dead_transition(void){ +void player__dead_transition( enum player_die_type type ) +{ + if( localplayer.subsystem == k_player_subsystem_dead ) + return; + localplayer.subsystem = k_player_subsystem_dead; - copy_localplayer_to_ragdoll( &localplayer.ragdoll, localplayer.rb.v ); + copy_localplayer_to_ragdoll( &localplayer.ragdoll, type ); struct ragdoll_part *part = &localplayer.ragdoll.parts[ localplayer.id_hip-1 ]; - v3_copy( part->obj.rb.co, player_dead.co_lpf ); - v3_copy( part->obj.rb.v, player_dead.v_lpf ); - v3_copy( part->obj.rb.w, player_dead.w_lpf ); + v3_copy( part->rb.co, player_dead.co_lpf ); + v3_copy( part->rb.v, player_dead.v_lpf ); + v3_copy( part->rb.w, player_dead.w_lpf ); gui_helper_clear(); vg_str str; struct gui_helper *h; if( (h = gui_new_helper(input_button_list[k_srbind_reset], &str) )){ - vg_strcat( &str, "rewind" ); + vg_strcat( &str, "Rewind" ); if( world_static.active_instance == k_world_purpose_hub ) h->greyed = 1; } if( gui_new_helper(input_button_list[k_srbind_dead_respawn], &str )) - vg_strcat( &str, "spawn" ); + vg_strcat( &str, "Spawn" ); } -static void player__dead_animator_exchange( bitpack_ctx *ctx, void *data ){ +void player__dead_animator_exchange( bitpack_ctx *ctx, void *data ) +{ struct player_dead_animator *animator = data; for( u32 i=0; i