X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_gate.c;h=b49113b3f0c381d1f27a618d9a213e57c3748776;hb=4b8fc63f926737ca0593a4e471550f9f4995c538;hp=a4cf8fdc703e8b21ae976918e924bbb5206fb671;hpb=6ab4435fb19beb6af6c52691793d5ca17a120f69;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_gate.c b/world_gate.c index a4cf8fd..b49113b 100644 --- a/world_gate.c +++ b/world_gate.c @@ -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; isubmesh_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,9 +264,10 @@ 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 ){ + if( world_static.load_state != k_world_loader_none ){ continue; } } @@ -296,10 +296,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; jent_gate); j ++ ){ ent_gate *gate = mdl_arritm( &world->ent_gate, j ); @@ -310,8 +309,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; istatus != k_world_status_loaded ) continue; vg_info( "Checking world %u for key matches\n", i ); @@ -340,7 +339,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 +366,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 */