X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.c;h=19c44929cd61f01ea336592f8ab36d2d6e266438;hb=8c376ed2e4021a18b0a6c6e800109d67ad09d198;hp=a73122c57c5351cf5afa929b6b3ff995490fe3be;hpb=f99902f513b0ad606437bf32de47405dd4ea5f98;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.c b/player.c index a73122c..19c4492 100644 --- a/player.c +++ b/player.c @@ -5,6 +5,35 @@ #include "camera.h" #include "player_model.h" +VG_STATIC int localplayer_cmd_respawn( int argc, const char *argv[] ) +{ + ent_spawn *rp = NULL, *r; + world_instance *world = localplayer.viewable_world; + + if( argc == 1 ){ + rp = world_find_spawn_by_name( world, argv[0] ); + } + else if( argc == 0 ){ + rp = world_find_closest_spawn( world, localplayer.rb.co ); + } + + if( !rp ) + return 0; + + player__spawn( &localplayer, rp ); + return 1; +} + +VG_STATIC void player_init(void) +{ + for( u32 i=0; isubsystem == k_player_subsystem_dead ){ - __respawn( 0, NULL ); + localplayer_cmd_respawn( 0, NULL ); } else{ /* cant do that */ @@ -244,7 +273,7 @@ void player__post_update( player_instance *player ) _player_post_update[ player->subsystem ]( player ); if((player->subsystem != k_player_subsystem_dead) && !player->gate_waiting){ - player->rewind_accum += vg.frame_delta; + player->rewind_accum += vg.time_frame_delta; if( player->rewind_accum > 0.25f ){ player->rewind_accum -= 0.25f; @@ -323,7 +352,7 @@ void player__pass_gate( player_instance *player, ent_gate *gate ) m4x3_mulv( gate->transport, player->cam.pos, player->cam.pos ); player_save_rewind_frame( player ); - if( gate->type == k_gate_type_nonlocal ) + if( gate->type == k_gate_type_nonlocel ) world_global.active_world = gate->target; world_global.in_volume = 0; @@ -348,7 +377,7 @@ VG_STATIC void player__pre_render( player_instance *player ) if( player->holdout_time > 0.0f ){ skeleton_lerp_pose( sk, res.pose, player->holdout_pose, player->holdout_time, res.pose ); - player->holdout_time -= vg.frame_delta * 2.0f; + player->holdout_time -= vg.time_frame_delta * 2.0f; } skeleton_apply_pose( sk, res.pose, k_anim_apply_defer_ik ); @@ -476,6 +505,16 @@ PLAYER_API void player__render( camera *cam, player_instance *player ) shader_model_character_view_uTexMain( 0 ); shader_model_character_view_uCamera( cam->transform[3] ); shader_model_character_view_uPv( cam->mtx.pv ); + shader_model_character_view_uTexSceneDepth( 1 ); + render_fb_bind_texture( gpipeline.fb_main, 2, 1 ); + v3f inverse; + render_fb_inverse_ratio( gpipeline.fb_main, inverse ); + inverse[2] = main_camera.farz-main_camera.nearz; + + shader_model_character_view_uInverseRatioDepth( inverse ); + render_fb_inverse_ratio( NULL, inverse ); + inverse[2] = cam->farz-cam->nearz; + shader_model_character_view_uInverseRatioMain( inverse ); world_instance *world = get_active_world(); world_link_lighting_ub( world, _shader_model_character_view.id ); @@ -530,7 +569,6 @@ PLAYER_API void player__spawn( player_instance *player, m3x3_identity( player->invbasis ); player->subsystem = k_player_subsystem_walk; - player->viewable_world = get_active_world(); player->gate_waiting = NULL; if( _player_reset[ player->subsystem ] )