X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=main.c;h=84de4100c203110e5c6da57f5c0512623196bc5b;hb=d8b8c566831e15ef061a66409e1219f44a82097a;hp=b80a1a20527f7c2bfd99f5390d93a30ed12122b3;hpb=3bb0287d544a4cb75de9afe2927ac8e946f3a18e;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/main.c b/main.c index b80a1a2..84de410 100644 --- a/main.c +++ b/main.c @@ -16,6 +16,7 @@ vg_tex2d tex_water = { .path = "textures/water.qoi" }; /* Convars */ static int debugview = 0; static int sv_debugcam = 0; +static int lightedit = 0; /* Components */ #include "road.h" @@ -40,9 +41,10 @@ void vg_register(void) { shader_blit_register(); shader_standard_register(); + shader_vblend_register(); shader_unlit_register(); - terrain_register(); + world_register(); character_register(); water_register(); gate_register(); @@ -52,7 +54,7 @@ static void init_other(void) { render_init(); gate_init(); - terrain_init(); + world_init(); character_init(); audio_init(); } @@ -103,6 +105,14 @@ void vg_start(void) .persistent = 1 }); + vg_convar_push( (struct vg_convar){ + .name = "ledit", + .data = &lightedit, + .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, @@ -136,12 +146,12 @@ void vg_start(void) init_other(); - character_load( &player.mdl, "ch_default" ); + character_load( &player.mdl, "ch_mike" ); character_init_ragdoll( &player.mdl ); world_load(); - reset_player( 1, (const char *[]){ "tutorial" } ); + reset_player( 1, (const char *[]){ "start" } ); player_transform_update(); } @@ -225,7 +235,14 @@ void vg_render(void) glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); else glClear( GL_COLOR_BUFFER_BIT ); - + + if( !player.is_dead ) + { + m4x4_projection( vg_pv, gpipeline.fov, + (float)vg_window_x / (float)vg_window_y, + 0.01f, 100.0f ); + m4x4_mul( vg_pv, world_4x4, vg_pv ); + } draw_player(); /* Draw back in the background @@ -252,10 +269,29 @@ void vg_render(void) glViewport( 0,0, vg_window_x, vg_window_y ); } +static void run_light_widget( struct light_widget *lw ) +{ + struct ui_checkbox c1 = { .data=&lw->enabled }; + + ui_checkbox( &ui_global_ctx, &c1 ); + + if( lw->enabled ) + { + struct ui_slider_vector + colour = { .min=0.0f, .max=2.0f, .len=3, .data=lw->colour }, + dir = { .min=-VG_PIf, .max=VG_PIf, .len=2, .data=lw->dir }; + + ui_slider_vector( &ui_global_ctx, &colour ); + ui_global_ctx.cursor[1] += 4; + ui_slider_vector( &ui_global_ctx, &dir ); + } +} + void vg_ui(void) { char buf[20]; +#if 0 snprintf( buf, 20, "%.2fm/s", v3_length( player.v ) ); gui_text( (ui_px [2]){ 0, 0 }, buf, 1, k_text_align_left ); @@ -280,4 +316,40 @@ void vg_ui(void) gui_text( (ui_px [2]){ 0, 60 }, "Gamepad not ready", 1, k_text_align_left ); } +#endif + + if( lightedit ) + { + ui_global_ctx.cursor[0] = 10; + ui_global_ctx.cursor[1] = 10; + ui_global_ctx.cursor[2] = 200; + ui_global_ctx.cursor[3] = 20; + + struct ub_world_lighting *wl = &gpipeline.ub_world_lighting; + struct ui_slider_vector + s5 = { .min=0.0f, .max=2.0f, .len=3, .data=wl->g_ambient_colour }; + + struct ui_slider + s8 = { .min=0.0f, .max=2.0f, .data = &gpipeline.shadow_spread }, + s9 = { .min=0.0f, .max=25.0f, .data = &gpipeline.shadow_length }; + + for( int i=0; i<3; i++ ) + run_light_widget( &gpipeline.widgets[i] ); + + gui_text( ui_global_ctx.cursor, "Ambient", 1, 0 ); + ui_global_ctx.cursor[1] += 16; + ui_slider_vector( &ui_global_ctx, &s5 ); + + gui_text( ui_global_ctx.cursor, "Shadows", 1, 0 ); + ui_global_ctx.cursor[1] += 16; + ui_slider( &ui_global_ctx, &s8 ); + ui_slider( &ui_global_ctx, &s9 ); + + gui_text( ui_global_ctx.cursor, "Misc", 1, 0 ); + ui_global_ctx.cursor[1] += 16; + struct ui_checkbox c1 = {.data = &wl->g_light_preview}; + ui_checkbox( &ui_global_ctx, &c1 ); + + render_update_lighting_ub(); + } }