X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=main.c;h=b46f3771b5a565abba28504e852f745fe97f5bfc;hb=4a883ac1b2506032f9dddab342712de46f2ca734;hp=aa90b02bdc25d39d127155a874fc9971d668ff51;hpb=168eb5c363f510d60703498e01ffcdb52bf9fd07;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/main.c b/main.c index aa90b02..b46f377 100644 --- a/main.c +++ b/main.c @@ -17,19 +17,28 @@ vg_tex2d tex_water = { .path = "textures/water.qoi" }; static int debugview = 0; static int sv_debugcam = 0; static int lightedit = 0; +static int sv_scene = 0; +static int cl_ui = 1; /* Components */ -#include "road.h" +//#define SR_NETWORKED + +/* uncomment this to run the game without any graphics being drawn */ +//#define SR_NETWORK_TEST + +#include "steam.h" +#include "network.h" + +#include "model.h" +//#include "road.h" #include "scene.h" -#include "ik.h" +//#include "ik.h" #include "audio.h" -#include "terrain.h" -#include "character.h" +//#include "terrain.h" +//#include "character.h" #include "ragdoll.h" #include "rigidbody.h" #include "render.h" -#include "gate.h" -#include "water.h" #include "world.h" #include "player.h" @@ -37,6 +46,12 @@ static int lightedit = 0; #include "shaders/standard.h" #include "shaders/unlit.h" +#include "physics_test.h" +#include "anim_test.h" + +#include "gate.h" +#include "water.h" + void vg_register(void) { shader_blit_register(); @@ -52,6 +67,7 @@ void vg_register(void) static void init_other(void) { + player_init(); render_init(); gate_init(); world_init(); @@ -89,8 +105,10 @@ static int playermodel( int argc, char const *argv[] ) void vg_start(void) { + steam_init(); + vg_convar_push( (struct vg_convar){ - .name = "freecam", + .name = "fc", .data = &freecam, .data_type = k_convar_dtype_i32, .opt_i32 = { .min=0, .max=1, .clamp=1 }, @@ -105,6 +123,14 @@ void vg_start(void) .persistent = 1 }); + vg_convar_push( (struct vg_convar){ + .name = "fcs", + .data = &fc_speed, + .data_type = k_convar_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 1 + }); + vg_convar_push( (struct vg_convar){ .name = "ledit", .data = &lightedit, @@ -113,6 +139,14 @@ void vg_start(void) .persistent = 1 }); + vg_convar_push( (struct vg_convar){ + .name = "cl_ui", + .data = &cl_ui, + .data_type = k_convar_dtype_i32, + .opt_i32 = { .min=0, .max=1, .clamp=1 }, + .persistent = 1 + }); + vg_convar_push( (struct vg_convar){ .name = "walk_speed", .data = &k_walkspeed, @@ -121,6 +155,30 @@ void vg_start(void) .persistent = 1 }); + vg_convar_push( (struct vg_convar){ + .name = "run_speed", + .data = &k_runspeed, + .data_type = k_convar_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 1 + }); + + vg_convar_push( (struct vg_convar){ + .name = "walk_accel", + .data = &k_walk_accel, + .data_type = k_convar_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 1 + }); + + vg_convar_push( (struct vg_convar){ + .name = "dt", + .data = &ktimestep, + .data_type = k_convar_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 0 + }); + vg_convar_push( (struct vg_convar){ .name = "debugcam", .data = &sv_debugcam, @@ -146,23 +204,67 @@ void vg_start(void) init_other(); - character_load( &player.mdl, "ch_mike" ); - character_init_ragdoll( &player.mdl ); + /* + * If we're in physics test mode we dont need to load anything else, this + * parameter is dev only. TODO: dev only cvars that don't ship with the game + * when building in release mode. + */ + + if( sv_scene == 0 ) + { + character_load( &player.mdl, "ch_new" ); + character_init_ragdoll( &player.mdl ); + + world_load(); - world_load(); + reset_player( 1, (const char *[]){ "start" } ); + rb_init( &player.rb ); - reset_player( 1, (const char *[]){ "tutorial" } ); - player_transform_update(); + network_init(); + } + else if( sv_scene == 1 ) + { + physics_test_start(); + } + else if( sv_scene == 2 ) + { + anim_test_start(); + } } void vg_free(void) { + network_end(); vg_tex2d_free( texture_list, vg_list_size(texture_list) ); + /* TODO: THE REST OF THE GOD DAMN FREEING STUFF */ + steam_end(); } void vg_update(void) { - player_update(); + steam_update(); + + if( sv_scene == 0 ) + { + network_update(); + player_update(); + world_update(); + //traffic_visualize( world.traffic, world.traffic_count ); + // + /* TEMP */ + if( glfwGetKey( vg_window, GLFW_KEY_J )) + { + v3_copy( player.camera_pos, world.mr_ball.co ); + } + } + else if( sv_scene == 1 ) + { + physics_test_update(); + } + else if( sv_scene == 2 ) + { + anim_test_update(); + } } static void vg_framebuffer_resize( int w, int h ) @@ -172,52 +274,47 @@ static void vg_framebuffer_resize( int w, int h ) water_fb_resize(); } -void vg_render(void) +static void draw_origin_axis(void) { - glBindFramebuffer( GL_FRAMEBUFFER, 0 ); - glViewport( 0,0, vg_window_x, vg_window_y ); - - glDisable( GL_DEPTH_TEST ); - glClearColor( 0.11f, 0.35f, 0.37f, 1.0f ); - glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); + vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 1.0f, 0.0f, 0.0f }, 0xffff0000 ); + vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 0.0f, 1.0f, 0.0f }, 0xff00ff00 ); + vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 0.0f, 0.0f, 1.0f }, 0xff0000ff ); +} - float speed = freecam? 0.0f: v3_length( player.v ); +static void render_main_game(void) +{ + float speed = freecam? 0.0f: v3_length( player.rb.v ); v3f shake = { vg_randf()-0.5f, vg_randf()-0.5f, vg_randf()-0.5f }; v3_muls( shake, speed*0.01f, shake ); m4x4f world_4x4; m4x3_expand( player.camera_inverse, world_4x4 ); - gpipeline.fov = freecam? 60.0f: 135.0f; /* 120 */ + gpipeline.fov = freecam? 60.0f: 125.0f; /* 120 */ m4x4_projection( vg_pv, gpipeline.fov, (float)vg_window_x / (float)vg_window_y, - 0.1f, 2100.0f ); + 0.02f, 2100.0f ); m4x4_mul( vg_pv, world_4x4, vg_pv ); - vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 1.0f, 0.0f, 0.0f }, 0xffff0000 ); - vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 0.0f, 1.0f, 0.0f }, 0xff00ff00 ); - vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 0.0f, 0.0f, 1.0f }, 0xff0000ff ); - glEnable( GL_DEPTH_TEST ); /* * Draw world */ + int draw_solid = player.is_dead | freecam; + render_world( vg_pv, player.camera ); + if( draw_solid ) + draw_player(); render_water_texture( player.camera ); glBindFramebuffer( GL_FRAMEBUFFER, 0 ); render_water_surface( vg_pv, player.camera ); - vg_tex2d_bind( &tex_water, 1 ); - - for( int i=0; ienabled }; @@ -287,27 +411,26 @@ static void run_light_widget( struct light_widget *lw ) } } -void vg_ui(void) +static void run_debug_info(void) { - char buf[20]; - -#if 0 - snprintf( buf, 20, "%.2fm/s", v3_length( player.v ) ); + char buf[40]; + + snprintf( buf, 40, "%.2fm/s", v3_length( player.rb.v ) ); gui_text( (ui_px [2]){ 0, 0 }, buf, 1, k_text_align_left ); - snprintf( buf, 20, "%.2f %.2f %.2f m/s", + snprintf( buf, 40, "%.2f %.2f %.2f m/s", player.a[0], player.a[1], player.a[2] ); gui_text( (ui_px [2]){ 0, 20 }, buf, 1, k_text_align_left ); - snprintf( buf, 20, "pos %.2f %.2f %.2f", - player.co[0], player.co[1], player.co[2] ); + snprintf( buf, 40, "pos %.2f %.2f %.2f", + player.rb.co[0], player.rb.co[1], player.rb.co[2] ); gui_text( (ui_px [2]){ 0, 40 }, buf, 1, k_text_align_left ); if( vg_gamepad_ready ) { for( int i=0; i<6; i++ ) { - snprintf( buf, 20, "%.2f", vg_gamepad.axes[i] ); + snprintf( buf, 40, "%.2f", vg_gamepad.axes[i] ); gui_text( (ui_px [2]){ 0, (i+3)*20 }, buf, 1, k_text_align_left ); } } @@ -316,8 +439,10 @@ void vg_ui(void) gui_text( (ui_px [2]){ 0, 60 }, "Gamepad not ready", 1, k_text_align_left ); } -#endif - +} + +void vg_ui(void) +{ if( lightedit ) { ui_global_ctx.cursor[0] = 10; @@ -352,4 +477,43 @@ void vg_ui(void) render_update_lighting_ub(); } + + //glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); + if( cl_ui ) + { + render_world_routes_ui(); + } + //glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); + +#if 0 + static double last_b_press = 0.0; + + double localtime = vg_time - last_b_press; + + world_routes_ui_updatetime( 0, localtime ); + world_routes_ui_draw( 0, (v4f){ 1.0f,0.0f,1.0f,1.0f}, 9.0f ); + + if( glfwGetKey(vg_window,GLFW_KEY_B) ) + world_routes_ui_notch( 0, localtime ); + + if( vg_time-last_b_press > 1.0 ) + if( glfwGetKey(vg_window,GLFW_KEY_N) ) + { + last_b_press = vg_time; + world_routes_ui_newseg( 0 ); + } + + static double last_m_press; + if( vg_time-last_m_press > 1.0 ) + if( glfwGetKey( vg_window, GLFW_KEY_M) ) + { + last_m_press = vg_time; + + vg_info( "start: %u\n",world.routes.routes[0].ui.segment_count ); + for( int i=0; i