#include "rigidbody.h"
#include "bvh.h"
#include "model.h"
+#include "entity.h"
#include "shaders/scene_standard.h"
#include "shaders/scene_standard_alphatest.h"
#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 };
ent_route_node,
ent_path_index,
ent_checkpoint,
- ent_route;
+ ent_route,
+ ent_water;
+
+ ent_gate *rendering_gate;
#if 0
/*
/* 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;
sfd;
v3f render_gate_pos;
- int active_route_board;
int in_volume;
int switching_to_new_world;
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 );
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; i<world->route_count; i++ )
- {
- float d = v3_dist2( world->routes[i].scoreboard_transform[3], pos );
+ for( u32 i=0; i<mdl_arrcount( &world->ent_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 */
#endif
#if 0
- sfd_update();
/* process soundscape transactions */
audio_lock();
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] );
}
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 );
struct world_surface *world_tri_index_surface( world_instance *world,
u32 index )
{
- for( int i=1; i<world->surface_count; i++ )
- {
- struct world_surface *mat = &world->surfaces[i];
+ for( int i=1; i<world->surface_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];
}