projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
move database requests to seperate thread
[carveJwlIkooP6JGAAIwe30JlM.git]
/
world_gate.c
diff --git
a/world_gate.c
b/world_gate.c
index b49113b3f0c381d1f27a618d9a213e57c3748776..bb62e341aab99085071a9edc55d08ba6da73fc57 100644
(file)
--- a/
world_gate.c
+++ b/
world_gate.c
@@
-16,11
+16,12
@@
#include "camera.h"
#include "world_water.h"
#include "camera.h"
#include "world_water.h"
+#include "player_remote.h"
/*
* Update the transform matrices for gate
*/
/*
* Update the transform matrices for gate
*/
-
VG_STATIC
void gate_transform_update( ent_gate *gate ){
+
static
void gate_transform_update( ent_gate *gate ){
if( gate->flags & k_ent_gate_flip ){
v4f qflip;
q_axis_angle( qflip, (v3f){0.0f,1.0f,0.0f}, VG_PIf );
if( gate->flags & k_ent_gate_flip ){
v4f qflip;
q_axis_angle( qflip, (v3f){0.0f,1.0f,0.0f}, VG_PIf );
@@
-39,7
+40,7
@@
VG_STATIC void gate_transform_update( ent_gate *gate ){
m4x3_mul( recv_to_world, to_local, gate->transport );
}
m4x3_mul( recv_to_world, to_local, gate->transport );
}
-
VG_STATIC
void world_gates_init(void)
+
static
void world_gates_init(void)
{
vg_info( "world_gates_init\n" );
{
vg_info( "world_gates_init\n" );
@@
-68,10
+69,19
@@
VG_STATIC void world_gates_init(void)
mdl_close( &mgate );
}
mdl_close( &mgate );
}
+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
*/
-
VG_STATIC
int render_gate( world_instance *world, world_instance *world_inside,
+
static
int render_gate( world_instance *world, world_instance *world_inside,
ent_gate *gate, camera *cam, int layer_depth )
{
v3f viewdir, gatedir;
ent_gate *gate, camera *cam, int layer_depth )
{
v3f viewdir, gatedir;
@@
-148,10
+158,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
+170,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 );
}
@@
-190,6
+197,7
@@
VG_STATIC int render_gate( world_instance *world, world_instance *world_inside,
glDisable( GL_STENCIL_TEST );
}
glDisable( GL_STENCIL_TEST );
}
+ render_remote_players( world_inside, &world_gates.cam );
return 1;
}
return 1;
}
@@
-197,7
+205,7
@@
VG_STATIC int render_gate( world_instance *world, world_instance *world_inside,
* Intersect the plane of a gate with a line segment, plane coordinate result
* stored in 'where'
*/
* Intersect the plane of a gate with a line segment, plane coordinate result
* stored in 'where'
*/
-
VG_STATIC
int gate_intersect_plane( ent_gate *gate,
+
static
int gate_intersect_plane( ent_gate *gate,
v3f pos, v3f last, v2f where )
{
v4f surface;
v3f pos, v3f last, v2f where )
{
v4f surface;
@@
-241,8
+249,7
@@
VG_STATIC int gate_intersect_plane( ent_gate *gate,
/*
* Intersect specific gate
*/
/*
* Intersect specific gate
*/
-VG_STATIC int gate_intersect( ent_gate *gate, v3f pos, v3f last )
-{
+static int gate_intersect( ent_gate *gate, v3f pos, v3f last ){
v2f xy;
if( gate_intersect_plane( gate, pos, last, xy ) ){
v2f xy;
if( gate_intersect_plane( gate, pos, last, xy ) ){
@@
-258,32
+265,28
@@
VG_STATIC int gate_intersect( ent_gate *gate, v3f pos, v3f last )
/*
* Intersect all gates in the world
*/
/*
* Intersect all gates in the world
*/
-VG_STATIC ent_gate *world_intersect_gates( world_instance *world,
- v3f pos, v3f last ){
+static u32 world_intersect_gates( world_instance *world, v3f pos, v3f last ){
for( u32 i=0; i<mdl_arrcount(&world->ent_gate); i++ ){
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;
for( u32 i=0; i<mdl_arrcount(&world->ent_gate); i++ ){
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_static.load_state != k_world_loader_none )
{
+ if( gate->flags & k_ent_gate_nonlocal )
+ if( world_static.load_state != k_world_loader_none )
continue;
continue;
- }
- }
- if( gate_intersect( gate, pos, last ) ){
- return gate;
- }
+ if( gate_intersect( gate, pos, last ) )
+ return mdl_entity_id( k_ent_gate, i );
}
}
- return
NULL
;
+ return
0
;
}
/*
* detatches any nonlocal gates
*/
}
/*
* detatches any nonlocal gates
*/
-
VG_STATIC
void world_unlink_nonlocal( world_instance *world ){
+
static
void world_unlink_nonlocal( world_instance *world ){
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 );
@@
-296,7
+299,7
@@
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 ){
+
static
void world_link_nonlocal_async( void *payload, u32 size ){
world_instance *world = payload;
u32 world_id = world - world_static.instances;
world_instance *world = payload;
u32 world_id = world - world_static.instances;
@@
-315,8
+318,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
+342,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
+353,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,12
+361,11
@@
VG_STATIC void world_link_nonlocal_async( void *payload, u32 size ){
goto matched;
}
goto matched;
}
- }
-matched:;
+ } matched:;
}
}
}
}
-
VG_STATIC
void ent_gate_call( world_instance *world, ent_call *call ){
+
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 );
u32 index = mdl_entity_id_id( call->id );
ent_gate *gate = mdl_arritm( &world->ent_gate, index );