stuff
[carveJwlIkooP6JGAAIwe30JlM.git] / world_routes.h
index f899694a574668e08d4a19454f1bf3bc7764b33b..9cee0df0d19b38dbd41b5c84042cc9cdaded5b83 100644 (file)
@@ -4,6 +4,8 @@
 #include "common.h"
 #include "model.h"
 #include "gate.h"
+#include "world_info.h"
+#include "highscores.h"
 
 #include "shaders/vblend.h"
 #include "shaders/route.h"
@@ -36,7 +38,7 @@ struct subworld_routes
 
    struct route
    {
-      const char *name;
+      u32 track_id;
       v4f colour;
 
       u32 start;
@@ -69,6 +71,8 @@ struct subworld_routes
          float xpos;
       }
       ui;
+
+      m4x3f scoreboard_transform;
    }
    *routes;
 
@@ -550,6 +554,35 @@ static void world_routes_ui_draw( u32 route, v4f colour, float offset )
    pr->ui.xpos = vg_lerpf( pr->ui.xpos, -main_block_size * 0.5f, 0.03f );
 }
 
+static void world_routes_local_set_record( u32 route, double lap_time )
+{
+   vg_success( "  NEW LAP TIME: %f\n", lap_time );
+
+   struct subworld_routes *r = subworld_routes();
+   struct route *pr = &r->routes[route];
+
+   if( pr->track_id != 0xffffffff )
+   {
+      double time_centiseconds = lap_time * 100.0;
+      if( time_centiseconds > (float)0xfffe )
+         return;
+
+      highscore_record temp;
+      temp.trackid  = pr->track_id;
+      temp.datetime = time(NULL);
+      temp.playerid = 0;
+      temp.points   = 0;
+      temp.time     = time_centiseconds;
+
+      highscores_push_record( &temp );
+      track_infos[ pr->track_id ].push = 1;
+   }
+   else
+   {
+      vg_warn( "There is no associated track for this record...\n" );
+   }
+}
+
 /* 
  * Will scan the whole run for two things;
  *   1: we set a new record for the total, complete loop around the course
@@ -635,7 +668,7 @@ static void world_routes_verify_run( u32 route )
 
    if( verified )
    {
-      vg_success( "  NEW LAP TIME: %f\n", lap_time );
+      world_routes_local_set_record( route, lap_time );
       world_routes_ui_popfirst(route);
       pr->ui.fade_count ++;
    }
@@ -1106,10 +1139,21 @@ static void world_routes_loadfrom( mdl_header *mdl )
          v3_copy( inf->colour, route->colour );
          route->colour[3] = 1.0f;
 
-         route->name = NULL;
+
+         route->track_id = 0xffffffff;
+         for( u32 j=0; j<vg_list_size(track_infos); j++ )
+         {
+            if( !strcmp( mdl_pstr(mdl,pnode->pstr_name), track_infos[j].name ))
+            {
+               route->track_id = j;
+               break;
+            }
+         }
+
          route->start = inf->id_start;
          route->active = 0;
          route->factive = 0.0f;
+         mdl_node_transform( pnode, route->scoreboard_transform );
 
          /* OpenGL strips */
          glGenVertexArrays( 1, &route->ui.vao );