X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=main.c;h=a747e6fc2caea0a1edc144c29de32b0538ef3a1d;hb=91d035f4845a6f9f62487b43e5142c4148e7f047;hp=aa90b02bdc25d39d127155a874fc9971d668ff51;hpb=168eb5c363f510d60703498e01ffcdb52bf9fd07;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/main.c b/main.c index aa90b02..a747e6f 100644 --- a/main.c +++ b/main.c @@ -17,6 +17,7 @@ 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; /* Components */ #include "road.h" @@ -37,6 +38,8 @@ static int lightedit = 0; #include "shaders/standard.h" #include "shaders/unlit.h" +#include "physics_test.h" + void vg_register(void) { shader_blit_register(); @@ -52,6 +55,7 @@ void vg_register(void) static void init_other(void) { + player_init(); render_init(); gate_init(); world_init(); @@ -90,7 +94,7 @@ static int playermodel( int argc, char const *argv[] ) void vg_start(void) { 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 }, @@ -121,6 +125,14 @@ void vg_start(void) .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,13 +158,26 @@ 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. + */ - world_load(); + if( sv_scene == 0 ) + { + character_load( &player.mdl, "ch_default" ); + character_init_ragdoll( &player.mdl ); + + world_load(); - reset_player( 1, (const char *[]){ "tutorial" } ); - player_transform_update(); + reset_player( 1, (const char *[]){ "start" } ); + rb_init( &player.rb ); + } + else + { + physics_test_start(); + } } void vg_free(void) @@ -162,7 +187,22 @@ void vg_free(void) void vg_update(void) { - player_update(); + if( sv_scene == 0 ) + { + 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(); + } } static void vg_framebuffer_resize( int w, int h ) @@ -172,16 +212,16 @@ 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 ); @@ -191,33 +231,24 @@ void vg_render(void) gpipeline.fov = freecam? 60.0f: 135.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 */ - + render_world( vg_pv, player.camera ); 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 };