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 b49113b3f0c381d1f27a618d9a213e57c3748776..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,10
+157,10
@@
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 ){
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,
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 {
}
}
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 );
}
mesh_bind( &world_gates.mesh );
mdl_draw_submesh( &world_gates.sm_surface );
}
@@
-315,8
+321,8
@@
VG_STATIC void world_link_nonlocal_async( void *payload, u32 size ){
if( other->status != k_world_status_loaded ) continue;
vg_info( "Checking world %u for key matches\n", i );
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;
@@
-339,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
@@
-354,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 );
@@
-361,8
+364,7
@@
VG_STATIC void world_link_nonlocal_async( void *payload, u32 size ){
goto matched;
}
goto matched;
}
- }
-matched:;
+ } matched:;
}
}
}
}