update helpers/location to 'frosted' ui
[carveJwlIkooP6JGAAIwe30JlM.git] / world_routes.c
index b0af9048525e40b15f6bfdb5c44af64d25fa714e..c4b339385bc9794df093d1789f76d93b321c9382 100644 (file)
@@ -1,10 +1,11 @@
+#pragma once
+
 /*
- * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved
+ * Copyright (C) 2021-2024 Mt.ZERO Software - All Rights Reserved
+ *
+ * World routes
  */
 
-#ifndef ROUTES_C
-#define ROUTES_C
-
 #include <time.h>
 #include "entity.h"
 #include "world_routes.h"
@@ -21,8 +22,9 @@
 #include "shaders/scene_route.h"
 #include "shaders/routeui.h"
 #include "ent_region.h"
+#include "scene_rigidbody.h"
 
-static void world_routes_clear( world_instance *world )
+void world_routes_clear( world_instance *world )
 {
    for( u32 i=0; i<mdl_arrcount( &world->ent_route ); i++ ){
       ent_route *route = mdl_arritm( &world->ent_route, i );
@@ -142,8 +144,7 @@ static void world_routes_time_lap( world_instance *world, ent_route *route ){
 /*
  * When going through a gate this is called for bookkeeping purposes
  */
-static void world_routes_activate_entry_gate( world_instance *world, 
-                                                 ent_gate *rg )
+void world_routes_activate_entry_gate( world_instance *world, ent_gate *rg )
 {
    world_static.last_use = world_static.time;
    ent_gate *dest = mdl_arritm( &world->ent_gate, rg->target );
@@ -475,14 +476,14 @@ static void world_routes_gen_meshes( world_instance *world, u32 route_id,
    scene_copy_slice( sc, &route->sm );
 }
 
-static 
 struct world_surface *world_tri_index_surface( world_instance *world, 
                                                  u32 index );
 
 /* 
  * Create the strips of colour that run through the world along course paths
  */
-static void world_gen_routes_generate( u32 instance_id ){
+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();
@@ -539,7 +540,8 @@ static void world_gen_routes_generate( u32 instance_id ){
 }
 
 /* load all routes from model header */
-static void world_gen_routes_ent_init( world_instance *world ){
+void world_gen_routes_ent_init( world_instance *world )
+{
    vg_info( "Initializing routes\n" );
 
    for( u32 i=0; i<mdl_arrcount(&world->ent_gate); i++ ){
@@ -612,9 +614,10 @@ static void world_gen_routes_ent_init( world_instance *world ){
    world_routes_clear( world );
 }
 
-static void world_routes_recv_scoreboard( world_instance *world, 
-                                          vg_msg *body, u32 route_id,
-                                          enum request_status status ){
+void world_routes_recv_scoreboard( world_instance *world, 
+                                   vg_msg *body, u32 route_id,
+                                   enum request_status status )
+{
    if( route_id >= mdl_arrcount( &world->ent_route ) ){
       vg_error( "Scoreboard route_id out of range (%u)\n", route_id );
       return;
@@ -644,16 +647,15 @@ static void world_routes_recv_scoreboard( world_instance *world,
  * -----------------------------------------------------------------------------
  */
 
-static void world_routes_init(void){
+void world_routes_init(void)
+{
    world_static.current_run_version = 200;
    world_static.time = 300.0;
    world_static.last_use = 0.0;
-
-   shader_scene_route_register();
-   shader_routeui_register();
 }
 
-static void world_routes_update( world_instance *world ){
+void world_routes_update( world_instance *world )
+{
    world_static.time += vg.time_delta;
 
    for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
@@ -670,7 +672,8 @@ static void world_routes_update( world_instance *world ){
    }
 }
 
-static void world_routes_fixedupdate( world_instance *world ){
+void world_routes_fixedupdate( world_instance *world )
+{
    rb_solver_reset();
 
    rigidbody _null = {0};
@@ -697,7 +700,8 @@ static void world_routes_fixedupdate( world_instance *world ){
       }
    }
 
-   rb_presolve_contacts( rb_contact_buffer, rb_contact_count );
+   rb_presolve_contacts( rb_contact_buffer, 
+                         vg.time_fixed_delta, rb_contact_count );
 
    for( int i=0; i<rb_contact_count; i++ ){
       rb_contact_restitution( rb_contact_buffer+i, vg_randf64(&vg.rand) );
@@ -718,15 +722,16 @@ static void world_routes_fixedupdate( world_instance *world ){
    }
 }
 
-static void bind_terrain_noise(void);
-static void world_bind_light_array( world_instance *world,
-                                       GLuint shader, GLuint location, 
-                                       int slot );
-static void world_bind_light_index( world_instance *world,
-                                       GLuint shader, GLuint location, 
-                                       int slot );
+void bind_terrain_noise(void);
+void world_bind_light_array( world_instance *world,
+                             GLuint shader, GLuint location, 
+                             int slot );
+void world_bind_light_index( world_instance *world,
+                             GLuint shader, GLuint location, 
+                             int slot );
 
-static void world_routes_update_timer_texts( world_instance *world ){
+void world_routes_update_timer_texts( world_instance *world )
+{
    world_render.timer_text_count = 0;
 
    for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
@@ -834,8 +839,8 @@ static void world_routes_update_timer_texts( world_instance *world ){
    }
 }
 
-static void world_routes_fracture( world_instance *world, ent_gate *gate,
-                                      v3f imp_co, v3f imp_v )
+void world_routes_fracture( world_instance *world, ent_gate *gate,
+                            v3f imp_co, v3f imp_v )
 {
    world_render.text_particle_count = 0;
    
@@ -922,11 +927,11 @@ static void render_gate_markers( m4x3f world_mmdl, int run_id, ent_gate *gate ){
    }
 }
 
-static void render_world_routes( world_instance *world, 
-                                 world_instance *host_world,
-                                 m4x3f mmdl, camera *cam, 
-                                 int viewing_from_gate, int viewing_from_hub ){
-
+void render_world_routes( world_instance *world, 
+                          world_instance *host_world,
+                          m4x3f mmdl, vg_camera *cam, 
+                          int viewing_from_gate, int viewing_from_hub )
+{
    shader_scene_route_use();
    shader_scene_route_uTexGarbage(0);
    world_link_lighting_ub( host_world, _shader_scene_route.id );
@@ -1082,5 +1087,3 @@ static void render_world_routes( world_instance *world,
    glEnable( GL_CULL_FACE );
    glDrawBuffers( 2, (GLenum[]){ GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 } );
 }
-
-#endif /* ROUTES_C */