X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=main.c;h=ba6f384ca48debf596103cdfce8fc4c24c3866f0;hb=ecc4dfbfb3adf91d2dfc03ba0ec9a821fcc2390c;hp=55a8f5994581cd60eac60dfa82d8d2ace34316e1;hpb=afa80c76d03f5e983092e9d7be33a9102a7ab25e;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/main.c b/main.c index 55a8f59..ba6f384 100644 --- a/main.c +++ b/main.c @@ -1,3 +1,7 @@ +/* + * Copyright (C) Mount0 Software, Harry Godden - All Rights Reserved + */ + #include "common.h" /* Resources */ @@ -17,6 +21,7 @@ static int sv_debugcam = 0; #include "road.h" #include "scene.h" #include "ik.h" +#include "audio.h" #include "terrain.h" #include "character.h" #include "ragdoll.h" @@ -35,14 +40,24 @@ 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(); } +static void init_other(void) +{ + render_init(); + gate_init(); + world_init(); + character_init(); + audio_init(); +} + vg_tex2d *texture_list[] = { &tex_norwey, @@ -59,25 +74,6 @@ int main( int argc, char *argv[] ) vg_init( argc, argv, "Voyager Game Engine" ); } -#if 0 -rigidbody mr_box = { - .bbx = {{ -1.0f, -0.25f, -0.25f }, { 1.0f, 0.25f, 0.25f }} -}; - -rigidbody mrs_box = { - .bbx = {{ -0.5f, -0.25f, -0.25f }, { 0.5f, 0.25f, 0.25f }} -}; - -teleport_gate gate_a = { - .co = { 0.0f, -3.0f, -15.0f }, - .q = { 0.0f, 0.0f, 0.0f, 1.0f } -}, -gate_b = { - .co = { -8.0f, -3.0f, -17.0f }, - .q = { 0.0f, 0.0f, 0.0f, 1.0f } -}; -#endif - static int playermodel( int argc, char const *argv[] ) { if( argc < 1 ) return 0; @@ -100,6 +96,22 @@ void vg_start(void) .persistent = 1 }); + vg_convar_push( (struct vg_convar){ + .name = "grid", + .data = &walk_grid_iterations, + .data_type = k_convar_dtype_i32, + .opt_i32 = { .min=0, .max=1, .clamp=0 }, + .persistent = 1 + }); + + vg_convar_push( (struct vg_convar){ + .name = "walk_speed", + .data = &k_walkspeed, + .data_type = k_convar_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 1 + }); + vg_convar_push( (struct vg_convar){ .name = "debugcam", .data = &sv_debugcam, @@ -122,11 +134,8 @@ void vg_start(void) }); vg_tex2d_init( texture_list, vg_list_size( texture_list ) ); - - render_init(); - gate_init(); - terrain_init(); - character_init(); + + init_other(); character_load( &player.mdl, "ch_default" ); character_init_ragdoll( &player.mdl ); @@ -137,6 +146,11 @@ void vg_start(void) player_transform_update(); } +void vg_free(void) +{ + vg_tex2d_free( texture_list, vg_list_size(texture_list) ); +} + void vg_update(void) { player_update(); @@ -156,43 +170,19 @@ void vg_render(void) glDisable( GL_DEPTH_TEST ); glClearColor( 0.11f, 0.35f, 0.37f, 1.0f ); - glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); float speed = freecam? 0.0f: v3_length( player.v ); v3f shake = { vg_randf()-0.5f, vg_randf()-0.5f, vg_randf()-0.5f }; v3_muls( shake, speed*0.01f, shake ); - if( player.is_dead ) - { -#if 0 - v3f delta; - v3_sub( player.mdl.ragdoll[k_chpart_head].co, player.follow, delta ); - v3_normalize(delta); - - v3f follow_pos; - v3_muladds( player.mdl.ragdoll[k_chpart_head].co, delta, - -1.5f, follow_pos ); - v3_lerp( player.follow, follow_pos, 0.1f, player.follow ); - v3_negate( player.follow, final ); - - - float yaw = atan2f( delta[0], -delta[2] ); - float pitch = asinf( delta[1] ); - m4x3_rotate_x( world_matrix, -pitch ); - m4x3_rotate_y( world_matrix, yaw ); -#endif - } - else - { - } - m4x4f world_4x4; m4x3_expand( player.camera_inverse, world_4x4 ); - gpipeline.fov = freecam? 60.0f: 120.0f; + gpipeline.fov = freecam? 60.0f: 135.0f; /* 120 */ m4x4_projection( vg_pv, gpipeline.fov, (float)vg_window_x / (float)vg_window_y, - 0.025f, 1000.0f ); + 0.1f, 2100.0f ); m4x4_mul( vg_pv, world_4x4, vg_pv ); @@ -210,12 +200,14 @@ void vg_render(void) render_water_texture( player.camera ); glBindFramebuffer( GL_FRAMEBUFFER, 0 ); - render_water_surface( vg_pv ); + render_water_surface( vg_pv, player.camera ); -#if 0 vg_tex2d_bind( &tex_water, 1 ); - render_gate( &gate_a, cam_transform ); -#endif + + for( int i=0; i