From 373262996d25190c899a886dc97257c126e6160d Mon Sep 17 00:00:00 2001 From: hgn Date: Thu, 6 Mar 2025 14:14:43 +0000 Subject: [PATCH] Menu world locks and fix rendering issue in depth map --- build.c | 2 +- content_skaterift/maps/mp_line1/addon.inf | Bin 82 -> 82 bytes content_skaterift/models/rs_superworlds.mdl | Bin 233784 -> 245880 bytes src/addon_types.h | 2 + src/menu.c | 51 +++++++++++++++----- src/world_map.c | 27 ++++++++--- src/world_map.h | 1 + src/world_render.c | 18 ++++++- 8 files changed, 78 insertions(+), 23 deletions(-) diff --git a/build.c b/build.c index 20d180d..ec772ba 100644 --- a/build.c +++ b/build.c @@ -119,7 +119,7 @@ void build_game_metadata(void) { "Mt.Zero Island", "Australia", "content_skaterift/maps/mp_mtzero/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_MTZERO | ADDON_REG_PREMIUM }, { "Flat World", "...", "content_skaterift/maps/dev_flatworld/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN }, { "Heaven", "...", "content_skaterift/maps/dev_heaven/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_HIDDEN }, - { "Valley", "Cambodia", "content_skaterift/maps/mp_line1/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_PREMIUM }, + { "Valley", "Cambodia", "content_skaterift/maps/mp_line1/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_VALLEY | ADDON_REG_PREMIUM }, { "Training Island", "Australia", "content_skaterift/maps/dev_tutorial/addon.inf", ADDON_REG_CAMPAIGN }, { "Center Island", "Australia", "content_skaterift/maps/dev_hub/addon.inf", ADDON_REG_CAMPAIGN }, { "Downtown", "USA, Georgia", "content_skaterift/maps/mp_spawn/addon.inf", ADDON_REG_CAMPAIGN | ADDON_REG_CITY | ADDON_REG_PREMIUM } diff --git a/content_skaterift/maps/mp_line1/addon.inf b/content_skaterift/maps/mp_line1/addon.inf index 0e44d05ea3480ecbfa1ba669a9e66f12770d1eeb..e7d0d6ce46a344a5ae99f0101b9defd12184d715 100644 GIT binary patch delta 8 PcmWFvn&8jO$iM&q3D5zE delta 8 PcmWFvn&8jOz`y_i3C#hA diff --git a/content_skaterift/models/rs_superworlds.mdl b/content_skaterift/models/rs_superworlds.mdl index 71733c5dfbd7e45abd85b2b3023bf7ff2f6e5a84..48523f982ece760ad632414ab9846604cedf6610 100644 GIT binary patch delta 12051 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 delta 224 zcmey-z`tV=-vkxeJq!#Cj6hsmQk0pOUJPVGzyqKl>qJL!Rsm)ZBUW7Y1CRkyDFMW} zDLL`Ei6yB;nTa_d^&Ar?N;AD+nYd1hRf3g)fo0-ZaitC*;|3oCg8@{1S!z)UNG%9( zoMU1*V=$SGv1;-Z#u%1WK(P4(qYfjOH93O$4up}w;=q_Nc_E87W5MLJK(b--ParvA ovMQ@Kflags & ADDON_REG_MTZERO ) + unlocked = _skaterift_script_check_unlocked( k_escript_script_id_ch2s1 ); + if( reg->flags & ADDON_REG_CITY ) + unlocked = _skaterift_script_check_unlocked( k_escript_script_id_ch3s1 ); + if( reg->flags & ADDON_REG_VALLEY ) + unlocked = _skaterift_script_check_unlocked( k_escript_script_id_ch4s1a ); - vg_msg msg; - vg_msg_init( &msg, reg->metadata, reg->metadata_len ); + menu.world_list_entries[ menu.world_list_display_count ] = unlocked? reg: NULL; - if( vg_msg_seekframe( &msg, "workshop" ) ) + if( unlocked ) { - name = vg_msg_getkvstr( &msg, "title" ); - } + const char *name = NULL; + vg_msg msg; + vg_msg_init( &msg, reg->metadata, reg->metadata_len ); - if( !name ) - name = reg->alias.foldername; + if( vg_msg_seekframe( &msg, "workshop" ) ) + { + name = vg_msg_getkvstr( &msg, "title" ); + } + + if( !name ) + name = reg->alias.foldername; - menu.world_list_names[ menu.world_list_display_count ] = name; + menu.world_list_names[ menu.world_list_display_count ] = name; + } + else + { + menu.world_list_names[ menu.world_list_display_count ] = "..."; + } menu.world_list_display_count ++; } } diff --git a/src/world_map.c b/src/world_map.c index 3acda21..0a618ac 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -374,7 +374,8 @@ void render_world_map(void) glDisable( GL_CULL_FACE ); vg_camera cam, *smooth_cam = &world_map.superworld_cam; - ent_camera *cam_temp = af_arritm( &world_map.ent_camera, world_map.superworld_list_selected ); + ent_camera *cam_temp = af_arritm( &world_map.ent_camera, world_map.selected_superworld_locked? + k_superworld_max: world_map.superworld_list_selected ); ent_camera_unpack( cam_temp, &cam ); vg_camera_lerp( smooth_cam, &cam, vg.time_frame_delta * 6.0f, smooth_cam ); @@ -781,7 +782,8 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al ui_split( planet_box, k_ui_axis_h, 28, 0, planet_box_title, planet_box ); ui_fill( ctx, planet_box_title, ui_opacity( GUI_COL_DARK, 0.2f ) ); ctx->font = &vgf_default_large; - ui_text( ctx, planet_box_title, _superworld_names[world_map.superworld_list_selected], 1, + ui_text( ctx, planet_box_title, world_map.selected_superworld_locked? "Locked..": + _superworld_names[world_map.superworld_list_selected], 1, k_ui_align_middle_center, ui_colour(ctx,k_ui_yellow) ); ui_px change_w = 48, @@ -870,16 +872,25 @@ void world_map_gui( ui_context *ctx, ui_rect main_area, i32 mh, i32 mv, bool *al { addon_reg *reg = menu.world_list_entries[i]; - bool selected = reg == menu.clicked_world_reg; + bool clickable = 1; - if( selected ) + if( reg ) { - ui_rect sel_box, _null; - ui_split( panel, k_ui_axis_h, ctx->font->sy*2, 8, sel_box, _null ); - ui_outline( ctx, sel_box, 2, ui_colour(ctx,k_ui_fg), 0 ); + bool selected = reg == menu.clicked_world_reg; + if( selected ) + { + ui_rect sel_box, _null; + ui_split( panel, k_ui_axis_h, ctx->font->sy*2, 8, sel_box, _null ); + ui_outline( ctx, sel_box, 2, ui_colour(ctx,k_ui_fg), 0 ); + } + clickable = !selected; + } + else + { + clickable = 0; } - if( menu_button( ctx, panel, R == (page_base + i), !selected, menu.world_list_names[i] ) ) + if( menu_button( ctx, panel, R == (page_base + i), clickable, menu.world_list_names[i] ) ) { menu.clicked_world_reg = reg; menu.clicked_world_name = menu.world_list_names[i]; diff --git a/src/world_map.h b/src/world_map.h index 95dd782..2b8e7bb 100644 --- a/src/world_map.h +++ b/src/world_map.h @@ -38,6 +38,7 @@ struct world_map i32 superworld_list_selected, superworld_actual_world; + bool selected_superworld_locked; vg_camera superworld_cam; v2f view_centroid; diff --git a/src/world_render.c b/src/world_render.c index 98b27e9..f9f47e9 100644 --- a/src/world_render.c +++ b/src/world_render.c @@ -1518,7 +1518,14 @@ void render_world_depth( world_instance *world, vg_camera *cam ) world_link_lighting_ub( world, _shader_scene_depth.id ); mesh_bind( &world->mesh_geo ); - mesh_draw( &world->mesh_geo ); + for( int i=0; isurface_count; i++ ) + { + struct world_surface *mat = &world->surfaces[i]; + if( mat->info.flags & k_material_flag_ghosts ) continue; + + mdl_submesh *sm = &mat->sm_geo; + mdl_draw_submesh( sm ); + } } void render_world_position( world_instance *world, vg_camera *cam ) @@ -1534,7 +1541,14 @@ void render_world_position( world_instance *world, vg_camera *cam ) world_link_lighting_ub( world, _shader_scene_position.id ); mesh_bind( &world->mesh_geo ); - mesh_draw( &world->mesh_geo ); + for( int i=0; isurface_count; i++ ) + { + struct world_surface *mat = &world->surfaces[i]; + if( mat->info.flags & k_material_flag_ghosts ) continue; + + mdl_submesh *sm = &mat->sm_geo; + mdl_draw_submesh( sm ); + } } struct ui_enum_opt skybox_setting_options[] = { -- 2.25.1