From: hgn Date: Sun, 28 May 2023 02:04:16 +0000 (+0100) Subject: location gui X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;ds=inline;h=74174e4357c402824302174845f89b975dba5981;p=carveJwlIkooP6JGAAIwe30JlM.git location gui --- 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; 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,