X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.c;h=b804ed14b23e71aadd9ac65d449d4332e5abaf47;hb=6b9993651343af73bd48e2213910bbaadb41edaf;hp=51353b9a7e8492f70f803cd45463a0ce5d93fc9f;hpb=610907ae753bdda202236d52a6fcf77d14d63193;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.c b/player.c index 51353b9..b804ed1 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 */ @@ -321,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; @@ -365,8 +396,9 @@ VG_STATIC void player__pre_render( player_instance *player ) v3f vp0 = {0.0f,0.1f, 0.55f}, vp1 = {0.0f,0.1f,-0.55f}; - m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp0, TEMP_BOARD_0 ); - m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp1, TEMP_BOARD_1 ); + struct ub_world_lighting *ubo = &get_active_world()->ub_lighting; + m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp0, ubo->g_board_0 ); + m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp1, ubo->g_board_1 ); if( player->rewinding ){ if( player->rewind_time <= 0.0f ){ @@ -473,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 ); @@ -527,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 ] )