unlock rendering
[carveJwlIkooP6JGAAIwe30JlM.git] / world_gate.c
index f757cdf8e1b760d167299c080b1731501e9ae1f8..765a09987e6f68cd61344e8163a2f641747dfe3c 100644 (file)
@@ -68,6 +68,15 @@ VG_STATIC void world_gates_init(void)
    mdl_close( &mgate );
 }
 
+VG_STATIC void ent_gate_get_mdl_mtx( ent_gate *gate, m4x3f mmdl ){
+   m4x3_copy( gate->to_world, mmdl );
+   
+   if( !(gate->flags & k_ent_gate_custom_mesh) ){
+      m3x3_scale( mmdl, (v3f){ gate->dimensions[0], 
+                               gate->dimensions[1], 1.0f } );
+   }
+}
+
 /*
  * Render the view through a gate
  */
@@ -148,10 +157,10 @@ VG_STATIC int render_gate( world_instance *world, world_instance *world_inside,
       glDisable( GL_CULL_FACE );
 
       m4x3f mmdl;
-      m4x3_copy( gate->to_world, mmdl );
+      ent_gate_get_mdl_mtx( gate, mmdl );
+      shader_model_gate_uMdl( mmdl );
       
       if( gate->flags & k_ent_gate_custom_mesh ){
-         shader_model_gate_uMdl( mmdl );
          mesh_bind( &world->mesh_no_collide );
          for( u32 i=0; i<gate->submesh_count; i++ ){
             mdl_submesh *sm = mdl_arritm( &world->meta.submeshs, 
@@ -160,9 +169,6 @@ VG_STATIC int render_gate( world_instance *world, world_instance *world_inside,
          }
       }
       else {
-         m3x3_scale( mmdl, (v3f){ gate->dimensions[0], 
-                                  gate->dimensions[1], 1.0f } );
-         shader_model_gate_uMdl( mmdl );
          mesh_bind( &world_gates.mesh );
          mdl_draw_submesh( &world_gates.sm_surface );
       }
@@ -267,7 +273,7 @@ VG_STATIC ent_gate *world_intersect_gates( world_instance *world,
       if( gate->flags & k_ent_gate_locked ) continue;
 
       if( gate->flags & k_ent_gate_nonlocal ){
-         if( world_loader.state != k_world_loader_none ){
+         if( world_static.load_state != k_world_loader_none ){
             continue;
          }
       }
@@ -296,10 +302,9 @@ VG_STATIC void world_unlink_nonlocal( world_instance *world ){
 /* 
  * attatches nonlocal gates, to be called from main thread ONLY! 
  */
-VG_STATIC void world_link_nonlocal_async( void *payload, u32 size )
-{
+VG_STATIC void world_link_nonlocal_async( void *payload, u32 size ){
    world_instance *world = payload;
-   u32 world_id = world - world_static.worlds;
+   u32 world_id = world - world_static.instances;
 
    for( u32 j=0; j<mdl_arrcount(&world->ent_gate); j ++ ){
       ent_gate *gate = mdl_arritm( &world->ent_gate, j );
@@ -310,8 +315,8 @@ VG_STATIC void world_link_nonlocal_async( void *payload, u32 size )
       const char *key = mdl_pstr( &world->meta, gate->key );
       vg_info( "key: %s\n", key );
 
-      for( u32 i=0; i<vg_list_size(world_static.worlds); i++ ){
-         world_instance *other = &world_static.worlds[i];
+      for( u32 i=0; i<vg_list_size(world_static.instances); i++ ){
+         world_instance *other = &world_static.instances[i];
          if( other == world ) continue;
          if( other->status != k_world_status_loaded ) continue;
          vg_info( "Checking world %u for key matches\n", i );