X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=world.h;h=9883b295d6916bb06b3466f057301b29cf2fe08e;hb=66b3ec9c538fefd79c2de08e0dcdf070b4331885;hp=37ff044910b0c238750ec11e484c870f8f1ebf02;hpb=a1056ed8198f0f5be0e0f341da8bd49aa6c47198;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world.h b/world.h index 37ff044..9883b29 100644 --- a/world.h +++ b/world.h @@ -18,6 +18,7 @@ typedef struct world_instance world_instance; #include "rigidbody.h" #include "bvh.h" #include "model.h" +#include "entity.h" #include "shaders/scene_standard.h" #include "shaders/scene_standard_alphatest.h" @@ -28,8 +29,6 @@ typedef struct world_instance world_instance; #include "shaders/model_sky.h" -typedef struct teleport_gate teleport_gate; - enum { k_max_ui_segments = 8 }; enum { k_max_ui_elements = k_max_ui_segments }; @@ -157,6 +156,8 @@ struct world_instance ent_checkpoint, ent_route; + ent_gate *rendering_gate; + #if 0 /* * Named safe places to respawn @@ -353,8 +354,9 @@ VG_STATIC struct world_global /* split flap display */ struct { - mdl_submesh *sm_module, *sm_card; glmesh mesh_base, mesh_display; + mdl_submesh sm_base; + u32 active_route_board; u32 w, h; float *buffer; @@ -362,7 +364,6 @@ VG_STATIC struct world_global sfd; v3f render_gate_pos; - int active_route_board; int in_volume; int switching_to_new_world; @@ -452,9 +453,7 @@ VG_STATIC void world_init(void) vg_info( "Loading other world systems\n" ); vg_loader_step( world_render_init, NULL ); -#if 0 vg_loader_step( world_sfd_init, NULL ); -#endif vg_loader_step( world_water_init, NULL ); vg_loader_step( world_gates_init, NULL ); vg_loader_step( world_routes_init, NULL ); @@ -508,46 +507,46 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) world_routes_update( world ); world_routes_debug( world ); + + /* ---- SFD ------------ */ -#if 0 - if( world->route_count > 0 ){ - int closest = 0; + if( mdl_arrcount( &world->ent_route ) ){ + u32 closest = 0; float min_dist = INFINITY; - for( int i=0; iroute_count; i++ ) - { - float d = v3_dist2( world->routes[i].scoreboard_transform[3], pos ); + for( u32 i=0; ient_route ); i++ ){ + ent_route *route = mdl_arritm( &world->ent_route, i ); + float dist = v3_dist2( route->board_transform[3], pos ); - if( d < min_dist ) - { - min_dist = d; + if( dist < min_dist ){ + min_dist = dist; closest = i; } } - if( (world_global.active_route_board != closest) + if( (world_global.sfd.active_route_board != closest) || network_scores_updated ) { network_scores_updated = 0; - world_global.active_route_board = closest; - - struct route *route = &world->routes[closest]; + world_global.sfd.active_route_board = closest; - u32 id = route->track_id; + ent_route *route = mdl_arritm( &world->ent_route, closest ); + u32 id = route->official_track_id; - if( id != 0xffffffff ) - { + if( id != 0xffffffff ){ struct netmsg_board *local_board = &scoreboard_client_data.boards[id]; - for( int i=0; i<13; i++ ) - { + for( int i=0; i<13; i++ ){ sfd_encode( i, &local_board->data[27*i] ); } + }else{ + sfd_encode( 0, mdl_pstr( &world->meta, route->pstr_name ) ); + sfd_encode( 1, "No data" ); } } } -#endif + sfd_update(); #if 0 /* TODO: Bvh */ @@ -661,7 +660,6 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) #endif #if 0 - sfd_update(); /* process soundscape transactions */ audio_lock(); @@ -733,16 +731,14 @@ VG_STATIC int spherecast_world( world_instance *world, float min_t = 1.0f; int idx; - while( bh_next( world->geo_bh, &it, region, &idx ) ) - { + while( bh_next( world->geo_bh, &it, region, &idx ) ){ u32 *ptri = &world->scene_geo->arrindices[ idx*3 ]; v3f tri[3]; boxf box; box_init_inf( box ); - for( int j=0; j<3; j++ ) - { + for( int j=0; j<3; j++ ){ v3_copy( world->scene_geo->arrvertices[ptri[j]].co, tri[j] ); box_addpt( box, tri[j] ); } @@ -755,10 +751,8 @@ VG_STATIC int spherecast_world( world_instance *world, float t; v3f n1; - if( spherecast_triangle( tri, pa, dir, r, &t, n1 ) ) - { - if( t < min_t ) - { + if( spherecast_triangle( tri, pa, dir, r, &t, n1 ) ){ + if( t < min_t ){ min_t = t; hit = idx; v3_copy( n1, n ); @@ -774,18 +768,16 @@ VG_STATIC struct world_surface *world_tri_index_surface( world_instance *world, u32 index ) { - for( int i=1; isurface_count; i++ ) - { - struct world_surface *mat = &world->surfaces[i]; + for( int i=1; isurface_count; i++ ){ + struct world_surface *surf = &world->surfaces[i]; - if( (index >= mat->sm_geo.vertex_start) && - (index < mat->sm_geo.vertex_start+mat->sm_geo.vertex_count ) ) + if( (index >= surf->sm_geo.vertex_start) && + (index < surf->sm_geo.vertex_start+surf->sm_geo.vertex_count ) ) { - return mat; + return surf; } } - /* error surface */ return &world->surfaces[0]; }