some niceer ui stuff
[carveJwlIkooP6JGAAIwe30JlM.git] / world_gate.c
index a4cf8fdc703e8b21ae976918e924bbb5206fb671..f757cdf8e1b760d167299c080b1731501e9ae1f8 100644 (file)
@@ -151,6 +151,7 @@ VG_STATIC int render_gate( world_instance *world, world_instance *world_inside,
       m4x3_copy( gate->to_world, 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, 
@@ -161,13 +162,11 @@ 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 );
       }
 
-      shader_model_gate_uMdl( mmdl );
-
       glClear( GL_DEPTH_BUFFER_BIT );
       glStencilFunc( GL_EQUAL, 1, 0xFF );
       glStencilMask( 0x00 ); 
@@ -265,6 +264,7 @@ VG_STATIC ent_gate *world_intersect_gates( world_instance *world,
       ent_gate *gate = mdl_arritm( &world->ent_gate, i );
 
       if( !(gate->flags & k_ent_gate_linked) ) continue;
+      if( gate->flags & k_ent_gate_locked ) continue;
 
       if( gate->flags & k_ent_gate_nonlocal ){
          if( world_loader.state != k_world_loader_none ){
@@ -340,7 +340,7 @@ VG_STATIC void world_link_nonlocal_async( void *payload, u32 size )
             v4_copy( gate->q[0], gate2->q[1] );
             v4_copy( gate2->q[0], gate->q[1] );
 
-            if( other->meta.info.version >= 102 ){
+            if( world->meta.info.version >= 102 ){
                gate->flags |= k_ent_gate_flip;
                gate2->flags |= k_ent_gate_flip;
             }
@@ -367,4 +367,17 @@ matched:;
    }
 }
 
+VG_STATIC void ent_gate_call( world_instance *world, ent_call *call ){
+   u32 index = mdl_entity_id_id( call->id );
+   ent_gate *gate = mdl_arritm( &world->ent_gate, index );
+
+   if( call->function == 0 ){ /* unlock() */
+      gate->flags &= ~k_ent_gate_locked;
+   }
+   else {
+      vg_print_backtrace();
+      vg_error( "Unhandled function id: %u\n", call->function );
+   }
+}
+
 #endif /* WORLD_GATE_C */