X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=main.c;h=f3b5b8cfa0b1598211ba5ddb195fa23fec09690e;hb=344f0153cf1907da87dd041db3ec517325b1c429;hp=0219a66463261341751e391e2e6a14e3e7247121;hpb=98ecdd9f0377f1563566fe4d3d3b8185a055ec4d;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/main.c b/main.c index 0219a66..f3b5b8c 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 = 1; /* 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(); @@ -89,6 +92,14 @@ static int playermodel( int argc, char const *argv[] ) void vg_start(void) { + vg_convar_push( (struct vg_convar){ + .name = "scene", + .data = &sv_scene, + .data_type = k_convar_dtype_i32, + .opt_i32 = { .min=0, .max=1, .clamp=1 }, + .persistent = 1 + }); + vg_convar_push( (struct vg_convar){ .name = "fc", .data = &freecam, @@ -154,13 +165,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_default" ); + 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 +194,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 +219,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 +242,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 +312,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 };