X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.c;h=1d690a088bab23a0e39225d9561d8ed167f597ae;hb=refs%2Fheads%2Frigidbody;hp=c115162099fb6d4b075ebcccb8f420b90eda5632;hpb=78cc452a8343821ba47c0905d755657847dafd25;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.c b/player.c index c115162..1d690a0 100644 --- a/player.c +++ b/player.c @@ -112,9 +112,14 @@ static void player__pre_update(void){ static void player__update(void){ if( player_subsystems[ localplayer.subsystem ]->update ) player_subsystems[ localplayer.subsystem ]->update(); + + if( localplayer.glider_orphan && + (skaterift.activity != k_skaterift_replay) ) + glider_physics( (v2f){0,0} ); } -static void player__post_update(void){ +static void player__post_update(void) +{ struct player_subsystem_interface *sys = player_subsystems[ localplayer.subsystem ]; @@ -128,7 +133,8 @@ static void player__post_update(void){ /* * Applies gate transport to a player_interface */ -static void player__pass_gate( u32 id ){ +static void player__pass_gate( u32 id ) +{ world_instance *world = world_current_instance(); skaterift_record_frame( &skaterift.replay, 1 ); @@ -151,20 +157,16 @@ static void player__pass_gate( u32 id ){ m4x3_mulv( gate->transport, localplayer.cam.pos, localplayer.cam.pos ); - if( gate->flags & k_ent_gate_nonlocal ){ - /* FIXME: Code dupe with world_load.c */ - ent_spawn *rp = world_find_spawn_by_name( world, "start" ); - if( !rp ) rp = world_find_closest_spawn( world, (v3f){0.0f,0.0f,0.0f} ); - /* TODO: fallback to searching for a safe location using raycasts */ - assert(rp); - v3_copy( rp->transform.co, world->player_co ); - + if( gate->flags & k_ent_gate_nonlocal ) + { + world_default_spawn_pos( world, world->player_co ); world_static.active_instance = gate->target; player__clean_refs(); replay_clear( &skaterift.replay ); } - else { + else + { world_routes_activate_entry_gate( world, gate ); } @@ -178,7 +180,8 @@ static void player__pass_gate( u32 id ){ audio_unlock(); } -static void player_apply_transport_to_cam( m4x3f transport ){ +static void player_apply_transport_to_cam( m4x3f transport ) +{ /* Pre-emptively edit the camera matrices so that the motion vectors * are correct */ m4x3f transport_i; @@ -194,7 +197,8 @@ static void player_apply_transport_to_cam( m4x3f transport ){ m4x4_mul( world_gates.cam.mtx.v, transport_4, world_gates.cam.mtx.v ); } -static void player__im_gui(void){ +static void player__im_gui(void) +{ if( !k_player_debug_info ) return; ui_rect box = { @@ -245,7 +249,7 @@ static void player__im_gui(void){ static void player__setpos( v3f pos ){ v3_copy( pos, localplayer.rb.co ); v3_zero( localplayer.rb.v ); - rb_update_transform( &localplayer.rb ); + rb_update_matrices( &localplayer.rb ); } static void player__clean_refs(void){ @@ -277,13 +281,15 @@ static void player__reset(void){ if( (l < 0.9f) || (l > 1.1f) ) q_identity( localplayer.rb.q ); - rb_update_transform( &localplayer.rb ); + rb_update_matrices( &localplayer.rb ); localplayer.subsystem = k_player_subsystem_walk; player__walk_reset(); localplayer.immobile = 0; localplayer.gate_waiting = NULL; + localplayer.have_glider = 0; + localplayer.glider_orphan = 0; v3_copy( localplayer.rb.co, localplayer.cam_control.tpv_lpf ); player__clean_refs(); @@ -377,6 +383,7 @@ static void player__networked_sfx( u8 system, u8 priority, u8 id, #include "player_skate.c" #include "player_dead.c" #include "player_drive.c" +#include "player_glide.c" #include "player_basic_info.c" #include "player_render.c"