#include "world_gate.h"
#include "world_load.h"
#include "highscores.h"
+#include "network.h"
#include "font.h"
#include "pointcloud.h"
#include "shaders/scene_route.h"
#include "shaders/routeui.h"
-
+#if 0
static
void world_routes_local_set_record( world_instance *world, ent_route *route,
f64 lap_time )
vg_warn( "There is no associated track for this record...\n" );
}
}
-
+#endif
static void world_routes_clear( world_instance *world )
{
vg_info( "%u %f\n", world_static.current_run_version, world_static.time );
if( valid_count==route->checkpoints_count ){
- double lap_time = world_static.time - start_time;
- world_routes_local_set_record( world, route, lap_time );
+ f64 lap_time = world_static.time - start_time;
+ //world_routes_local_set_record( world, route, lap_time );
+
+ if( route->anon.official_track_id != 0xffffffff ){
+ struct track_info *ti = &track_infos[ route->anon.official_track_id ];
+ if( ti->achievement_id ){
+ steam_set_achievement( ti->achievement_id );
+ steam_store_achievements();
+ }
+ }
+
+ addon_alias *alias = &world_static.addon_hub->alias;
+ if( world_static.active_instance )
+ alias = &world_static.addon_client->alias;
+
+ /* TODO: we should probably generate this once. and also ditch
+ * sub-worlds */
+ char mod_uid[ ADDON_UID_MAX ];
+ addon_alias_uid( &world_static.addon_client->alias, mod_uid );
+ network_publish_laptime( mod_uid,
+ mdl_pstr( &world->meta, route->pstr_name ),
+ lap_time );
}
route->valid_checkpoints = valid_count+1;
for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
ent_route *route = mdl_arritm( &world->ent_route, i );
- int target = route->active_checkpoint == 0xffff? 0: 1;
- route->factive = vg_lerpf( route->factive, target, 0.6f*vg.time_delta );
+ int target = (route->active_checkpoint == 0xffff? 0: 1) ||
+ skaterift.activity == k_skaterift_respawning;
+ route->factive = vg_lerpf( route->factive, target,
+ 0.6f*vg.time_frame_delta );
}
for( u32 i=0; i<world_render.text_particle_count; i++ ){
}
}
-static void world_routes_fixedupdate( world_instance *world )
-{
+static void world_routes_fixedupdate( world_instance *world ){
rb_solver_reset();
for( u32 i=0; i<world_render.text_particle_count; i++ ){
}
}
+static void render_gate_markers( int run_id, ent_gate *gate ){
+ for( u32 j=0; j<4; j++ ){
+ if( gate->routes[j] == run_id ){
+ m4x3f mmdl;
+ ent_gate_get_mdl_mtx( gate, mmdl );
+ shader_model_gate_uMdl( mmdl );
+ mdl_draw_submesh( &world_gates.sm_marker[j] );
+ break;
+ }
+ }
+}
+
static void render_world_routes( world_instance *world, camera *cam,
- int layer_depth )
-{
+ int layer_depth ){
m4x3f identity_matrix;
m4x3_identity( identity_matrix );
/* skip writing into the motion vectors for this */
glDrawBuffers( 1, (GLenum[]){ GL_COLOR_ATTACHMENT0 } );
+ glDisable( GL_CULL_FACE );
- for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
- ent_route *route = mdl_arritm( &world->ent_route, i );
+ if( skaterift.activity == k_skaterift_respawning ){
+ for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
+ ent_route *route = mdl_arritm( &world->ent_route, i );
- if( route->active_checkpoint != 0xffff ){
v4f colour;
- float brightness = 0.3f + world->ub_lighting.g_day_phase;
- v3_muls( route->colour, brightness, colour );
- colour[3] = 1.0f-route->factive;
+ v3_muls( route->colour, 1.6666f, colour );
+ colour[3] = 0.0f;
shader_model_gate_uColour( colour );
- u32 next = route->active_checkpoint+1+layer_depth;
- next = next % route->checkpoints_count;
- next += route->checkpoints_start;
+ for( u32 j=0; j<mdl_arrcount(&world->ent_gate); j ++ ){
+ ent_gate *gate = mdl_arritm( &world->ent_gate, j );
+ if( !(gate->flags & k_ent_gate_nonlocal) )
+ render_gate_markers( i, gate );
+ }
+ }
+ }
+ else{
+ for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
+ ent_route *route = mdl_arritm( &world->ent_route, i );
- ent_checkpoint *cp = mdl_arritm( &world->ent_checkpoint, next );
- ent_gate *gate = mdl_arritm( &world->ent_gate, cp->gate_index );
+ if( route->active_checkpoint != 0xffff ){
+ v4f colour;
+ float brightness = 0.3f + world->ub_lighting.g_day_phase;
+ v3_muls( route->colour, brightness, colour );
+ colour[3] = 1.0f-route->factive;
- m4x3f mmdl;
- ent_gate_get_mdl_mtx( gate, mmdl );
- shader_model_gate_uMdl( mmdl );
+ shader_model_gate_uColour( colour );
- for( u32 j=0; j<4; j++ ){
- if( gate->routes[j] == i ){
- mdl_draw_submesh( &world_gates.sm_marker[j] );
- break;
- }
+ u32 next = route->active_checkpoint+1+layer_depth;
+ next = next % route->checkpoints_count;
+ next += route->checkpoints_start;
+
+ ent_checkpoint *cp = mdl_arritm( &world->ent_checkpoint, next );
+ ent_gate *gate = mdl_arritm( &world->ent_gate, cp->gate_index );
+ render_gate_markers( i, gate );
}
}
}
+ glEnable( GL_CULL_FACE );
glDrawBuffers( 2, (GLenum[]){ GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 } );
}