X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=e119ffcffaac33ee553f5e3f99076324f8bf6dbf;hb=be6707a307bfeec1b45cca8b3fb647e81262be87;hp=a7831b7e3b982e6182903e3ff3fd51bed6b1a222;hpb=4f96bd0040e35ecb21d353ee2b895129682d22c1;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index a7831b7..e119ffc 100644 --- a/player.h +++ b/player.h @@ -13,7 +13,7 @@ #include "skeleton.h" #include "bvh.h" -static float +VG_STATIC float k_walkspeed = 20.0f, /* no longer used */ k_runspeed = 20.0f, k_board_radius = 0.3f, @@ -38,9 +38,10 @@ static float k_walk_accel = 150.0f, k_walk_friction = 8.0f; -static int freecam = 0; -static int walk_grid_iterations = 1; -static float fc_speed = 10.0f; +VG_STATIC int cl_playermdl_id = 0; +VG_STATIC int freecam = 0; +VG_STATIC int walk_grid_iterations = 1; +VG_STATIC float fc_speed = 10.0f; /* * ----------------------------------------------------------------------------- @@ -48,7 +49,7 @@ static float fc_speed = 10.0f; * ----------------------------------------------------------------------------- */ -static struct gplayer +VG_STATIC struct gplayer { /* Physics */ rigidbody collide_front, collide_back; @@ -127,7 +128,9 @@ static struct gplayer /* player model */ struct player_model { - glmesh mesh; + glmesh player_meshes[3]; + + mdl_context meta; struct skeleton sk; struct skeleton_anim *anim_stand, *anim_highg, @@ -159,7 +162,7 @@ static struct gplayer rigidbody rb; u32 parent; } - *ragdoll; + ragdoll[32]; u32 ragdoll_count; int shoes[2]; @@ -175,12 +178,12 @@ player = /* * API */ -static float *player_get_pos(void); -static void player_kill(void); -static float *player_cam_pos(void); -static void player_save_frame(void); -static void player_restore_frame(void); -static void player_save_rewind_frame(void); +VG_STATIC float *player_get_pos(void); +VG_STATIC void player_kill(void); +VG_STATIC float *player_cam_pos(void); +VG_STATIC void player_save_frame(void); +VG_STATIC void player_restore_frame(void); +VG_STATIC void player_save_rewind_frame(void); /* * Submodules @@ -197,12 +200,20 @@ static void player_save_rewind_frame(void); * ----------------------------------------------------------------------------- */ -static void player_init(void) /* 1 */ +VG_STATIC void player_init(void) /* 1 */ { rb_init( &player.phys.rb ); rb_init( &player.collide_front ); rb_init( &player.collide_back ); + vg_convar_push( (struct vg_convar){ + .name = "cl_playermdl_id", + .data = &cl_playermdl_id, + .data_type = k_convar_dtype_i32, + .opt_i32 = { .min=0, .max=2, .clamp=1 }, + .persistent = 1 + }); + vg_convar_push( (struct vg_convar){ .name = "walk_speed", .data = &k_walkspeed, @@ -249,14 +260,14 @@ static void player_init(void) /* 1 */ }); player.rewind_length = 0; - player.rewind_buffer = vg_alloc( sizeof(struct rewind_frame) - * PLAYER_REWIND_FRAMES ); + player.rewind_buffer = + vg_linear_alloc( vg_mem.rtmemory, + sizeof(struct rewind_frame) * PLAYER_REWIND_FRAMES ); - /* other systems */ - vg_loader_highwater( player_model_init, player_model_free, NULL ); + player_model_init(); } -static void player_save_rewind_frame(void) +VG_STATIC void player_save_rewind_frame(void) { if( player.rewind_length < PLAYER_REWIND_FRAMES ) { @@ -278,7 +289,7 @@ static void player_save_rewind_frame(void) } /* Deal with input etc */ -static void player_update_pre(void) +VG_STATIC void player_update_pre(void) { struct player_phys *phys = &player.phys; @@ -289,9 +300,9 @@ static void player_update_pre(void) if( vg_get_button_down( "reset" ) ) { - double delta = world_routes.time - world_routes.last_use; + double delta = world.time - world.last_use; - if( delta <= RESET_MAX_TIME ) + if( (delta <= RESET_MAX_TIME) && (world.last_use != 0.0) ) { player.rewinding = 1; player.rewind_sound_wait = 1; @@ -353,7 +364,7 @@ static void player_update_pre(void) } } -static void player_update_fixed(void) /* 2 */ +VG_STATIC void player_update_fixed(void) /* 2 */ { if( player.rewinding ) return; @@ -380,7 +391,7 @@ static void player_update_fixed(void) /* 2 */ } } -static void player_update_post(void) +VG_STATIC void player_update_post(void) { for( int i=0; i= 5.0f ) - { - audio_lock(); - audio_player_playclip( &audio_rewind_player, &audio_rewind[4] ); - audio_unlock(); - - player.dist_accum -= 5.0f; - } -#endif - player.rewind_time = vg_maxf( 0.0f, player.rewind_time ); float current_time = vg.time - player.diag_rewind_start, @@ -539,7 +539,7 @@ static void player_update_post(void) player_audio(); } -static void draw_player( m4x3f cam ) +VG_STATIC void draw_player( m4x3f cam ) { if( player.is_dead ) player_model_copy_ragdoll(); @@ -555,8 +555,8 @@ static void draw_player( m4x3f cam ) 0, (float *)player.mdl.sk.final_mtx ); - mesh_bind( &player.mdl.mesh ); - mesh_draw( &player.mdl.mesh ); + mesh_bind( &player.mdl.player_meshes[cl_playermdl_id] ); + mesh_draw( &player.mdl.player_meshes[cl_playermdl_id] ); } /* @@ -565,12 +565,12 @@ static void draw_player( m4x3f cam ) * ----------------------------------------------------------------------------- */ -static float *player_get_pos(void) +VG_STATIC float *player_get_pos(void) { return player.phys.rb.co; } -static void player_kill(void) +VG_STATIC void player_kill(void) { if( player.death_tick_allowance == 0 ) { @@ -579,7 +579,7 @@ static void player_kill(void) } } -static float *player_cam_pos(void) +VG_STATIC float *player_cam_pos(void) { return player.camera_pos; }