From 74174e4357c402824302174845f89b975dba5981 Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 28 May 2023 03:04:16 +0100 Subject: [PATCH] location gui --- gui.h | 56 +++++++++++++++++++++++++++++++++- maps_src/mp_mtzero/main.mdl | Bin 15534880 -> 15535256 bytes maps_src/mp_spawn/main.mdl | Bin 8294744 -> 8295112 bytes player_common.h | 4 +-- render.h | 15 +++++++-- world.c | 59 +++++++++++++++++++++++++++--------- world.h | 5 +-- world_audio.c | 2 +- 8 files changed, 118 insertions(+), 23 deletions(-) diff --git a/gui.h b/gui.h index c057ce6..e4d0068 100644 --- a/gui.h +++ b/gui.h @@ -10,6 +10,9 @@ struct{ helpers[4]; u32 helper_count; + char location[64]; + f64 location_time; + f32 factive; font3d font; } @@ -53,13 +56,46 @@ void gui_draw(void) render_fsquad1(); } + f64 loc_t = (vg.time - gui.location_time) / 5.0; + if( (loc_t < 1.0) && (gui.location_time != 0.0) ){ + /* yep this code is a mess, i dont care anymore */ + glEnable(GL_BLEND); + glDisable(GL_DEPTH_TEST); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glBlendEquation(GL_FUNC_ADD); + + f32 t = 1.0f-vg_minf(1.0f,vg_minf(loc_t*20.0f,2.0f-loc_t*2.0f)), + o = 1.0f-t*t*(2.0f-t); + + shader_blitcolour_use(); + shader_blitcolour_uColour( (v4f){ 0.0f, 0.0f, 0.0f, o*0.5f } ); + render_fsquad2(); + + f32 dy = ft/0.79f, + scale = dy*0x1p-4f*0.5f; + + m4x3f mmdl; + m3x3_identity( mmdl ); + m3x3_scale( mmdl, (v3f){scale,scale,scale} ); + v3_zero( mmdl[3] ); + + f32 pad = dy*0x1p-4f*0.125f; + f32 w = font3d_string_width( &gui.font,2,gui.location ); + + mmdl[3][0] = fr*0.5f - w*scale*0.5f; + mmdl[3][1] = 0.3f*ft+pad*2.0f; + + font3d_bind( &gui.font, &ortho ); + shader_model_font_uColour( (v4f){1.2f,1.2f,1.2f,o} ); + font3d_simple_draw( &gui.font, 2, gui.location, &ortho, mmdl ); + } + font3d_bind( &gui.font, &ortho ); float dy = ft/0.79f, scale = dy*0x1p-4f*0.75f; m4x3f mmdl; - v4f q; m3x3_identity( mmdl ); m3x3_scale( mmdl, (v3f){scale,scale,scale} ); v3_zero( mmdl[3] ); @@ -104,9 +140,27 @@ void gui_helper_action( const char *bindstr, const char *text ) helper->text = text; } +VG_STATIC +int gui_location_print_ccmd( int argc, const char *argv[] ){ + if( argc > 0 ){ + char new_loc[64]; + vg_str str; + vg_strnull( &str, new_loc, 64 ); + for( int i=0; i7=(~Qh-$Y>b=a!ujkG#%Zk&=an>TsKCv|_E2mNA-(p&!mUU3QD=D0ebm>Wi0gve%a><8s&K zN)ckNZnVy>+A7@iwRS!r#e8A_+8&#nc2A{M%LvgQlwzFEE2k-c27T>PmvyR3iU<#J(d4m+vW7Q zttN-l!m<4W+T)Gnw6`%kRGvq5I+*Jp@HrHnLfEe85(1w6qH)al@O`vOj#A4;FFsV? zc~m*AH~y{fYPES(ligVs-XyWeJ+IX2awe{F);L6a`}y+}UpR2gX53Lcv2gW;=IoN=X?b-KDLJWwoAdpx zv!ulkEhdNmMf?0A8jadY%Y^(sz) zy5#|B@n;?))cP-KVP`{AkA#9Th(IJRK@_4f7UM7;6EG2%ViIC78JFR5Ou-eHifNdR zSm+RkD-n+b%s?V$ViuAx8&~0KT!UoH!CYL66kLaSn2!Zmh*aodz#^m}9T~_(7P66p zT;w4i1-KqY6k;)!;0D}?rML+6B zoWuwC5Fg=Ve1cOLz-fGnGx!W=@j1T0mpF&7@HM`{w;05Ee1{A89zWnm{Dhw|gp2qE MzlNH6ers6qFUNxEmjD0& delta 1440 zcmXxgX?RRm7{Kv+ZlbZ4Xc2c320_(Y6Cxq4+IO*3V;#dxlB<(DF_{p$B&Ed8m@u)& z(uz?*Gcm{_w3b@OTCIIwKlqpr9*_Tx^gPdR-gnOXKJPjAdo7kbPKv-3bP{>Y00z5>*u;q=xMFL7LTWPP4ddPSs-98*|)lgIpQuE>iU0 zvr1fLq^O?9Sjncj%yac-y^~c{Q)@(CU2{0?R#i)O@V~YvN*F|rCr%g=j0r*tu$NQQ zXIE2FUF7;I$QM#)Vm|a4a~$@}G@D+Lq@-fO9JgpDXBB&VLWxiE3n`Ss2LR!R^%j9}3-Qr3$tD4o8#qh(PcS4b+BOXOo;*I4(GST_}wVjSkm(8p>tQ?yd z)F1CdO@AAUrt&GhM4<&*!iZLAjW&ozTeL%ae1;DA939aKozVqd(G6dqJ4}c{5A;MVdLa(+ z=#4%|z?b+6eepH=p+5#-AO>MD^!FKxVHl1P7>Q9BjYN#WSd7DXe1i%27D&FDftj$vhGe856)I-oJJ^v14GyGZHk`0vdi+kMn?OOj}_+^l!3Cdn1>tQVq;0v|5B(yBY zFJ+TTSu~o8755OrOJ+}RFJ-2o#^Z@-A-)u_{@D|PmLe;Ge*5GU-=XjU2DLMBLoL3k zou%GNqM?*!G{dxe?fTeY>9Qh^R$JF(CI3L~D)(Fp8-E8z5|QLkR5cSry5}H2#Ymf~ z9`m&C=oR_jlb_XlgB8_n-@bRW`QBSEU)}BwXMTJRS6<)T`edy)*cohT`Ev7dbEnVO zVtuNQuX7fMv0lDk^Wu;5L|a|Oqt==I&eke8G4nE4>uN| z4jwGTA}q!dEX6V`hZig0Lp@ev6;@*n8n71YupW)rfQ_)vwh2uLpcz4IMhGnkqZMt~ zf_8LZE4E=fc3>xVVK?@m6MNBxeb|p~9Kb>J;1CX@7kxN_qd11+h@c-TP9TaHG{iB0 olStqc29ZPxI)*Te(=d>Ri4kOw#VF3;EY9IPE84gCc0FSTDt)RJ@~9TWbZuO6&cuc&GJ3$1=1dFyKI;^}2AOabZGc z2oXXzdY~Iw zZI-=V^Rf^rw-6E!DpgZArYh}7tautpMP5=G<4VvI7NV167{zQMQ&g*(sjCIM+23dc zq;%uEz5EUY(-G&mJ|fMiW-4X1ZrFX)2TPJ@vx2PCR$K}s{tgP^BKZuvyH+a96zyA6 zKZbjKsMC8ylY0q5qC`@51r-;kX1DF08>?xUmi%c(EQE(1A{D#3uN#8C}?d zt=NX`=!PFVpdf%A1ksC~2w@j?V-NOXANJz_!Z?USh@cOLaRmJsz)=k17=~~hQN(Zp z_KXRf#4t`Fi4lzAG|u2G&fz>R;36*JGOpk%uHiav;3iVIh1Q)> Di&N|A diff --git a/player_common.h b/player_common.h index ab98228..2be689e 100644 --- a/player_common.h +++ b/player_common.h @@ -9,8 +9,8 @@ VG_STATIC float k_cam_spring = 20.0f, k_cam_damp = 6.7f, k_cam_punch = -1.0f, - k_cam_shake_strength = 1.0f, - k_cam_shake_trackspeed = 1.0f; + k_cam_shake_strength = 0.0001f, + k_cam_shake_trackspeed = 0.2f; VG_STATIC void player_look( player_instance *player, v3f angles ); VG_STATIC void player__cam_iterate( player_instance *player ); diff --git a/render.h b/render.h index d626b7a..6b956de 100644 --- a/render.h +++ b/render.h @@ -526,12 +526,14 @@ VG_STATIC void async_render_init( void *payload, u32 size ) render_fb_allocate( fb ); } + f32 rh = 0x1p-4f, ih = 0.3f; + float quad[] = { 0.00f,0.00f, 1.00f,1.00f, 0.00f,1.00f, /* fsquad */ 0.00f,0.00f, 1.00f,0.00f, 1.00f,1.00f, - 0.00f,0.00f, 1.00f,0x1p-4f,0.00f,0x1p-4f, /* fsquad1 */ - 0.00f,0.00f, 1.00f,0.00f, 1.00f,0x1p-4f, + 0.00f,0.00f, 1.00f,rh, 0.00f,rh, /* fsquad1 */ + 0.00f,0.00f, 1.00f,0.00f, 1.00f,rh, /* 9x9 debug grid */ /* row0 */ @@ -555,6 +557,9 @@ VG_STATIC void async_render_init( void *payload, u32 size ) 0.30f,0.60f, 0.60f,0.60f, 0.60f,0.90f, 0.60f,0.60f, 0.90f,0.90f, 0.60f,0.90f, 0.60f,0.60f, 0.90f,0.60f, 0.90f,0.90f, + + 0.00f,ih, 1.00f,ih+rh, 0.00f,ih+rh, /* fsquad2 */ + 0.00f,ih, 1.00f,ih, 1.00f,ih+rh, }; vg_console_reg_cmd( "fb", render_framebuffer_control, @@ -602,6 +607,12 @@ VG_STATIC void render_fsquad1(void) glDrawArrays( GL_TRIANGLES, 6, 6 ); } +VG_STATIC void render_fsquad2(void) +{ + glBindVertexArray( gpipeline.fsquad.vao ); + glDrawArrays( GL_TRIANGLES, 66,6 ); +} + /* * Call this inside the UI function */ diff --git a/world.c b/world.c index 209de3e..5cc7841 100644 --- a/world.c +++ b/world.c @@ -179,6 +179,34 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) } sfd_update(); + /* volumes + * ------------------------------------------------------------------------- + */ + + /* filter and check the existing ones + * TODO: on change world, clear volumes list */ + u32 j=0; + for( u32 i=0; ient_volume, idx ); + + v3f local; + m4x3_mulv( volume->to_local, pos, local ); + if( (fabsf(local[0]) <= 1.0f) && + (fabsf(local[1]) <= 1.0f) && + (fabsf(local[2]) <= 1.0f) ) + { + world_static.active_trigger_volumes[ j ++ ] = idx; + boxf cube = {{-1.0f,-1.0f,-1.0f},{1.0f,1.0f,1.0f}}; + vg_line_boxf_transformed( volume->to_world, cube, 0xff00ccff ); + /* triggr on stay ..... */ + } + else{ + /* trigger on exit...... */ + } + } + world_static.active_trigger_volume_count = j; + static float random_accum = 0.0f; random_accum += vg.time_delta; @@ -198,14 +226,19 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) bh_iter_init_box( 0, &it, volume_proximity ); i32 idx; - int in_volume = 0; - while( bh_next( world->volume_bh, &it, &idx ) ){ ent_volume *volume = mdl_arritm( &world->ent_volume, idx ); boxf cube = {{-1.0f,-1.0f,-1.0f},{1.0f,1.0f,1.0f}}; if( volume->type == k_volume_subtype_trigger ){ + for( u32 i=0; i + vg_list_size(world_static.active_trigger_volumes) ) continue; + v3f local; m4x3_mulv( volume->to_local, pos, local ); @@ -213,20 +246,17 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) (fabsf(local[1]) <= 1.0f) && (fabsf(local[2]) <= 1.0f) ) { - in_volume = 1; - vg_line_boxf_transformed( volume->to_world, cube, 0xff00ff00 ); - - if( !world_static.in_volume ){ - ent_call basecall; - basecall.function = k_ent_function_trigger; - basecall.id = mdl_entity_id( k_ent_volume, idx ); - basecall.data = NULL; + ent_call basecall; + basecall.function = k_ent_function_trigger; + basecall.id = mdl_entity_id( k_ent_volume, idx ); + basecall.data = NULL; - entity_call( world, &basecall ); - } + entity_call( world, &basecall ); + world_static.active_trigger_volumes[ + world_static.active_trigger_volume_count ++ ] = idx; } else - vg_line_boxf_transformed( volume->to_world, cube, 0xff0000ff ); + vg_line_boxf_transformed( volume->to_world, cube, 0xffcccccc ); } else if( volume->type == k_volume_subtype_particle ){ vg_line_boxf_transformed( volume->to_world, cube, 0xff00c0ff ); @@ -239,8 +269,8 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) entity_call( world, &basecall ); } } +next_volume:; } - world_static.in_volume = in_volume; #if 0 if( k_debug_light_indices ) @@ -261,7 +291,6 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) vg_line_pt3( light->node->co, 0.25f, colour ); } } - #endif } diff --git a/world.h b/world.h index 58ff1b6..a3f69a5 100644 --- a/world.h +++ b/world.h @@ -192,10 +192,11 @@ struct world_static { u32 current_run_version; double time, rewind_from, rewind_to, last_use; - int in_volume; + u32 active_trigger_volumes[8]; + u32 active_trigger_volume_count; world_instance worlds[4]; - u32 active_world; + i32 active_world; } static world_static; diff --git a/world_audio.c b/world_audio.c index facbcc4..ee1aeca 100644 --- a/world_audio.c +++ b/world_audio.c @@ -115,7 +115,7 @@ VG_STATIC void world_audio_sample_distances( v3f co, int *index, float *value ) distances[si] = dist; - if( vg_lines.draw ){ + if( vg_audio.debug_ui && vg_lines.draw ){ for( int i=0; i<14; i++ ){ if( distances[i] != 200.0f ){ u32 colours[] = { VG__RED, VG__BLUE, VG__GREEN, -- 2.25.1