From: hgn Date: Fri, 6 Oct 2023 09:35:11 +0000 (+0100) Subject: route markers in map, fix cubemap rendering in menu X-Git-Url: https://skaterift.com/git/?a=commitdiff_plain;h=603805f69c5484316a52ee099d03254c5a1096f3;p=carveJwlIkooP6JGAAIwe30JlM.git route markers in map, fix cubemap rendering in menu --- diff --git a/gui.h b/gui.h index 5cfe468..7c2dbb6 100644 --- a/gui.h +++ b/gui.h @@ -11,6 +11,8 @@ enum gui_icon { k_gui_icon_board, k_gui_icon_world, k_gui_icon_rift, + k_gui_icon_rift_run, + k_gui_icon_friend, k_gui_icon_count, }; @@ -25,9 +27,13 @@ struct{ struct icon_call { enum gui_icon icon; v4f location; + v4f colour; + int colour_changed; } icon_draw_buffer[32]; u32 icon_draw_count; + v4f cur_icon_colour; + int colour_changed; char location[64]; f64 location_time; @@ -52,7 +58,7 @@ struct{ mdl_submesh *icons[ k_gui_icon_count ]; } -static gui; +static gui = {.cur_icon_colour = {1.0f,1.0f,1.0f,1.0f},.colour_changed=1}; static void gui_helper_action( const char *bindstr, const char *text ){ @@ -66,9 +72,7 @@ void gui_helper_action( const char *bindstr, const char *text ){ helper->text = text; } -static -void gui_draw(void) -{ +static void gui_draw(void){ if( v3_dist2(localplayer.rb.co,gui.trick_co) > 2.0f ){ gui.trick_type = k_guitrick_type_none; } @@ -121,13 +125,16 @@ void gui_draw(void) m4x3_identity( mmdl ); shader_model_font_uMdl( mmdl ); - shader_model_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} ); glActiveTexture( GL_TEXTURE0 ); glBindTexture( GL_TEXTURE_2D, gui.icons_texture ); shader_model_font_uTexMain( 0 ); for( u32 i=0; icolour_changed ) + shader_model_font_uColour( call->colour ); + shader_model_font_uOffset( call->location ); mdl_submesh *sm = gui.icons[ call->icon ]; @@ -217,8 +224,7 @@ void gui_draw(void) gui.helper_count = 0; } -static -int gui_location_print_ccmd( int argc, const char *argv[] ){ +static int gui_location_print_ccmd( int argc, const char *argv[] ){ if( argc > 0 ){ char new_loc[64]; vg_str str; @@ -261,6 +267,15 @@ static void gui_draw_icon( enum gui_icon icon, v2f co, f32 size ){ call->location[1] = co[1] * (f32)vg.window_y; call->location[2] = 0.0f; call->location[3] = size * (f32)vg.window_x; + + v4_copy( gui.cur_icon_colour, call->colour ); + call->colour_changed = gui.colour_changed; + gui.colour_changed = 0; +} + +static void gui_icon_setcolour( v4f colour ){ + gui.colour_changed = 1; + v4_copy( colour, gui.cur_icon_colour ); } static mdl_submesh *gui_find_icon( const char *name ){ @@ -289,6 +304,8 @@ static void gui_init(void){ gui.icons[ k_gui_icon_board ] = gui_find_icon( "icon_board" ); gui.icons[ k_gui_icon_world ] = gui_find_icon( "icon_world" ); gui.icons[ k_gui_icon_rift ] = gui_find_icon( "icon_rift" ); + gui.icons[ k_gui_icon_rift_run ] = gui_find_icon( "icon_rift_run" ); + gui.icons[ k_gui_icon_friend ] = gui_find_icon( "icon_friend" ); vg_linear_clear( vg_mem.scratch ); if( !mdl_arrcount( &gui.model_icons.textures ) ) diff --git a/models_src/rs_icons.mdl b/models_src/rs_icons.mdl index 84f3129..296df3f 100644 Binary files a/models_src/rs_icons.mdl and b/models_src/rs_icons.mdl differ diff --git a/respawn.c b/respawn.c index e10d0cf..5abb042 100644 --- a/respawn.c +++ b/respawn.c @@ -220,6 +220,17 @@ static void respawn_chooser_pre_update(void){ respawn_map_draw_icon( cam, k_gui_icon_rift, gate->co[0] ); } } + + for( u32 i=0; ient_route); i++ ){ + ent_route *route = mdl_arritm( &world->ent_route, i ); + + v4f colour; + v4_copy( route->colour, colour ); + v3_muls( colour, 1.6666f, colour ); + gui_icon_setcolour( colour ); + respawn_map_draw_icon( cam, k_gui_icon_rift_run, + route->board_transform[3] ); + } } static void respawn_begin_chooser(void){ diff --git a/skaterift.c b/skaterift.c index 388e37e..5b69d56 100644 --- a/skaterift.c +++ b/skaterift.c @@ -513,6 +513,7 @@ static void render_scene(void){ GL_COLOR_ATTACHMENT1 } ); view_world = &world_static.instances[respawn_chooser.world_id]; render_world_override( view_world ); + render_world_routes( view_world, &skaterift.cam, 1 ); } else{ render_world( view_world, &skaterift.cam, 0 ); @@ -585,7 +586,7 @@ static void render_main_game(void){ /* --------------------------------------------------------------------- */ world_instance *view_world = localplayer.viewable_world; - if( view_world != NULL ){ + if( (view_world != NULL) && (skaterift.activity != k_skaterift_respawning) ){ render_world_cubemaps( view_world ); ent_gate *gate = view_world->rendering_gate; diff --git a/world_routes.c b/world_routes.c index 4998cc1..36d70d7 100644 --- a/world_routes.c +++ b/world_routes.c @@ -960,8 +960,10 @@ static void world_routes_update( world_instance *world ) for( u32 i=0; ient_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; iroutes[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 ); @@ -1292,37 +1304,48 @@ static void render_world_routes( world_instance *world, camera *cam, /* skip writing into the motion vectors for this */ glDrawBuffers( 1, (GLenum[]){ GL_COLOR_ATTACHMENT0 } ); + glDisable( GL_CULL_FACE ); - for( u32 i=0; ient_route); i++ ){ - ent_route *route = mdl_arritm( &world->ent_route, i ); + if( skaterift.activity == k_skaterift_respawning ){ + for( u32 i=0; ient_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; jent_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; ient_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 } ); }