X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_routes.c;h=4998cc115efa779b0d89ae4ce657326525ebec52;hb=df9f72d2912a5424d37dfdb02f76aba8f1ed4df1;hp=bd91b3c441bb41392593300ae87cb5f03c67aadf;hpb=d532493a0cb87ebcfc58a72ac5e8206301f9d770;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_routes.c b/world_routes.c index bd91b3c..4998cc1 100644 --- a/world_routes.c +++ b/world_routes.c @@ -21,20 +21,20 @@ #include "shaders/routeui.h" -VG_STATIC +static void world_routes_local_set_record( world_instance *world, ent_route *route, f64 lap_time ) { vg_success( " NEW LAP TIME: %f\n", lap_time ); - if( route->official_track_id != 0xffffffff ){ + if( route->anon.official_track_id != 0xffffffff ){ double time_centiseconds = lap_time * 100.0; if( time_centiseconds > (float)0xfffe ) /* skill issue */ return; - struct track_info *ti = &track_infos[ route->official_track_id ]; + struct track_info *ti = &track_infos[ route->anon.official_track_id ]; highscore_record *record = &ti->record; - record->trackid = route->official_track_id; + record->trackid = route->anon.official_track_id; record->datetime = time(NULL); record->playerid = 0; record->points = 0; @@ -52,7 +52,7 @@ void world_routes_local_set_record( world_instance *world, ent_route *route, } -VG_STATIC void world_routes_clear( world_instance *world ) +static void world_routes_clear( world_instance *world ) { for( u32 i=0; ient_route ); i++ ){ ent_route *route = mdl_arritm( &world->ent_route, i ); @@ -69,7 +69,7 @@ VG_STATIC void world_routes_clear( world_instance *world ) world_static.last_use = 0.0; } -VG_STATIC void world_routes_time_lap( world_instance *world, ent_route *route ) +static void world_routes_time_lap( world_instance *world, ent_route *route ) { vg_info( "------- time lap %s -------\n", mdl_pstr(&world->meta,route->pstr_name) ); @@ -127,7 +127,7 @@ VG_STATIC void world_routes_time_lap( world_instance *world, ent_route *route ) /* * When going through a gate this is called for bookkeeping purposes */ -VG_STATIC void world_routes_activate_entry_gate( world_instance *world, +static void world_routes_activate_entry_gate( world_instance *world, ent_gate *rg ) { world_static.last_use = world_static.time; @@ -175,7 +175,7 @@ VG_STATIC void world_routes_activate_entry_gate( world_instance *world, } /* draw lines along the paths */ -VG_STATIC void world_routes_debug( world_instance *world ) +static void world_routes_debug( world_instance *world ) { for( u32 i=0; ient_route_node); i++ ){ ent_route_node *rn = mdl_arritm(&world->ent_route_node,i); @@ -224,7 +224,7 @@ VG_STATIC void world_routes_debug( world_instance *world ) } } -VG_STATIC +static void world_routes_pointcloud_spot( world_instance *world, pointcloud_buffer *pcbuf, v3f co, f32 radius, u32 samples, v4f colour ) @@ -268,7 +268,7 @@ void world_routes_pointcloud_spot( world_instance *world, * /#\ * -'###`- */ -VG_STATIC +static void world_routes_pointcloud_tower( world_instance *world, pointcloud_buffer *pcbuf, v3f co, f32 radius, f32 height, @@ -304,7 +304,7 @@ void world_routes_pointcloud_tower( world_instance *world, } } -VG_STATIC +static void world_routes_place_curve( world_instance *world, ent_route *route, v4f h[3], v3f n0, v3f n2, scene_context *scene, pointcloud_buffer *pcbuf ) @@ -365,8 +365,8 @@ void world_routes_place_curve( world_instance *world, ent_route *route, ha.dist = 8.0f; hb.dist = 8.0f; - int resa = ray_world( world, sa, down, &ha ), - resb = ray_world( world, sb, down, &hb ); + int resa = ray_world( world, sa, down, &ha, k_material_flag_ghosts ), + resb = ray_world( world, sb, down, &hb, k_material_flag_ghosts ); if( pcbuf && resa ){ world_routes_pointcloud_spot( world, pcbuf, ha.pos, @@ -426,7 +426,7 @@ void world_routes_place_curve( world_instance *world, ent_route *route, } } -VG_STATIC void world_routes_gen_meshes( world_instance *world, u32 route_id, +static void world_routes_gen_meshes( world_instance *world, u32 route_id, scene_context *sc, pointcloud_buffer *pcbuf ) { @@ -549,11 +549,11 @@ VG_STATIC void world_routes_gen_meshes( world_instance *world, u32 route_id, scene_copy_slice( sc, &route->sm ); } -VG_STATIC +static struct world_surface *world_tri_index_surface( world_instance *world, u32 index ); -VG_STATIC f64 world_routes_scatter_surface_points( world_instance *world, +static f64 world_routes_scatter_surface_points( world_instance *world, pointcloud_buffer *pcbuf, f32 rate ) { @@ -675,7 +675,7 @@ VG_STATIC f64 world_routes_scatter_surface_points( world_instance *world, return total_area; } -VG_STATIC void world_routes_surface_grid( world_instance *world, +static void world_routes_surface_grid( world_instance *world, pointcloud_buffer *pcbuf ) { i32 const k_gridlines = 32, @@ -712,6 +712,10 @@ VG_STATIC void world_routes_surface_grid( world_instance *world, u32 *tri = &world->scene_geo.arrindices[ idx*3 ]; v3f vs[3]; + u16 mask = k_material_flag_preview_visibile; + if( !(world->scene_geo.arrvertices[tri[0]].flags & mask) ) + continue; + for( u32 i=0; i<3; i++ ){ v3_copy( world->scene_geo.arrvertices[tri[i]].co, vs[i] ); } @@ -719,11 +723,6 @@ VG_STATIC void world_routes_surface_grid( world_instance *world, f32 t; if( ray_tri( vs, ro, dir, &t ) ){ v3_muladds( ro, dir, t, hit ); - struct world_surface *m1 = - world_tri_index_surface( world, tri[0] ); - - if( !(m1->info.flags & k_material_flag_preview_visibile) ) - continue; if( world->water.enabled ) if( hit[1] < world->water.height ) @@ -745,7 +744,7 @@ VG_STATIC void world_routes_surface_grid( world_instance *world, } } -VG_STATIC void world_write_preview( addon_reg *reg, pointcloud_buffer *pcbuf ){ +static void world_write_preview( addon_reg *reg, pointcloud_buffer *pcbuf ){ if( reg->alias.workshop_id ) return; /* @@ -774,7 +773,7 @@ VG_STATIC void world_write_preview( addon_reg *reg, pointcloud_buffer *pcbuf ){ /* * Create the strips of colour that run through the world along course paths */ -VG_STATIC void world_gen_routes_generate( u32 instance_id ){ +static void world_gen_routes_generate( u32 instance_id ){ world_instance *world = &world_static.instances[ instance_id ]; vg_info( "Generating route meshes\n" ); vg_async_stall(); @@ -850,6 +849,8 @@ VG_STATIC void world_gen_routes_generate( u32 instance_id ){ if( instance_id <= 1 /*world_loader.generate_point_cloud*/ ){ f64 area = 0.0; + +#if VG_RELEASE area = world_routes_scatter_surface_points( world, pcbuf, 16.0f ); world_routes_surface_grid( world, pcbuf ); @@ -860,8 +861,9 @@ VG_STATIC void world_gen_routes_generate( u32 instance_id ){ 2.0f, 50.0f, 128, (v4f){0.2f,0.2f,0.2f,1.0f} ); } +#endif - vg_info( "Distrubuted %u points over %fkm^2!\n", + vg_info( "Distributed %u points over %fkm^2!\n", pcbuf->count, area/1e6f ); world_write_preview( instance_id? world_static.addon_client: @@ -875,7 +877,7 @@ VG_STATIC void world_gen_routes_generate( u32 instance_id ){ } /* load all routes from model header */ -VG_STATIC void world_gen_routes_ent_init( world_instance *world ){ +static void world_gen_routes_ent_init( world_instance *world ){ vg_info( "Initializing routes\n" ); for( u32 i=0; ient_gate); i++ ){ @@ -887,13 +889,13 @@ VG_STATIC void world_gen_routes_ent_init( world_instance *world ){ for( u32 i=0; ient_route); i++ ){ ent_route *route = mdl_arritm(&world->ent_route,i); - mdl_transform_m4x3( &route->transform, route->board_transform ); + mdl_transform_m4x3( &route->anon.transform, route->board_transform ); - route->official_track_id = 0xffffffff; + route->anon.official_track_id = 0xffffffff; for( u32 j=0; jmeta,route->pstr_name))){ - route->official_track_id = j; + route->anon.official_track_id = j; } } @@ -941,7 +943,7 @@ VG_STATIC void world_gen_routes_ent_init( world_instance *world ){ * ----------------------------------------------------------------------------- */ -VG_STATIC void world_routes_init(void) +static void world_routes_init(void) { world_static.current_run_version = 200; world_static.time = 300.0; @@ -951,7 +953,7 @@ VG_STATIC void world_routes_init(void) shader_routeui_register(); } -VG_STATIC void world_routes_update( world_instance *world ) +static void world_routes_update( world_instance *world ) { world_static.time += vg.time_delta; @@ -968,7 +970,7 @@ VG_STATIC void world_routes_update( world_instance *world ) } } -VG_STATIC void world_routes_fixedupdate( world_instance *world ) +static void world_routes_fixedupdate( world_instance *world ) { rb_solver_reset(); @@ -980,7 +982,8 @@ VG_STATIC void world_routes_fixedupdate( world_instance *world ) int l = rb_sphere__scene( particle->obj.rb.to_world, &particle->obj.inf.sphere, - NULL, &world->rb_geo.inf.scene, buf ); + NULL, &world->rb_geo.inf.scene, buf, + k_material_flag_ghosts ); for( int j=0; jobj.rb; @@ -1012,16 +1015,15 @@ VG_STATIC void world_routes_fixedupdate( world_instance *world ) } } -VG_STATIC void bind_terrain_noise(void); -VG_STATIC void world_bind_light_array( world_instance *world, +static void bind_terrain_noise(void); +static void world_bind_light_array( world_instance *world, GLuint shader, GLuint location, int slot ); -VG_STATIC void world_bind_light_index( world_instance *world, +static void world_bind_light_index( world_instance *world, GLuint shader, GLuint location, int slot ); -VG_STATIC void world_routes_update_timer_texts( world_instance *world ) -{ +static void world_routes_update_timer_texts( world_instance *world ){ world_render.timer_text_count = 0; for( u32 i=0; ient_route); i++ ){ @@ -1093,8 +1095,9 @@ VG_STATIC void world_routes_update_timer_texts( world_instance *world ) highscore_intr( text->text+2, route->checkpoints_count+1, 1, ' ' ); text->text[3] = '\0'; } - - float align_r = font3d_string_width( &gui.font, 0, text->text ); + + gui_font3d.font = &gui.font; + float align_r = font3d_string_width( 0, text->text ); align_r *= size; v3f positions[] = { @@ -1122,7 +1125,7 @@ VG_STATIC void world_routes_update_timer_texts( world_instance *world ) } } -VG_STATIC void world_routes_fracture( world_instance *world, ent_gate *gate, +static void world_routes_fracture( world_instance *world, ent_gate *gate, v3f imp_co, v3f imp_v ) { world_render.text_particle_count = 0; @@ -1196,7 +1199,7 @@ VG_STATIC void world_routes_fracture( world_instance *world, ent_gate *gate, } } -VG_STATIC void render_world_routes( world_instance *world, camera *cam, +static void render_world_routes( world_instance *world, camera *cam, int layer_depth ) { m4x3f identity_matrix; @@ -1234,7 +1237,7 @@ VG_STATIC void render_world_routes( world_instance *world, camera *cam, /* timers * ---------------------------------------------------- */ if( layer_depth == 0 ){ - font3d_bind( &gui.font, cam ); + font3d_bind( &gui.font, k_font_shader_default, 0, world, cam ); for( u32 i=0; iroute->factive; shader_model_font_uColour( colour ); - font3d_simple_draw( &gui.font, 0, text->text, cam, text->transform ); + font3d_simple_draw( 0, text->text, cam, text->transform ); } shader_model_font_uOffset( (v4f){0.0f,0.0f,0.0f,1.0f} );