static void player__update(void){
if( player_subsystems[ localplayer.subsystem ]->update )
player_subsystems[ localplayer.subsystem ]->update();
+
+ if( localplayer.glider_orphan )
+ 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 ];
/*
* 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 );
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 );
}
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;
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 = {
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){
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();
#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"