From 70ff4a83e5a4b35436388d9bb999c939559ac23f Mon Sep 17 00:00:00 2001 From: hgn Date: Tue, 21 Nov 2023 16:03:48 +0000 Subject: [PATCH] turbo chaos --- ent_miniworld.c | 74 ++++---------------------------------- ent_miniworld.h | 3 -- gui.h | 6 ++++ input.h | 4 +-- maps_src/dev_hub/main.mdl | Bin 211064 -> 214144 bytes menu.h | 9 +++++ models_src/rs_icons.mdl | Bin 43184 -> 56192 bytes player.c | 1 + respawn.c | 34 ++++-------------- shaders/scene_override.fs | 12 ++++++- shaders/scene_override.h | 16 +++++++-- skaterift.c | 54 +++++++++++++++++++++++++--- skaterift.h | 2 +- world_render.c | 3 +- world_render.h | 2 +- 15 files changed, 110 insertions(+), 110 deletions(-) diff --git a/ent_miniworld.c b/ent_miniworld.c index 0ceefda..af4d668 100644 --- a/ent_miniworld.c +++ b/ent_miniworld.c @@ -5,27 +5,6 @@ #include "gui.h" #include "menu.h" -static void miniworld_helper_default(void){ - gui_helper_clear(); - vg_str text; - - if( gui_new_helper( input_button_list[k_srbind_miniworld_teleport],&text)) - vg_strcat( &text, "Teleport" ); - - if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text )) - vg_strcat( &text, "Enter World" ); -} - -static void miniworld_helper_tele(void){ - gui_helper_clear(); - vg_str text; - if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text )) - vg_strcat( &text, "Confirm" ); - - if( gui_new_helper( input_button_list[k_srbind_mback],&text)) - vg_strcat( &text, "Cancel" ); -} - static void ent_miniworld_call( world_instance *world, ent_call *call ){ ent_miniworld *miniworld = mdl_arritm( &world->ent_miniworld, mdl_entity_id_id(call->id) ); @@ -38,14 +17,15 @@ static void ent_miniworld_call( world_instance *world, ent_call *call ){ mdl_transform_m4x3( &miniworld->transform, global_miniworld.mmdl ); global_miniworld.active = miniworld; - global_miniworld.mode = 0; - global_miniworld.dest_spawn = NULL; - miniworld_helper_default(); + + gui_helper_clear(); + vg_str text; + + if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text )) + vg_strcat( &text, "Enter World" ); } else if( call->function == 1 ){ global_miniworld.active = NULL; - global_miniworld.mode = 0; - global_miniworld.dest_spawn = NULL; gui_helper_clear(); if( miniworld->proxy ){ @@ -107,7 +87,7 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){ return; render_world_override( dest_world, host_world, global_miniworld.mmdl, cam, - global_miniworld.dest_spawn ); + NULL, 0.0f ); render_world_routes( dest_world, host_world, global_miniworld.mmdl, cam, 0, 1 ); @@ -156,30 +136,15 @@ static void ent_miniworld_preupdate(void){ (world_static.active_instance != k_world_purpose_hub) || (!miniworld) || (dest->status != k_world_status_loaded) ){ - - if( global_miniworld.mode ){ - global_miniworld.mode = 0; - global_miniworld.dest_spawn = 0; - menu.disable_open = 0; - srinput.state = k_input_state_resume; - gui_helper_clear(); - } return; } if( button_down( k_srbind_miniworld_resume ) ){ - global_miniworld.mode = 0; global_miniworld.transition = 1; global_miniworld.t = 0.0f; global_miniworld.cam = skaterift.cam; - - if( global_miniworld.dest_spawn ){ - v3_copy( global_miniworld.dest_spawn->transform.co, - dest->player_co ); - } world_switch_instance(1); - global_miniworld.dest_spawn = NULL; srinput.state = k_input_state_resume; menu.disable_open = 0; gui_helper_clear(); @@ -187,31 +152,6 @@ static void ent_miniworld_preupdate(void){ audio_oneshot( &audio_ui[2], 1.0f, 0.0f ); audio_unlock(); } - else { - if( global_miniworld.mode == 1 ){ - if( button_down(k_srbind_mback) ){ - global_miniworld.mode = 0; - global_miniworld.dest_spawn = NULL; - menu.disable_open = 0; - srinput.state = k_input_state_resume; - miniworld_helper_default(); - } - else { - m4x3f mmdl_inv; - m4x3_invert_full( global_miniworld.mmdl, mmdl_inv ); - v3f lco; - m4x3_mulv( mmdl_inv, localplayer.rb.co, lco ); - global_miniworld.dest_spawn = world_find_closest_spawn( dest, lco ); - } - } - else { - if( button_down( k_srbind_miniworld_teleport ) ){ - global_miniworld.mode = 1; - menu.disable_open = 1; - miniworld_helper_tele(); - } - } - } } static void ent_miniworld_goback(void){ diff --git a/ent_miniworld.h b/ent_miniworld.h index 73d0c46..e963a09 100644 --- a/ent_miniworld.h +++ b/ent_miniworld.h @@ -6,13 +6,10 @@ struct { ent_miniworld *active; int transition; - int mode; f32 t; m4x3f mmdl; camera cam; - - ent_spawn *dest_spawn; } static global_miniworld; diff --git a/gui.h b/gui.h index 5b662b2..f3da9a4 100644 --- a/gui.h +++ b/gui.h @@ -7,11 +7,14 @@ enum gui_icon { k_gui_icon_tick = 0, + k_gui_icon_tick_2d, k_gui_icon_exclaim, + k_gui_icon_exclaim_2d, k_gui_icon_board, k_gui_icon_world, k_gui_icon_rift, k_gui_icon_rift_run, + k_gui_icon_rift_run_2d, k_gui_icon_friend, k_gui_icon_player, @@ -314,11 +317,14 @@ static void gui_init(void){ mdl_load_metadata_block( &gui.model_icons, alloc ); gui.icons[ k_gui_icon_tick ] = gui_find_icon( "icon_tick" ); + gui.icons[ k_gui_icon_tick_2d ] = gui_find_icon( "icon_tick2d" ); gui.icons[ k_gui_icon_exclaim ] = gui_find_icon( "icon_exclaim" ); + gui.icons[ k_gui_icon_exclaim_2d ] = gui_find_icon( "icon_exclaim2d" ); 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_rift_run_2d ] = gui_find_icon( "icon_rift_run2d" ); gui.icons[ k_gui_icon_friend ] = gui_find_icon( "icon_friend" ); gui.icons[ k_gui_icon_player ] = gui_find_icon( "icon_player" ); diff --git a/input.h b/input.h index b742119..d60fece 100644 --- a/input.h +++ b/input.h @@ -125,13 +125,13 @@ static vg_input_op *input_axis_list[] = { [k_sraxis_mbrowse_h] = (vg_input_op[]){ vg_mode_sub, vg_keyboard, SDLK_LEFT, vg_mode_add, vg_keyboard, SDLK_RIGHT, - vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTX, + vg_mode_add, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTX, vg_end }, [k_sraxis_mbrowse_v] = (vg_input_op[]){ vg_mode_add, vg_keyboard, SDLK_UP, vg_mode_sub, vg_keyboard, SDLK_DOWN, - vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTY, + vg_mode_sub, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTY, vg_end }, [k_sraxis_replay_h] = (vg_input_op[]){ diff --git a/maps_src/dev_hub/main.mdl b/maps_src/dev_hub/main.mdl index 4798e481c3e9ff36daebffea9e7a389c7a62ba69..9274c3f08d193bbf3fd803eb2381610689407a8e 100644 GIT binary patch delta 4342 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 diff --git a/menu.h b/menu.h index 3bbaf7c..0a49777 100644 --- a/menu.h +++ b/menu.h @@ -247,9 +247,18 @@ static void menu_trigger_item( ent_menuitem *item ){ } else if( MDL_CONST_PSTREQ( &menu.model, q, "reset" ) ){ + + /* FIXME: Should only be availible in CLIENT WORLD */ + + menu_close(); + respawn_begin_chooser(); + + /* FIXME: Need a back to hub button */ +#if 0 srinput.state = k_input_state_resume; menu_close(); ent_miniworld_goback(); +#endif } else if( MDL_CONST_PSTREQ( &menu.model, q, "credits" ) ){ diff --git a/models_src/rs_icons.mdl b/models_src/rs_icons.mdl index 45dbefe8f8a12c99d223efa5d66de5965d220838..8e48c54223358472e50d294a7c25dd3927db125b 100644 GIT binary patch delta 3286 zcmYk8eNa^A6~-@kk-aO6V2Yvw0ny!^xYWgQ8p>Yi>K}GP1QDBx9|$WS?t&}`*w7-f z)XJb12Xf*B8$cYRE*c}qHX`>zm}o20MoTj_gJV?8m<(|OVycb(FzNH&-J9&rz&^io zo_pT&p7-5_-oFRCFU@LQ8avK$To8V$YpR^Coz+mjmm`?t=CrL|5WcX>}` z#GJN_One|R%~q&`cOKsV==X+y)g|{{eNkR>EVTDu(O-&VL*wELu?x)1+XC+$h#`2d zgQrdX@`L|%$+JtJq~6SL5xt(Ew58IZU}0vZoyw3IH<>j&@BaFpL@64RPdFf06V$GX zQIZri8QjA z7vinwr6t&ACSBib5V+bal2M`OAh&0~^pZkJTMU9V*DftnC~u2FYaMe-3qaqkp(9)L z+IY=dQk)Nmfg|}ADc*E z{Qh-09AyS8D14hx)ERoe#`LMdU+wt zz#r%7wcV@I*f|)F;b}VFpeE-OUN|d>_Vb{{e4)NLfJD4BQ9g zR=pszu>s!$W`D}d(LTJpT`#D3i*)%o8^8A!r7`-)m&$~1Q8}ofU`%2?+@j6^Iz-n4 zoQLQ+XpHieYn@3+1-MoIiDptBsQ1FpWeuuiQcD0Gqajei36nerxnndHK#de@HwY0F zshmqAWd_hWst37+DTy7!IXZ7Q@Qi5OZsI4tdS4>V4wJwH8+8e#?ZD~#Z&eAE?=bM} zfT?|liQjg#Ri;sh+7oVklJFQ4Y;aF0sSsCat6gT-?J4C2&|Yc*6;!X5*#+NALjiP> zra-NS6Xd1Hout^JA1IzOL1QO_WIb~6R9|G^8Ih;R#IsKbjTf1;-G_(8!OA>~SD^4> zy>{TjcjAB#(}C<8!;h|Fy{@t^N_-#L$Yi&9KPB4|b+vQf5WU|=?1)T!5g2K+C2F~l z!NFd5JZUs+!&Qo_vt01uv`x>uS2S3txx}R9&Lm1~EzVBECAd?a8wdMXW8Ec4Z0VpU zarD8f%Y>2sI)&HK)T;)bJKHExv(uzy-^{GwKs60J^;*rgqe_h%FVnPB&s!@tOB7vd z(z;(cs5~8ckFrYjTDhQ8S$J;@?JLy_*3)@nKZ@w+d?`Lne|Y#)c0M|~1FF4zTfD50 zuFN2q&#Y4(oJVP82CcaxyrEhrUvn!KI{T&G8`SdIBOF5HaVh7N5d%0#6yJ5s}KMI%QE`qz{qq5BCN{ z?ypbOMyyLwo{A}@@N9gQ%&k%kz;s}%T&rX};v67EtAsTV{K2qao0E>~CeZvksctfIkm0p^DS7 zisEwgx{=pvl%jR3Hud$;h8*1Oi@#IspCr?f3K&)`_xm^XRZ?G0qR!ZJK&c+q@UVA~ z?&Fc(14H8V-X06TiNZJPwJFVCiy!$g9T-3FiHfd`dcl3*vq6?^q0Ws4tvh~!#3;Cd z?p9*^-xOi9yG^|LXqZST5K6=WQMs)Lf4w0F+AfMT3X$8>Dbh2D=$tl@j8!InEXpZT zt}0kWsWSjEx%!GolMpjul1S0jeqn>qyfYzEErc!NZz6dh9Q_}OG!EhUNtZ~P8WZ38 z?&s(SBBlNdksJ_;ryWA6JPM)Ic?O}FjeGnBb0N5qJC~?g6$4Bx@eI-=MD{ml(9f?B znd24724U?%hqVydcl_<=o7LBFkV?GcgD~f%B%b6?E03z1hQx=+J;^BS^MgJQA9IcyYAsYlIuT7;| zCjQ%u1zb6GkspDXR)oF)NRv%>^w$?KUr43`9+6IKOi)M)Iwa3s8 z#Dp~!=f%XFtLSGh`Ux#VKM>Y`ue4CD8u36Vo^goYD~m9ndJ`WpyczR>m`po}`9RFv z>%e><2JT}lqYz_n-$p+W?z~SipMCy;=Rzo{W{8nTpP(NW>H0JJQAKovKV^gPofkxF xRtwGxqIvndI4=m}m3B6HV}C)DypTqk%v8{1!@G^f-wf*?dn-P)Kfb$F^MBD;@@@bC delta 264 zcmZqJ&b;9w(*zaS1q=)fj6hsmQk0pOUJPVGfB_Q&1II*1aaI8q5F=LHs(=-u(gvs? zHzg-NH?btOC^In!q<#ZbP5>%bl3GzxT9gWsVmQD$ah((skUS-2bpWbP2PmGJR}!C` zn44OZ2v)}M0VoFoFf$VKGJ#fP=H~&$KCn)fW0Yb8DOt-j*^W_6E}@NqA)k$b0q8og zYclgvGLs<|GAJyVT*SC 0 ) - respawn_chooser_setworld( respawn_chooser.world_id-1 ); - } - - if( button_down( k_srbind_world_right ) ){ - u32 next = respawn_chooser.world_id+1; - if( next < vg_list_size(world_static.instances) ) - respawn_chooser_setworld( next ); - } - - if( button_down(k_srbind_home) ){ - respawn_chooser.home_select ++; - if( respawn_chooser.home_select >= vg_list_size(respawn_homes) ) - respawn_chooser.home_select = 0; - respawn_chooser_gohome(); - } - world_instance *world = &world_static.instances[ respawn_chooser.world_id ]; v3f *bbx = world->scene_geo.bbx; f32 *pos = respawn_chooser.plane_pos; @@ -190,9 +173,9 @@ static void respawn_chooser_pre_update(void){ for( u32 i=0; ient_challenge); i++ ){ ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i ); - enum gui_icon icon = k_gui_icon_exclaim; + enum gui_icon icon = k_gui_icon_exclaim_2d; if( challenge->status ) - icon = k_gui_icon_tick; + icon = k_gui_icon_tick_2d; respawn_map_draw_icon( cam, icon, challenge->transform.co ); } @@ -214,7 +197,7 @@ static void respawn_chooser_pre_update(void){ 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, + respawn_map_draw_icon( cam, k_gui_icon_rift_run_2d, route->board_transform[3] ); } } @@ -236,14 +219,11 @@ static void respawn_begin_chooser(void){ if( gui_new_helper( input_joy_list[k_srjoystick_steer], &text ) ) vg_strcat( &text, "move" ); - if( gui_new_helper( input_button_list[k_srbind_mleft], &text ) ) - vg_strcat( &text, "world" ); - if( gui_new_helper( input_button_list[k_srbind_maccept], &text ) ) vg_strcat( &text, "spawn" ); - if( gui_new_helper( input_button_list[k_srbind_home], &text ) ) - vg_strcat( &text, "home" ); + if( gui_new_helper( input_button_list[k_srbind_mback], &text ) ) + vg_strcat( &text, "exit" ); } #if 0 diff --git a/shaders/scene_override.fs b/shaders/scene_override.fs index 60bf90d..2ab8d8d 100644 --- a/shaders/scene_override.fs +++ b/shaders/scene_override.fs @@ -6,6 +6,7 @@ uniform vec4 uPlane; uniform vec4 uPlayerPos; /* w: distance to uSpawnPos */ uniform vec4 uSpawnPos; /* w: inverse distance to uPlayerPos */ uniform bool uAlphatest; +uniform float uIsoAmt; #include "common_scene.glsl" #include "motion_vectors_fs.glsl" @@ -64,6 +65,15 @@ void main(){ float d3 = distance(p0,aCo); emit += vec3(fract(t*0.2-g_realtime+d3*0.2)*max(0.0,1.0-d3*0.2)); - oColour = vec4( vfrag+emit, 1.0 ); + vfrag += emit; + + if( uIsoAmt > 0.0 ){ + float height = fract( aCo.y * 0.1 ); + float lg = 2.0*length(vec2(dFdx(height), dFdy(height))); + vfrag *= 1.0f+(lg*0.4*uIsoAmt); + } + + + oColour = vec4( vfrag, 1.0 ); //oColour = vec4( vfrag, 1.0 ); } diff --git a/shaders/scene_override.h b/shaders/scene_override.h index d9f7be0..b457233 100644 --- a/shaders/scene_override.h +++ b/shaders/scene_override.h @@ -71,6 +71,7 @@ static struct vg_shader _shader_scene_override = { "uniform vec4 uPlayerPos; /* w: distance to uSpawnPos */\n" "uniform vec4 uSpawnPos; /* w: inverse distance to uPlayerPos */\n" "uniform bool uAlphatest;\n" +"uniform float uIsoAmt;\n" "\n" "#line 1 1 \n" "// :D\n" @@ -439,7 +440,7 @@ static struct vg_shader _shader_scene_override = { " return world_compute_lighting( diffuse, normal, co, compute_board_shadow() );\n" "}\n" "\n" -"#line 11 0 \n" +"#line 12 0 \n" "#line 1 2 \n" "const float k_motion_lerp_amount = 0.01;\n" "\n" @@ -459,7 +460,7 @@ static struct vg_shader _shader_scene_override = { " oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n" "}\n" "\n" -"#line 12 0 \n" +"#line 13 0 \n" "\n" "vec2 smin( float a, float b, float k ){\n" " float h = max( k-abs(a-b), 0.0 )/k;\n" @@ -515,6 +516,12 @@ static struct vg_shader _shader_scene_override = { " float d3 = distance(p0,aCo);\n" " emit += vec3(fract(t*0.2-g_realtime+d3*0.2)*max(0.0,1.0-d3*0.2));\n" "\n" +" if( uIsoAmt > 0.0 ){\n" +" float height = fract( aCo.y * 0.1 );\n" +" float lg = 2.0*length(vec2(dFdx(height), dFdy(height)));\n" +" emit += vec3(lg*0.1*uIsoAmt);\n" +" }\n" +"\n" " oColour = vec4( vfrag+emit, 1.0 );\n" " //oColour = vec4( vfrag, 1.0 );\n" "}\n" @@ -532,6 +539,7 @@ static GLuint _uniform_scene_override_uPlane; static GLuint _uniform_scene_override_uPlayerPos; static GLuint _uniform_scene_override_uSpawnPos; static GLuint _uniform_scene_override_uAlphatest; +static GLuint _uniform_scene_override_uIsoAmt; static GLuint _uniform_scene_override_g_world_depth; static GLuint _uniform_scene_override_uLightsArray; static GLuint _uniform_scene_override_uLightsIndex; @@ -568,6 +576,9 @@ static void shader_scene_override_uSpawnPos(v4f v){ static void shader_scene_override_uAlphatest(int b){ glUniform1i(_uniform_scene_override_uAlphatest,b); } +static void shader_scene_override_uIsoAmt(float f){ + glUniform1f(_uniform_scene_override_uIsoAmt,f); +} static void shader_scene_override_g_world_depth(int i){ glUniform1i(_uniform_scene_override_g_world_depth,i); } @@ -587,6 +598,7 @@ static void shader_scene_override_link(void){ _uniform_scene_override_uPlayerPos = glGetUniformLocation( _shader_scene_override.id, "uPlayerPos" ); _uniform_scene_override_uSpawnPos = glGetUniformLocation( _shader_scene_override.id, "uSpawnPos" ); _uniform_scene_override_uAlphatest = glGetUniformLocation( _shader_scene_override.id, "uAlphatest" ); + _uniform_scene_override_uIsoAmt = glGetUniformLocation( _shader_scene_override.id, "uIsoAmt" ); _uniform_scene_override_g_world_depth = glGetUniformLocation( _shader_scene_override.id, "g_world_depth" ); _uniform_scene_override_uLightsArray = glGetUniformLocation( _shader_scene_override.id, "uLightsArray" ); _uniform_scene_override_uLightsIndex = glGetUniformLocation( _shader_scene_override.id, "uLightsIndex" ); diff --git a/skaterift.c b/skaterift.c index 011fa26..7da7109 100644 --- a/skaterift.c +++ b/skaterift.c @@ -294,7 +294,8 @@ static void vg_pre_update(void){ /* time rate */ f32 target = 1; - if( skaterift.activity & (k_skaterift_replay|k_skaterift_menu) ){ + if( skaterift.activity & (k_skaterift_replay|k_skaterift_menu| + k_skaterift_respawning) ){ target = 0; } @@ -310,6 +311,7 @@ static void vg_pre_update(void){ world_update( world_current_instance(), localplayer.rb.co ); audio_ambient_sprites_update( world_current_instance(), localplayer.rb.co ); + respawn_chooser_pre_update(); } static void vg_fixed_update(void){ @@ -451,6 +453,34 @@ static void render_scene(void){ } } + if( skaterift.activity == k_skaterift_respawning ){ + world_instance *world = world_current_instance(); + glDrawBuffers( 1, (GLenum[]){ GL_COLOR_ATTACHMENT0 } ); + + v3f bg; + v3_muls( world->ub_lighting.g_daysky_colour, + world->ub_lighting.g_day_phase - + world->ub_lighting.g_sunset_phase*0.1f, bg ); + + v3_muladds( bg, world->ub_lighting.g_sunset_colour, + (1.0f-0.5f)*world->ub_lighting.g_sunset_phase, bg ); + + v3_muladds( bg, world->ub_lighting.g_nightsky_colour, + (1.0f-world->ub_lighting.g_day_phase), bg ); + + glClearColor( bg[0], bg[1], bg[2], 0.0f ); + glClear( GL_COLOR_BUFFER_BIT ); + glDrawBuffers( 2, (GLenum[]){ GL_COLOR_ATTACHMENT0, + GL_COLOR_ATTACHMENT1 } ); + + m4x3f identity; + m4x3_identity( identity ); + render_world_override( world, world, identity, &skaterift.cam, + respawn_chooser.spawn, 1.0f ); + render_world_routes( world, world, identity, &skaterift.cam, 0, 1 ); + return; + } + render_world( world_current_instance(), &skaterift.cam, 0, 0, 1, 1 ); world_instance *holdout_world = NULL; @@ -499,6 +529,12 @@ static void skaterift_composite_maincamera(void){ skaterift.cam.nearz = 0.1f; skaterift.cam.farz = 2100.0f; + if( skaterift.activity == k_skaterift_respawning ){ + camera_copy( &respawn_chooser.cam, &skaterift.cam ); + skaterift.cam.nearz = 4.0f; + skaterift.cam.farz = 3100.0f; + } + if( global_miniworld.transition ){ f32 dt = vg.time_frame_delta / 2.0f, s = vg_signf( global_miniworld.transition ); @@ -533,7 +569,8 @@ static void render_main_game(void){ skaterift_composite_maincamera(); /* --------------------------------------------------------------------- */ - render_world_cubemaps( world_current_instance() ); + if( skaterift.activity != k_skaterift_respawning ) + render_world_cubemaps( world_current_instance() ); /* variable res target */ render_fb_bind( gpipeline.fb_main, 1 ); @@ -552,7 +589,8 @@ static void render_main_game(void){ portals */ /* continue with variable rate */ - if( !global_miniworld.transition ){ + if( !global_miniworld.transition && + (skaterift.activity != k_skaterift_respawning) ){ render_fb_bind( gpipeline.fb_main, 1 ); render_world_gates( world_current_instance(), &skaterift.cam ); } @@ -614,8 +652,14 @@ static void vg_gui(void){ render_view_framebuffer_ui(); remote_player_network_imgui( vg.pv ); - remote_players_chat_imgui(); /* TODO: conditional */ - remote_players_imgui_world( world_current_instance(), vg.pv, 100.0f, 1 ); + if( skaterift.activity == k_skaterift_respawning ){ + remote_players_imgui_world( world_current_instance(), vg.pv, 2000.0f, 0 ); + remote_players_imgui_lobby(); + } + else { + remote_players_chat_imgui(); /* TODO: conditional */ + remote_players_imgui_world( world_current_instance(), vg.pv, 100.0f, 1 ); + } } diff --git a/skaterift.h b/skaterift.h index 4cfc874..96b9b90 100644 --- a/skaterift.h +++ b/skaterift.h @@ -51,7 +51,7 @@ struct{ k_skaterift_replay = 0x01, k_skaterift_ent_focus = 0x02, k_skaterift_menu = 0x04, - k_skaterift_respawning_DELETED = 0x08, + k_skaterift_respawning = 0x08, } activity; diff --git a/world_render.c b/world_render.c index 8d7e546..1546429 100644 --- a/world_render.c +++ b/world_render.c @@ -960,7 +960,7 @@ static void render_world_override( world_instance *world, world_instance *lighting_source, m4x3f mmdl, camera *cam, - ent_spawn *dest_spawn ){ + ent_spawn *dest_spawn, f32 iso_amt ){ struct world_pass pass = { .cam = cam, .fn_bind_textures = bindpoint_override, @@ -974,6 +974,7 @@ static void render_world_override( world_instance *world, shader_scene_override_uTexGarbage(0); shader_scene_override_uTexMain(1); shader_scene_override_uPv( pass.cam->mtx.pv ); + shader_scene_override_uIsoAmt( iso_amt ); WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( lighting_source, scene_override ); bind_terrain_noise(); diff --git a/world_render.h b/world_render.h index b02116e..402ca60 100644 --- a/world_render.h +++ b/world_render.h @@ -84,7 +84,7 @@ static void render_world_override( world_instance *world, world_instance *lighting_source, m4x3f mmdl, camera *cam, - ent_spawn *dest_spawn ); + ent_spawn *dest_spawn, f32 iso_amt ); #define WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( WORLD, SHADER ) \ world_link_lighting_ub( WORLD, _shader_##SHADER.id ); \ -- 2.25.1