projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gui icons
[carveJwlIkooP6JGAAIwe30JlM.git]
/
world_gate.c
diff --git
a/world_gate.c
b/world_gate.c
index 64333da9f6db11ca65626db0d1f60a216f4d0af1..b4760b46389d6cbd1299fbe288f85db1874a20be 100644
(file)
--- a/
world_gate.c
+++ b/
world_gate.c
@@
-68,6
+68,15
@@
VG_STATIC void world_gates_init(void)
mdl_close( &mgate );
}
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
*/
/*
* Render the view through a gate
*/
@@
-148,7
+157,8
@@
VG_STATIC int render_gate( world_instance *world, world_instance *world_inside,
glDisable( GL_CULL_FACE );
m4x3f mmdl;
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 ){
mesh_bind( &world->mesh_no_collide );
if( gate->flags & k_ent_gate_custom_mesh ){
mesh_bind( &world->mesh_no_collide );
@@
-159,15
+169,10
@@
VG_STATIC int render_gate( world_instance *world, world_instance *world_inside,
}
}
else {
}
}
else {
- m3x3_scale( mmdl, (v3f){ gate->dimensions[0],
- gate->dimensions[1], 1.0f } );
-
mesh_bind( &world_gates.mesh );
mdl_draw_submesh( &world_gates.sm_surface );
}
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 );
glClear( GL_DEPTH_BUFFER_BIT );
glStencilFunc( GL_EQUAL, 1, 0xFF );
glStencilMask( 0x00 );
@@
-268,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( 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;
}
}
continue;
}
}
@@
-297,10
+302,9
@@
VG_STATIC void world_unlink_nonlocal( world_instance *world ){
/*
* attatches nonlocal gates, to be called from main thread ONLY!
*/
/*
* 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;
world_instance *world = payload;
- u32 world_id = world - world_static.
world
s;
+ u32 world_id = world - world_static.
instance
s;
for( u32 j=0; j<mdl_arrcount(&world->ent_gate); j ++ ){
ent_gate *gate = mdl_arritm( &world->ent_gate, j );
for( u32 j=0; j<mdl_arrcount(&world->ent_gate); j ++ ){
ent_gate *gate = mdl_arritm( &world->ent_gate, j );
@@
-311,14
+315,14
@@
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 );
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.
world
s); i++ ){
- world_instance *other = &world_static.
world
s[i];
+ for( u32 i=0; i<vg_list_size(world_static.
instance
s); i++ ){
+ world_instance *other = &world_static.
instance
s[i];
if( other == world ) continue;
if( other->status != k_world_status_loaded ) continue;
vg_info( "Checking world %u for key matches\n", i );
if( other == world ) continue;
if( other->status != k_world_status_loaded ) continue;
vg_info( "Checking world %u for key matches\n", i );
- for( u32
j=0; j<mdl_arrcount( &other->ent_gate ); j
++ ){
- ent_gate *gate2 = mdl_arritm( &other->ent_gate,
j
);
+ for( u32
k=0; k<mdl_arrcount( &other->ent_gate ); k
++ ){
+ ent_gate *gate2 = mdl_arritm( &other->ent_gate,
k
);
if( !(gate2->flags & k_ent_gate_nonlocal) ) continue;
if( gate2->flags & k_ent_gate_linked ) continue;
if( !(gate2->flags & k_ent_gate_nonlocal) ) continue;
if( gate2->flags & k_ent_gate_linked ) continue;
@@
-341,11
+345,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] );
v4_copy( gate->q[0], gate2->q[1] );
v4_copy( gate2->q[0], gate->q[1] );
- if( world->meta.info.version >= 102 ){
- gate->flags |= k_ent_gate_flip;
- gate2->flags |= k_ent_gate_flip;
- }
- else {
+ if( world->meta.info.version < 102 ){
/* LEGACY BEHAVIOUR: v101
* this would flip both the client worlds portal's entrance and
* exit. effectively the clients portal would be the opposite
/* LEGACY BEHAVIOUR: v101
* this would flip both the client worlds portal's entrance and
* exit. effectively the clients portal would be the opposite
@@
-356,6
+356,7
@@
VG_STATIC void world_link_nonlocal_async( void *payload, u32 size )
q_axis_angle( qflip, (v3f){0.0f,1.0f,0.0f}, VG_PIf );
q_mul( gate->q[0], qflip, gate->q[0] );
q_mul( gate->q[1], qflip, gate->q[1] );
q_axis_angle( qflip, (v3f){0.0f,1.0f,0.0f}, VG_PIf );
q_mul( gate->q[0], qflip, gate->q[0] );
q_mul( gate->q[1], qflip, gate->q[1] );
+ q_mul( gate2->q[1], qflip, gate2->q[1] );
}
gate_transform_update( gate );
}
gate_transform_update( gate );
@@
-363,8
+364,7
@@
VG_STATIC void world_link_nonlocal_async( void *payload, u32 size )
goto matched;
}
goto matched;
}
- }
-matched:;
+ } matched:;
}
}
}
}