X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=skaterift.c;h=c020532fd0d204d276c503941e5dd9b389001a68;hb=00653e446d6b1310fa89d3aace70800f9fef4122;hp=8ed749ceb324087ed31b773be3fd4d6e49636715;hpb=2c91a71533b4ce86b9e7fd708420ae05c74d8f52;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/skaterift.c b/skaterift.c index 8ed749c..c020532 100644 --- a/skaterift.c +++ b/skaterift.c @@ -324,8 +324,7 @@ static void vg_pre_update(void){ /* time rate */ f32 target = 1; - if( skaterift.activity & (k_skaterift_replay|k_skaterift_menu| - k_skaterift_respawning) ) { + if( skaterift.activity & (k_skaterift_replay|k_skaterift_menu) ){ target = 0; } @@ -333,6 +332,7 @@ static void vg_pre_update(void){ vg.time_rate = vg_smoothstepf( skaterift.time_rate ); /* TODO: how can we compress this? */ + ent_miniworld_preupdate(); player__pre_update(); world_entity_focus_preupdate(); skaterift_replay_pre_update(); @@ -340,7 +340,6 @@ static void vg_pre_update(void){ world_update( world_current_instance(), localplayer.rb.co ); audio_ambient_sprites_update( world_current_instance(), localplayer.rb.co ); - respawn_chooser_pre_update(); } static void vg_fixed_update(void){ @@ -476,53 +475,47 @@ static void render_scene(void){ /* Draw world */ glEnable( GL_DEPTH_TEST ); - world_instance *view_world = localplayer.viewable_world; - - if( view_world == NULL ){ - glClearColor( 0.25f, 0.25f, 0.0f, 1.0f ); - glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT ); - return; - } - for( u32 i=0; istatus != k_world_status_loaded ) + return; -static void render_scene_gate_subview(void){ - render_fb_bind( gpipeline.fb_main, 1 ); - world_instance *view_world = localplayer.viewable_world; - if( !view_world ) return; /* ??? */ - if( skaterift.activity == k_skaterift_respawning ) return; + t = vg_smoothstepf( t ); + + glEnable( GL_STENCIL_TEST ); + glDisable( GL_DEPTH_TEST ); + glStencilOp( GL_KEEP, GL_KEEP, GL_REPLACE ); + glStencilFunc( GL_ALWAYS, 1, 0xFF ); + glStencilMask( 0xFF ); + + shader_blit_transition_use(); + shader_blit_transition_uInverseRatio( (v2f){1.0f,1.0f} ); + shader_blit_transition_uT( -(sqrtf(2)+0.5f) * t ); - int depth = 1; - if( localplayer.gate_waiting ) depth = 0; - render_world_gates( view_world, &skaterift.cam, depth ); + render_fsquad(); + render_world( holdout_world, &global_miniworld.cam, 1, 0, 1, 1 ); + } } static void skaterift_composite_maincamera(void){ @@ -536,25 +529,21 @@ static void skaterift_composite_maincamera(void){ skaterift.cam.nearz = 0.1f; skaterift.cam.farz = 2100.0f; - if( skaterift.activity == k_skaterift_respawning ){ - camera_copy( &respawn_chooser.cam, &skaterift.cam ); - skaterift.cam.nearz = 4.0f; - skaterift.cam.farz = 3100.0f; - } - - camera_update_transform( &skaterift.cam ); + if( global_miniworld.transition ){ + f32 dt = vg.time_frame_delta / 2.0f, + s = vg_signf( global_miniworld.transition ); + global_miniworld.t += s * dt; - if( skaterift.activity != k_skaterift_respawning ){ - if( localplayer.gate_waiting ){ - m3x3_mul( localplayer.basis_gate, skaterift.cam.transform, - skaterift.cam.transform ); + if( (global_miniworld.t > 1.0f) || (global_miniworld.t < 0.0f) ){ + /* TODO: maybe next frame! */ + global_miniworld.t = vg_clampf( global_miniworld.t, 0.0f, 1.0f ); + global_miniworld.transition = 0; } - else{ - m3x3_mul( localplayer.basis, skaterift.cam.transform, - skaterift.cam.transform ); + else { } } - + + camera_update_transform( &skaterift.cam ); camera_update_view( &skaterift.cam ); camera_update_projection( &skaterift.cam ); camera_finalize( &skaterift.cam ); @@ -574,11 +563,7 @@ static void render_main_game(void){ skaterift_composite_maincamera(); /* --------------------------------------------------------------------- */ - - world_instance *view_world = localplayer.viewable_world; - if( (view_world != NULL) && (skaterift.activity != k_skaterift_respawning) ){ - render_world_cubemaps( view_world ); - } + render_world_cubemaps( world_current_instance() ); /* variable res target */ render_fb_bind( gpipeline.fb_main, 1 ); @@ -597,7 +582,10 @@ static void render_main_game(void){ portals */ /* continue with variable rate */ - render_scene_gate_subview(); + if( !global_miniworld.transition ){ + render_fb_bind( gpipeline.fb_main, 1 ); + render_world_gates( world_current_instance(), &skaterift.cam ); + } /* composite */ present_view_with_post_processing(); @@ -656,16 +644,8 @@ static void vg_gui(void){ render_view_framebuffer_ui(); remote_player_network_imgui( vg.pv ); - - if( skaterift.activity == k_skaterift_respawning ){ - remote_players_imgui_world( world_current_instance(), vg.pv, - 2000.0f, 0 ); - remote_players_imgui_lobby(); - } - else { - remote_players_chat_imgui(); /* TODO: conditional */ - remote_players_imgui_world( world_current_instance(), vg.pv, 100.0f, 1 ); - } + remote_players_chat_imgui(); /* TODO: conditional */ + remote_players_imgui_world( world_current_instance(), vg.pv, 100.0f, 1 ); }