X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=skaterift.c;h=f99f8761d8d593a11e551cd1cb7c8791329eb33a;hb=238a3a4ef19bb137e2a878ee38f99d253eddb51c;hp=3457671f6eead92d47481c2ec8808161514ad72b;hpb=4eccfd7252f8ff165670842df537441afae5458b;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/skaterift.c b/skaterift.c index 3457671..f99f876 100644 --- a/skaterift.c +++ b/skaterift.c @@ -13,6 +13,10 @@ #define SR_ALLOW_REWIND_HUB +#ifdef _WIN32 + #include +#endif + /* * system headers * --------------------- */ @@ -22,6 +26,7 @@ #include "render.h" #include "vg/vg_opt.h" #include "vg/vg_loader.h" +#include "vg/vg_io.h" #include "world.h" @@ -40,11 +45,13 @@ #include "ent_miniworld.h" #include "ent_skateshop.h" #include "ent_npc.h" +#include "ent_camera.h" #include "world_map.h" #include "gui.h" #include "workshop.h" #include "audio.h" #include "player_render.h" +#include "control_overlay.h" struct skaterift_globals skaterift = { @@ -52,9 +59,9 @@ struct skaterift_globals skaterift = .hub_world = "maps/dev_hub", }; -static int k_tools_mode = 0; - -int main( int argc, char *argv[] ){ +int main( int argc, char *argv[] ) +{ + network_set_host( "skaterift.com", NULL ); vg_mem.use_libc_malloc = 0; vg_set_mem_quota( 160*1024*1024 ); vg_enter( argc, argv, "Voyager Game Engine" ); @@ -68,13 +75,9 @@ void vg_launch_opt(void) network_client.auth_mode = eServerModeNoAuthentication; } - if( (arg = vg_long_opt_arg( "server" )) ){ - vg_strncpy( arg, network_client.server_adress, 64, - k_strncpy_overflow_fatal ); - } - - if( vg_long_opt( "tools" ) ){ - k_tools_mode = 1; + if( (arg = vg_long_opt_arg( "server" )) ) + { + network_set_host( arg, NULL ); } if( vg_long_opt( "demo" ) ){ @@ -104,9 +107,6 @@ vg_info(" ' ' '--' [] '----- '----- ' ' '---' " vg_loader_step( remote_players_init, NULL ); - if( k_tools_mode ) - return; - steam_init(); vg_loader_step( NULL, steam_end ); vg_loader_step( network_init, network_end ); @@ -116,8 +116,14 @@ static void async_skaterift_player_start( void *payload, u32 size ){ world_switch_instance(0); } -static void async_call_ready( void *payload, u32 size ){ +static void async_call_ready( void *payload, u32 size ) +{ skaterift.op = k_async_op_none; + + if( network_client.auto_connect ) + network_client.user_intent = k_server_intent_online; + + menu_at_begin(); } static void skaterift_restore_state(void) @@ -129,7 +135,7 @@ static void skaterift_restore_state(void) vg_msg_init( &kvsav, sav.buf, sizeof(sav.buf) ); u32 ach; - vg_msg_getkvintg( &kvsav, "ach", k_vg_msg_u32, &ach ); + vg_msg_getkvintg( &kvsav, "ach", k_vg_msg_u32, &ach, NULL ); skaterift.achievements |= ach; u32 board_reg_id = time(NULL) % addon_count( k_addon_type_board, 0 ), @@ -177,6 +183,7 @@ static void skaterift_load_world_content(void){ ADDON_REG_MTZERO|ADDON_REG_PREMIUM ); skaterift_mount_world_unloadable( "maps/dev_tutorial", 0 ); skaterift_mount_world_unloadable( "maps/dev_flatworld", 0 ); + skaterift_mount_world_unloadable( "maps/mp_line1", ADDON_REG_PREMIUM ); world_static.load_state = k_world_loader_load; @@ -187,12 +194,8 @@ static void skaterift_load_world_content(void){ skaterift_world_load_thread( &args ); } -static void skaterift_load_player_content(void){ - u32 bytes = 1024*1024*10; - player_replay.local.data = vg_linear_alloc( vg_mem.rtmemory, bytes ); - player_replay.local.size = bytes; - replay_clear( &player_replay.local ); - +static void skaterift_load_player_content(void) +{ particle_alloc( &particles_grind, 300 ); particle_alloc( &particles_env, 200 ); @@ -204,19 +207,14 @@ static void skaterift_load_player_content(void){ void vg_load(void) { - if( k_tools_mode ){ - vg_async_call( async_call_ready, NULL, 0 ); - return; - } - vg_audio.always_keep_compressed = 1; vg_console_reg_cmd( "load_world", skaterift_load_world_command, NULL ); - vg_console_reg_cmd( "fc", freecam_cmd, NULL ); vg_console_reg_var( "immobile", &localplayer.immobile, k_var_dtype_i32, 0 ); vg_loader_step( render_init, NULL ); vg_loader_step( menu_init, NULL ); + vg_loader_step( control_overlay_init, NULL ); vg_loader_step( world_init, NULL ); vg_loader_step( vehicle_init, NULL ); vg_loader_step( gui_init, NULL ); @@ -230,12 +228,13 @@ void vg_load(void) vg_loader_step( workshop_init, NULL ); vg_loader_step( skateshop_init, NULL ); vg_loader_step( ent_tornado_init, NULL ); + vg_loader_step( skaterift_replay_init, NULL ); vg_loader_step( skaterift_load_player_content, NULL ); /* --------------------- */ vg_bake_shaders(); - vg_loader_step( audio_init, audio_free ); + vg_loader_step( audio_init, NULL ); /* 'systems' are completely loaded now */ @@ -249,7 +248,6 @@ void vg_load(void) vg_async_stall(); vg_console_load_autos(); - menu_link(); addon_mount_content_folder( k_addon_type_player, "playermodels", ".mdl" ); @@ -284,23 +282,31 @@ void vg_pre_update(void) { skaterift_preupdate_inputs(); - if( k_tools_mode ) return; - steam_update(); skaterift_change_client_world_preupdate(); if( skaterift.op == k_async_op_clientloading ) return; draw_origin_axis(); - skateshop_autostart_loading(); + addon_system_pre_update(); + skateshop_world_preview_preupdate(); network_update(); /* time rate */ f32 target = 1; - if( skaterift.activity & (k_skaterift_replay|k_skaterift_menu| - k_skaterift_world_map) ) - { + if( skaterift.activity & k_skaterift_replay ) target = 0; + + v3f listen_co; + v3_copy( localplayer.rb.co, listen_co ); + + if( skaterift.activity & k_skaterift_menu ) + { + if( menu.bg_cam ) + { + v3_copy( menu.bg_cam->transform.co, listen_co ); + } + else target = 0; } vg_slewf( &skaterift.time_rate, target, vg.time_frame_delta * (1.0f/0.3f) ); @@ -309,19 +315,23 @@ void vg_pre_update(void) /* TODO: how can we compress this? */ ent_miniworld_preupdate(); world_entity_focus_preupdate(); - player__pre_update(); + + if( skaterift.activity != k_skaterift_menu ) + { + player__pre_update(); + } + skaterift_replay_pre_update(); remote_sfx_pre_update(); skateshop_world_preupdate( world_current_instance() ); world_update( world_current_instance(), localplayer.rb.co ); - audio_ambient_sprites_update( world_current_instance(), localplayer.rb.co ); + audio_ambient_sprites_update( world_current_instance(), listen_co ); world_map_pre_update(); } void vg_fixed_update(void) { - if( k_tools_mode ) return; if( skaterift.op == k_async_op_clientloading ) return; world_routes_fixedupdate( world_current_instance() ); @@ -331,7 +341,6 @@ void vg_fixed_update(void) void vg_post_update(void) { - if( k_tools_mode ) return; if( skaterift.op == k_async_op_clientloading ) return; player__post_update(); @@ -365,69 +374,15 @@ void vg_post_update(void) * RENDERING * ---------------------------------------------------------------------------*/ -void vg_framebuffer_resize( int w, int h ){ - render_fb_resize(); -} - -static void present_view_with_post_processing(void){ - glBindFramebuffer( GL_FRAMEBUFFER, 0 ); - glViewport( 0,0, vg.window_x, vg.window_y ); - - glEnable(GL_BLEND); - glDisable(GL_DEPTH_TEST); - glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA); - glBlendEquation(GL_FUNC_ADD); - - v2f inverse; - render_fb_inverse_ratio( gpipeline.fb_main, inverse ); - - if( k_blur_effect ){ - shader_blitblur_use(); - shader_blitblur_uTexMain( 0 ); - shader_blitblur_uTexMotion( 1 ); - shader_blitblur_uBlurStrength( k_blur_strength / - (vg.time_frame_delta*60.0) ); - shader_blitblur_uInverseRatio( inverse ); - - inverse[0] -= 0.0001f; - inverse[1] -= 0.0001f; - shader_blitblur_uClampUv( inverse ); - - static f64 effect_time = 133.0; - effect_time += vg.time_frame_delta; - shader_blitblur_uTime( effect_time ); - - f32 glitch_strength = 0.0f; - if( skaterift.activity == k_skaterift_replay ){ - glitch_strength = 0.005f; - if( player_replay.replay_control == k_replay_control_play ) - glitch_strength = 0.005f; - else - glitch_strength += 0.005f*player_replay.track_velocity; - } - shader_blitblur_uGlitchStrength( glitch_strength ); - - v2f override; - if( skaterift.activity == k_skaterift_menu ) - v2_muls( (v2f){ 0.04f, 0.001f }, 1.0f-skaterift.time_rate, override ); - else - v2_zero( override ); - shader_blitblur_uOverrideDir( override ); - - render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); - render_fb_bind_texture( gpipeline.fb_main, 1, 1 ); - } - else{ - shader_blit_use(); - shader_blit_uTexMain( 0 ); - shader_blit_uInverseRatio( inverse ); - render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); +static void render_player_transparent(void) +{ + if( (skaterift.activity == k_skaterift_menu) && + (menu.page == k_menu_page_main) && + (menu.main_index == k_menu_main_guide) ) + { + return; } - render_fsquad(); -} - -static void render_player_transparent(void){ static vg_camera small_cam; /* DOES NOT NEED TO BE STATIC BUT MINGW SAIS OTHERWISE */ @@ -445,7 +400,15 @@ static void render_player_transparent(void){ player__render( &small_cam ); } -static world_instance *get_view_world(void){ +static world_instance *get_view_world(void) +{ + if( (skaterift.activity & k_skaterift_menu) && + (menu.page == k_menu_page_main) && + (menu.main_index == k_menu_main_guide) ) + { + return &world_static.instances[0]; + } + world_instance *view_world = world_current_instance(); if( localplayer.gate_waiting && (localplayer.gate_waiting->flags & k_ent_gate_nonlocal) ){ @@ -455,17 +418,21 @@ static world_instance *get_view_world(void){ return view_world; } -static void render_scene(void){ +static void render_scene(void) +{ /* Draw world */ glEnable( GL_DEPTH_TEST ); - for( u32 i=0; itar_min, world->tar_max, 1.0f, 0.0f}); render_world_routes( world, world, identity, &skaterift.cam, 0, 1 ); return; @@ -546,26 +513,36 @@ static void render_scene(void){ render_world( holdout_world, &global_miniworld.cam, 1, 0, 1, 1 ); } -static void skaterift_composite_maincamera(void){ +static void skaterift_composite_maincamera(void) +{ vg_camera_lerp( &localplayer.cam, &world_static.focus_cam, vg_smoothstepf(world_static.focus_strength), &skaterift.cam ); - if( player_replay.freecam ){ - freecam_preupdate(); - v3_copy( player_replay.replay_freecam.pos, skaterift.cam.pos ); - v3_copy( player_replay.replay_freecam.angles, skaterift.cam.angles ); - skaterift.cam.fov = player_replay.replay_freecam.fov; - } - else { - if( skaterift.activity == k_skaterift_replay ){ - replay_get_camera( &player_replay.local, &skaterift.cam ); + if( skaterift.activity == k_skaterift_replay ) + { + if( player_replay.use_freecam ) + { + freecam_preupdate(); + v3_copy( player_replay.replay_freecam.pos, skaterift.cam.pos ); + v3_copy( player_replay.replay_freecam.angles, skaterift.cam.angles ); + skaterift.cam.fov = player_replay.replay_freecam.fov; + } + else + { + skaterift_get_replay_cam( &skaterift.cam ); } } skaterift.cam.nearz = 0.1f; skaterift.cam.farz = 2100.0f; - if( skaterift.activity == k_skaterift_world_map ){ + if( (skaterift.activity == k_skaterift_menu) && menu.bg_cam ) + { + ent_camera_unpack( menu.bg_cam, &skaterift.cam ); + } + + if( menu_viewing_map() ) + { vg_camera_copy( &world_map.cam, &skaterift.cam ); skaterift.cam.nearz = 4.0f; skaterift.cam.farz = 3100.0f; @@ -588,8 +565,10 @@ static void skaterift_composite_maincamera(void){ vg_camera_finalize( &skaterift.cam ); } -static void render_main_game(void){ - if( skaterift.activity == k_skaterift_replay ){ +static void render_main_game(void) +{ + if( skaterift.activity == k_skaterift_replay ) + { player__animate_from_replay( &player_replay.local ); } else{ @@ -604,17 +583,18 @@ static void render_main_game(void){ skaterift_composite_maincamera(); /* --------------------------------------------------------------------- */ - if( skaterift.activity != k_skaterift_world_map ){ + if( !menu_viewing_map() ) + { world_instance *world = world_current_instance(); render_world_cubemaps( world ); ent_gate *nlg = world->rendering_gate; - if( nlg && nlg->flags & k_ent_gate_nonlocal ) + if( nlg && (nlg->flags & k_ent_gate_nonlocal) ) render_world_cubemaps( &world_static.instances[nlg->target] ); } /* variable res target */ - render_fb_bind( gpipeline.fb_main, 1 ); + vg_framebuffer_bind( gpipeline.fb_main, k_render_scale ); glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT ); @@ -630,27 +610,27 @@ static void render_main_game(void){ portals */ /* continue with variable rate */ - if( !global_miniworld.transition && - (skaterift.activity != k_skaterift_world_map) ){ - render_fb_bind( gpipeline.fb_main, 1 ); + if( !global_miniworld.transition && !menu_viewing_map() ) + { + vg_framebuffer_bind( gpipeline.fb_main, k_render_scale ); render_world_gates( get_view_world(), &skaterift.cam ); } /* composite */ - present_view_with_post_processing(); + + if( (skaterift.activity == k_skaterift_menu) && menu.bg_blur ) + v2_muls( (v2f){ 0.04f, 0.001f }, 1.0f-skaterift.time_rate, + gpipeline.blur_override ); + else + v2_zero( gpipeline.blur_override ); + postprocess_to_screen( gpipeline.fb_main ); + skaterift_replay_post_render(); + control_overlay_render(); } void vg_render(void) { - if( k_tools_mode ){ - glBindFramebuffer( GL_FRAMEBUFFER, 0 ); - glViewport( 0,0, vg.window_x, vg.window_y ); - glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); - glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); - return; - } - if( skaterift.op == k_async_op_clientloading ){ vg_loader_render(); return; @@ -673,56 +653,42 @@ void vg_render(void) glDisable(GL_DEPTH_TEST); vg_lines_drawall(); glViewport( 0,0, vg.window_x, vg.window_y ); - gui_draw(); + + gui_render_icons(); } -void vg_gui(void) +void vg_gui( ui_context *ctx ) { if( skaterift.op == k_async_op_clientloading ) return; - if( k_tools_mode ){ - ui_rect null; - ui_rect screen = { 0, 0, vg.window_x, vg.window_y }; - ui_rect panel = { 0, 0, 1000, 700 }; - ui_rect_center( screen, panel ); - vg_ui.wants_mouse = 1; - - ui_fill( panel, ui_colour( k_ui_bg+1 ) ); - ui_outline( panel, 1, ui_colour( k_ui_bg+7 ), 0 ); - - ui_rect_pad( panel, (ui_px[2]){ 8, 8 } ); - - return; - } + gui_draw( ctx ); if( k_light_editor ) - imgui_world_light_edit( world_current_instance() ); - + imgui_world_light_edit( ctx, world_current_instance() ); + vg_ui.tex_bg = gpipeline.fb_main->attachments[0].id; - render_fb_inverse_ratio( gpipeline.fb_main, vg_ui.bg_inverse_ratio ); + vg_framebuffer_inverse_ratio( gpipeline.fb_main, vg_ui.bg_inverse_ratio ); - menu_update(); - if( skaterift.activity == k_skaterift_menu ){ - glClear( GL_DEPTH_BUFFER_BIT ); - menu_render(); - } - - player__im_gui(); + menu_gui( ctx ); + player__im_gui( ctx ); world_instance *world = world_current_instance(); - world_routes_imgui( world ); - skaterift_replay_imgui(); - workshop_form_gui(); - render_view_framebuffer_ui(); - remote_player_network_imgui( vg.pv ); + world_routes_imgui( ctx, world ); + skaterift_replay_imgui( ctx ); + workshop_form_gui( ctx ); + remote_player_network_imgui( ctx, vg.pv ); - if( skaterift.activity == k_skaterift_world_map ){ - remote_players_imgui_world( world_current_instance(), vg.pv, 2000.0f, 0 ); - remote_players_imgui_lobby(); + if( menu_viewing_map() ) + { + remote_players_imgui_world( ctx, world_current_instance(), + vg.pv, 2000.0f, 0 ); + remote_players_imgui_lobby( ctx ); } - else { - remote_players_chat_imgui(); /* TODO: conditional */ - remote_players_imgui_world( world_current_instance(), vg.pv, 100.0f, 1 ); + else + { + remote_players_chat_imgui( ctx ); /* TODO: conditional */ + remote_players_imgui_world( ctx, world_current_instance(), + vg.pv, 100.0f, 1 ); } } @@ -779,3 +745,6 @@ void vg_gui(void) #include "world_volumes.c" #include "world_water.c" #include "ent_npc.c" +#include "model.c" +#include "control_overlay.c" +#include "ent_camera.c"