remove assertion
[carveJwlIkooP6JGAAIwe30JlM.git] / skaterift.c
index 7da7109f0afb0ff4952cd8629d73369fa091836a..c23d022fec2911716c2d79bc3cb4b8efb888f5e0 100644 (file)
@@ -153,6 +153,12 @@ static void skaterift_restore_state(void){
    kvsav.cur = orig;
 }
 
+static addon_reg *skaterift_mount_world_unloadable( const char *path ){
+   addon_reg *reg = addon_mount_local_addon( path, k_addon_type_world, ".mdl" );
+   reg->flags |= ADDON_REG_HIDDEN;
+   return reg;
+}
+
 static void vg_load(void){
    if( k_tools_mode ){
       vg_async_call( async_call_ready, NULL, 0 );
@@ -204,37 +210,9 @@ static void vg_load(void){
     */
 
    /* hub world */
-   addon_reg *hub = 
-      addon_mount_local_addon( "maps/dev_hub", k_addon_type_world, ".mdl" );
-   hub->metadata_len = 0;
-
-   /* understate diy. */
-   addon_reg *spawn = addon_mount_local_addon( "maps/mp_spawn", 
-                                                k_addon_type_world, 
-                                                ".mdl" );
-   {
-      vg_msg msg;
-      vg_msg_init( &msg, spawn->metadata, sizeof(spawn->metadata) );
-      vg_msg_frame( &msg, "workshop" );
-      vg_msg_wkvstr( &msg, "title", "Understate DIY" );
-      vg_msg_end_frame( &msg );
-      vg_msg_wkvstr( &msg, "location", "USA" );
-      spawn->metadata_len = msg.cur.co;
-   }
-
-   /* mtzero island */
-   addon_reg *mtzero = addon_mount_local_addon( "maps/mp_mtzero",
-                                                k_addon_type_world,
-                                                ".mdl" );
-   {
-      vg_msg msg;
-      vg_msg_init( &msg, spawn->metadata, sizeof(mtzero->metadata) );
-      vg_msg_frame( &msg, "workshop" );
-      vg_msg_wkvstr( &msg, "title", "Mt.Zero Island" );
-      vg_msg_end_frame( &msg );
-      vg_msg_wkvstr( &msg, "location", "Australia" );
-      mtzero->metadata_len = msg.cur.co;
-   }
+   addon_reg *hub = skaterift_mount_world_unloadable( "maps/dev_hub" );
+   skaterift_mount_world_unloadable( "maps/mp_spawn" );
+   skaterift_mount_world_unloadable( "maps/mp_mtzero" );
 
    /* load home/permanent world manually */
    world_static.load_state = k_world_loader_load;
@@ -443,6 +421,16 @@ static void render_player_transparent(void){
    player__render( &small_cam );
 }
 
+static world_instance *get_view_world(void){
+   world_instance *view_world = world_current_instance();
+   if( localplayer.gate_waiting && 
+         (localplayer.gate_waiting->flags & k_ent_gate_nonlocal) ){
+      view_world = &world_static.instances[world_static.active_instance ^ 0x1];
+   }
+
+   return view_world;
+}
+
 static void render_scene(void){
    /* Draw world */
    glEnable( GL_DEPTH_TEST );
@@ -481,7 +469,14 @@ static void render_scene(void){
       return;
    }
 
-   render_world( world_current_instance(), &skaterift.cam, 0, 0, 1, 1 );
+   world_instance *view_world = get_view_world();
+   render_world( view_world, &skaterift.cam, 0, 0, 1, 1 );
+
+   /* 
+    * render transition 
+    */
+   if( global_miniworld.transition == 0 ) 
+      return;
 
    world_instance *holdout_world = NULL;
    f32 t = 0.0f;
@@ -490,32 +485,28 @@ static void render_scene(void){
       holdout_world = &world_static.instances[ k_world_purpose_hub ];
       t = global_miniworld.t;
    }
-   else if( global_miniworld.transition == -1 ){
+   else{
       holdout_world = &world_static.instances[ k_world_purpose_client ];
       t = 1.0f-global_miniworld.t;
    }
-   else {
-   }
 
-   if( holdout_world ){
-      if( holdout_world->status != k_world_status_loaded )
-         return;
+   if( holdout_world->status != k_world_status_loaded )
+      return;
 
-      t = vg_smoothstepf( t );
+   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 );
+   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 );
+   shader_blit_transition_use();
+   shader_blit_transition_uInverseRatio( (v2f){1.0f,1.0f} );
+   shader_blit_transition_uT( -(sqrtf(2)+0.5f) * t );
 
-      render_fsquad();
-      render_world( holdout_world, &global_miniworld.cam, 1, 0, 1, 1 );
-   }
+   render_fsquad();
+   render_world( holdout_world, &global_miniworld.cam, 1, 0, 1, 1 );
 }
 
 static void skaterift_composite_maincamera(void){
@@ -569,8 +560,14 @@ static void render_main_game(void){
    skaterift_composite_maincamera();
 
    /* --------------------------------------------------------------------- */
-   if( skaterift.activity != k_skaterift_respawning )
-      render_world_cubemaps( world_current_instance() );
+   if( skaterift.activity != k_skaterift_respawning ){
+      world_instance *world = world_current_instance();
+      render_world_cubemaps( world );
+
+      ent_gate *nlg = world->rendering_gate;
+      if( nlg && nlg->flags & k_ent_gate_nonlocal )
+         render_world_cubemaps( &world_static.instances[nlg->target] );
+   }
 
    /* variable res target */
    render_fb_bind( gpipeline.fb_main, 1 );
@@ -592,7 +589,7 @@ static void render_main_game(void){
    if( !global_miniworld.transition && 
          (skaterift.activity != k_skaterift_respawning) ){
       render_fb_bind( gpipeline.fb_main, 1 );
-      render_world_gates( world_current_instance(), &skaterift.cam );
+      render_world_gates( get_view_world(), &skaterift.cam );
    }
 
    /* composite */