From: hgn Date: Tue, 21 Nov 2023 16:03:48 +0000 (+0000) Subject: turbo chaos X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=70ff4a83e5a4b35436388d9bb999c939559ac23f;p=carveJwlIkooP6JGAAIwe30JlM.git turbo chaos --- 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 4798e48..9274c3f 100644 Binary files a/maps_src/dev_hub/main.mdl and b/maps_src/dev_hub/main.mdl differ 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 45dbefe..8e48c54 100644 Binary files a/models_src/rs_icons.mdl and b/models_src/rs_icons.mdl differ diff --git a/player.c b/player.c index b6d6a85..7a2dff5 100644 --- a/player.c +++ b/player.c @@ -202,6 +202,7 @@ static void player__im_gui(void){ [k_skaterift_replay] = "replay", [k_skaterift_ent_focus] = "ent_focus", [k_skaterift_default] = "default", + [k_skaterift_respawning]= "map" } [skaterift.activity] ); player__debugtext( 1, "time_rate: %.4f", skaterift.time_rate ); diff --git a/respawn.c b/respawn.c index 0e1dc67..b023520 100644 --- a/respawn.c +++ b/respawn.c @@ -1,7 +1,7 @@ #ifndef RESPAWN_C #define RESPAWN_C -#if 0 +#if 1 #include "respawn.h" #include "skaterift.h" #include "world.h" @@ -89,6 +89,7 @@ static void respawn_chooser_pre_update(void){ if( skaterift.activity != k_skaterift_respawning ) return; if( button_down( k_srbind_mback ) ){ + gui_helper_clear(); srinput.state = k_input_state_resume; skaterift.activity = k_skaterift_menu; menu.page = 0xffffffff; @@ -107,24 +108,6 @@ static void respawn_chooser_pre_update(void){ return; } - if( button_down( k_srbind_world_left ) ){ - if( respawn_chooser.world_id > 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 ); \