From 603805f69c5484316a52ee099d03254c5a1096f3 Mon Sep 17 00:00:00 2001 From: hgn Date: Fri, 6 Oct 2023 10:35:11 +0100 Subject: [PATCH] route markers in map, fix cubemap rendering in menu --- gui.h | 31 +++++++++++++---- models_src/rs_icons.mdl | Bin 28256 -> 40752 bytes respawn.c | 11 ++++++ skaterift.c | 3 +- world_routes.c | 73 ++++++++++++++++++++++++++-------------- 5 files changed, 85 insertions(+), 33 deletions(-) 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 84f31291d6d77059e237be94365b131714179067..296df3fba5fff966fb1fec659814053447f61f41 100644 GIT binary patch delta 10291 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 r$P6`GDus1K5Hh}{GE;oe@ 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 } ); } -- 2.25.1