diff --git a/main.c b/main.c index 7df0939..ff1ff8f 100644 --- a/main.c +++ b/main.c @@ -227,7 +227,7 @@ float float_rand( float min, float max ) float scale = rand() / (float) RAND_MAX; /* [0, 1.0] */ return min + scale * ( max - min ); /* [min, max] */ } -void play_audio(AudioSample *sample) +void play_audio(AudioSample *sample, float volume) { AudioPlayer *to_use = 0; for(int i = 0; i < ARRLEN(playing_audio); i++) @@ -241,7 +241,7 @@ void play_audio(AudioSample *sample) assert(to_use); *to_use = (AudioPlayer){0}; to_use->sample = sample; - to_use->volume = 0.3f; + to_use->volume = volume; to_use->pitch = float_rand(0.9f, 1.1f); } // keydown needs to be referenced when begin text input, @@ -2507,7 +2507,9 @@ void frame(void) if( (int)it->characters_said > (int)before ) { - play_audio(&sound_simple_talk); + float dist = LenV2(SubV2(it->pos, player->pos)); + float volume = Lerp(-0.6f, clamp01(dist/70.0f), -1.0f); + play_audio(&sound_simple_talk, volume); } } if(it->standing == STANDING_FIGHTING || it->standing == STANDING_JOINED) @@ -3021,14 +3023,6 @@ void frame(void) // interaction circle draw_quad((DrawParams){true, quad_centered(interacting_with->pos, V2(TILE_SIZE, TILE_SIZE)), image_dialog_circle, full_region(image_dialog_circle), WHITE}); - if(interacting_with->is_npc) - { - float dist = LenV2(SubV2(interacting_with->pos, player->pos)); - dist -= 10.0f; // radius around point where dialog is completely opaque - float max_dist = dialog_interact_size/2.0f; - float alpha = 1.0f - (float)clamp(dist/max_dist, 0.0, 1.0); - draw_dialog_panel(interacting_with, alpha); - } } if(player->state == CHARACTER_WALKING) @@ -3073,7 +3067,7 @@ void frame(void) } } - // render gs.entities + // render gs.entities render entities PROFILE_SCOPE("entity rendering") ENTITIES_ITER(gs.entities) { @@ -3119,6 +3113,16 @@ void frame(void) Color col = LerpV4(WHITE, it->damage, RED); if(it->is_npc) { + if(it->is_npc) + { + float dist = LenV2(SubV2(it->pos, player->pos)); + dist -= 10.0f; // radius around point where dialog is completely opaque + float max_dist = dialog_interact_size/2.0f; + float alpha = 1.0f - (float)clamp(dist/max_dist, 0.0, 1.0); + if(gete(player->talking_to) == it && player->state == CHARACTER_TALKING) alpha = 1.0f; + draw_dialog_panel(it, alpha); + } + if(it->npc_kind == NPC_OldMan) { bool face_left =SubV2(player->pos, it->pos).x < 0.0f;