X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=main.c;h=e053c42177fb515e180930775d1c2486e251b948;hb=d57b7661518800479c00300ce57407378696eec9;hp=84de4100c203110e5c6da57f5c0512623196bc5b;hpb=9c85e110fa8b965195438d96625ff9753af362a6;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/main.c b/main.c index 84de410..e053c42 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. + */ + + if( sv_scene == 0 ) + { + character_load( &player.mdl, "ch_outlaw" ); + character_init_ragdoll( &player.mdl ); - world_load(); + world_load(); - reset_player( 1, (const char *[]){ "start" } ); - 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 ); @@ -195,10 +235,6 @@ void vg_render(void) 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 ); /* @@ -240,7 +276,7 @@ void vg_render(void) { m4x4_projection( vg_pv, gpipeline.fov, (float)vg_window_x / (float)vg_window_y, - 0.01f, 100.0f ); + 0.04f, 600.0f ); m4x4_mul( vg_pv, world_4x4, vg_pv ); } draw_player(); @@ -269,6 +305,27 @@ void vg_render(void) glViewport( 0,0, vg_window_x, vg_window_y ); } +void vg_render(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 ); + + draw_origin_axis(); + + if( sv_scene == 0 ) + { + render_main_game(); + } + else if( sv_scene == 1 ) + { + physics_test_render(); + } +} + static void run_light_widget( struct light_widget *lw ) { struct ui_checkbox c1 = { .data=&lw->enabled };