+/*
+ * Copyright 2021-2022 (C) Mount0 Software, Harry Godden - All Rights Reserved
+ * -----------------------------------------------------------------------------
+ *
+ * Player audio
+ *
+ * -----------------------------------------------------------------------------
+ */
+
#ifndef PLAYER_AUDIO_H
#define PLAYER_AUDIO_H
*/
static void player_audio(void)
{
- static int _ding = 0;
-
- int last = _ding;
- _ding = glfwGetKey(vg_window, GLFW_KEY_C);
-
- int trigger_ding = 0;
- if( _ding && !last )
- trigger_ding = 1;
+ struct player_phys *phys = &player.phys;
static int _air = 0;
int l2 = _air;
- _air = player.in_air;
+ _air = phys->in_air;
static double last_revert = -2000.0;
audio_lock();
double revert_delta = vg_time - last_revert;
- if( player.on_board && (!_air && l2) && (fabsf(player.slip) > 0.5f) &&
+ if( phys->on_board && (!_air && l2) && (fabsf(phys->slip) > 0.5f) &&
(revert_delta > 0.7) )
{
- audio_player_set_position( &audio_player_extra, player.rb.co );
+ audio_player_set_position( &audio_player_extra, phys->rb.co );
audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D );
audio_player_set_vol( &audio_player_extra, 2.0f );
audio_player_playclip( &audio_player_extra, &audio_lands[rand()%5] );
}
static float air = 0.0f;
- air = vg_lerpf(air, player.in_air? 1.0f: 0.0f, 5.0f*ktimestep);
+ air = vg_lerpf(air, phys->in_air? 1.0f: 0.0f, 5.0f*ktimestep);
/* Spacial info */
v3f ears = { 1.0f,0.0f,0.0f };
v3f delta;
float *cam = player.camera[3],
- *pos = player.rb.co;
+ *pos = phys->rb.co;
- if( trigger_ding )
- audio_player_playclip( &audio_player_extra, &audio_ding );
-
- audio_player_set_position( &audio_player0, player.rb.co );
- audio_player_set_position( &audio_player1, player.rb.co );
- audio_player_set_position( &audio_player2, player.rb.co );
+ audio_player_set_position( &audio_player0, phys->rb.co );
+ audio_player_set_position( &audio_player1, phys->rb.co );
+ audio_player_set_position( &audio_player2, phys->rb.co );
audio_player_set_position( &audio_player_gate, world.render_gate_pos );
+ audio_player_set_vol( &audio_player_gate, 5.0f );
- v3_sub( player.rb.co, player.camera[3], delta );
+ v3_sub( phys->rb.co, player.camera[3], delta );
v3_normalize( delta );
m3x3_mulv( player.camera, ears, ears );
{
v3f waterpos;
enum audio_sprite_type sprite_type =
- audio_sample_sprite_random( player.rb.co, waterpos );
+ audio_sample_sprite_random( phys->rb.co, waterpos );
if( sprite_type != k_audio_sprite_type_none )
{
}
}
- if( freecam || player.is_dead || !player.on_board )
+ if( freecam || player.is_dead || !phys->on_board )
{
audio_player_set_vol( &audio_player0, 0.0f );
audio_player_set_vol( &audio_player1, 0.0f );
audio_player_set_vol( &audio_player2, 0.0f );
+ audio_player_set_vol( &audio_player3, 0.0f );
int walk_phase = 0;
if( vg_fractf(player.walk_timer) > 0.5f )
else
walk_phase = 0;
- if( (player.step_phase != walk_phase) && !player.in_air )
+ if( (player.step_phase != walk_phase) && !phys->in_air )
{
audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D );
- audio_player_set_position( &audio_player_extra, player.rb.co );
+ audio_player_set_position( &audio_player_extra, phys->rb.co );
audio_player_set_vol( &audio_player_extra, 6.0f );
audio_player_playclip( &audio_player_extra,
&audio_footsteps[rand()%4] );
else
{
/* Composite */
- float speed = vg_minf(v3_length( player.rb.v )*0.1f,1.0f),
+ float speed = vg_minf(v3_length( phys->rb.v )*0.1f,1.0f),
attn = speed,
- slide = vg_clampf( fabsf(player.slip), 0.0f, 1.0f ),
+ slide = vg_clampf( fabsf(phys->slip), 0.0f, 1.0f ),
vol0 = (1.0f-air)*attn*(1.0f-slide),
vol1 = air *attn,
vol2 = (1.0f-air)*attn*slide;