move audio comp to its own thing
[carveJwlIkooP6JGAAIwe30JlM.git] / player.c
index 74d56f30d08de71817844512a09c822eeb0508cb..c019f698484881551872ff89a171ecedfb1314de 100644 (file)
--- a/player.c
+++ b/player.c
 #include "ent_miniworld.h"
 #include "gui.h"
 
+#include "shaders/model_entity.h"
+#include "shaders/model_character_view.h"
+#include "shaders/model_board_view.h"
+
 static int localplayer_cmd_respawn( int argc, const char *argv[] ){
    ent_spawn *rp = NULL, *r;
    world_instance *world = world_current_instance();
@@ -50,6 +54,10 @@ static void player_init(void){
    vg_console_reg_var( "cinema_fixed", &k_cinema_fixed, k_var_dtype_i32, 0 );
    vg_console_reg_var( "invert_y", &k_invert_y, 
                         k_var_dtype_i32, VG_VAR_PERSISTENT );
+
+   shader_model_character_view_register();
+   shader_model_board_view_register();
+   shader_model_entity_register();
 }
 
 static void player__debugtext( int size, const char *fmt, ... ){
@@ -107,8 +115,14 @@ static void player__update(void){
 }
 
 static void player__post_update(void){
-   if( player_subsystems[ localplayer.subsystem ]->post_update )
-      player_subsystems[ localplayer.subsystem ]->post_update();
+   struct player_subsystem_interface *sys = 
+      player_subsystems[ localplayer.subsystem ];
+
+   if( sys->post_update ) sys->post_update();
+
+   SDL_AtomicLock( &air_data.sl );
+   air_data.speed = v3_length( localplayer.rb.v ) * vg.time_rate;
+   SDL_AtomicUnlock( &air_data.sl );
 }
 
 /*
@@ -116,6 +130,7 @@ static void player__post_update(void){
  */
 static void player__pass_gate( u32 id ){
    world_instance *world = world_current_instance();
+   skaterift_record_frame( &skaterift.replay, 1 );
 
    /* update boundary hash (network animation) */
    u16 index = mdl_entity_id_id(id) & ~NETMSG_BOUNDARY_MASK;
@@ -127,6 +142,7 @@ static void player__pass_gate( u32 id ){
    world_routes_fracture( world, gate, localplayer.rb.co, localplayer.rb.v );
 
    localplayer.gate_waiting = gate;
+   localplayer.deferred_frame_record = 1;
 
    struct player_cam_controller *cc = &localplayer.cam_control;
    m4x3_mulv( gate->transport, cc->tpv_lpf, cc->tpv_lpf );
@@ -145,9 +161,12 @@ static void player__pass_gate( u32 id ){
 
       world_static.active_instance = gate->target;
       player__clean_refs();
+
+      replay_clear( &skaterift.replay );
    }
-   else 
+   else {
       world_routes_activate_entry_gate( world, gate );
+   }
    
    v3f v0;
    v3_angles_vector( localplayer.angles, v0 );
@@ -157,13 +176,9 @@ static void player__pass_gate( u32 id ){
    audio_lock();
    audio_oneshot( &audio_gate_pass, 1.0f, 0.0f );
    audio_unlock();
-
-   replay_clear( &skaterift.replay );
 }
 
 static void player_apply_transport_to_cam( m4x3f transport ){
-   /* FIXME: Applies to skaterift.cam directly! */
-
    /* Pre-emptively edit the camera matrices so that the motion vectors 
     * are correct */
    m4x3f transport_i;
@@ -214,7 +229,7 @@ static void player__im_gui(void){
                                        [k_skaterift_replay]    = "replay",
                                        [k_skaterift_ent_focus] = "ent_focus",
                                        [k_skaterift_default]   = "default",
-                                       [k_skaterift_respawning]= "map"
+                                       [k_skaterift_world_map] = "world map"
                      } [skaterift.activity] );
    player__debugtext( 1, "time_rate: %.4f", skaterift.time_rate );