X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=main.c;h=d8a2cebab93c4ce3c1c832a8796067ea6328a798;hb=1c97cb161f885ad24d3356d92c8f4fd0e252bc61;hp=0219a66463261341751e391e2e6a14e3e7247121;hpb=98ecdd9f0377f1563566fe4d3d3b8185a055ec4d;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/main.c b/main.c index 0219a66..d8a2ceb 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(); @@ -154,13 +158,26 @@ void vg_start(void) init_other(); - character_load( &player.mdl, "ch_default" ); - 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" } ); - rb_init( &player.rb ); + reset_player( 1, (const char *[]){ "start" } ); + rb_init( &player.rb ); + } + else + { + physics_test_start(); + } } void vg_free(void) @@ -170,14 +187,21 @@ void vg_free(void) void vg_update(void) { - player_update(); - world_update(); - //traffic_visualize( world.traffic, world.traffic_count ); - // - /* TEMP */ - if( glfwGetKey( vg_window, GLFW_KEY_J )) + if( sv_scene == 0 ) { - v3_copy( player.camera_pos, world.mr_ball.co ); + 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(); } } @@ -188,15 +212,15 @@ 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 ); +} +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 ); @@ -211,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 ); /* @@ -285,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 };