X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world.h;h=ff2c2e3610b4bb79b809bbd1be2e289d641b8d92;hb=9d5997f1e611b66c7220f7eb388f427032d8da79;hp=37ff044910b0c238750ec11e484c870f8f1ebf02;hpb=a1056ed8198f0f5be0e0f341da8bd49aa6c47198;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world.h b/world.h index 37ff044..ff2c2e3 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();