2
0
mirror of https://github.com/FWGS/xash3d-fwgs synced 2024-11-22 18:07:09 +01:00

engine: client: voice: allow restoring voice after toggling voice_enable while connected to server

This commit is contained in:
Alibek Omarov 2024-07-28 17:12:32 +03:00
parent 5554d13f7f
commit 2e30acf611

View File

@ -32,6 +32,11 @@ CVAR_DEFINE_AUTO( voice_inputfromfile, "0", FCVAR_PRIVILEGED, "input voice from
static void Voice_ApplyGainAdjust( int16_t *samples, int count, float scale ); static void Voice_ApplyGainAdjust( int16_t *samples, int count, float scale );
// in case user enabled voice after connection
// can't keep in `voice` struct because it gets zeroed on shutdown
static string voice_codec_init;
static int voice_quality_init;
/* /*
=============================================================================== ===============================================================================
@ -591,10 +596,17 @@ void Voice_Idle( double frametime )
{ {
int i; int i;
if( FBitSet( voice_enable.flags, FCVAR_CHANGED ) && !voice_enable.value ) if( FBitSet( voice_enable.flags, FCVAR_CHANGED ))
{ {
ClearBits( voice_enable.flags, FCVAR_CHANGED );
if( voice_enable.value )
{
if( cls.state == ca_active && COM_CheckString( voice_codec_init ) && voice_quality_init != 0 )
Voice_Init( voice_codec_init, voice_quality_init, false );
}
else
Voice_Shutdown(); Voice_Shutdown();
return;
} }
// update local player status first // update local player status first
@ -613,6 +625,19 @@ Initialize the voice subsystem
*/ */
qboolean Voice_Init( const char *pszCodecName, int quality, qboolean preinit ) qboolean Voice_Init( const char *pszCodecName, int quality, qboolean preinit )
{ {
if( Q_strcmp( pszCodecName, VOICE_OPUS_CUSTOM_CODEC ))
{
Con_Printf( S_ERROR "Server requested unsupported codec: %s\n", pszCodecName );
// reset saved codec name, we won't enable voice for this connection
voice_codec_init[0] = 0;
voice_quality_init = 0;
return false;
}
Q_strncpy( voice_codec_init, pszCodecName, sizeof( voice_codec_init ));
voice_quality_init = quality;
if( !voice_enable.value ) if( !voice_enable.value )
return false; return false;
@ -620,13 +645,6 @@ qboolean Voice_Init( const char *pszCodecName, int quality, qboolean preinit )
if( Q_strcmp( pszCodecName, voice.codec ) || voice.quality != quality ) if( Q_strcmp( pszCodecName, voice.codec ) || voice.quality != quality )
{ {
Voice_Shutdown(); Voice_Shutdown();
if( Q_strcmp( pszCodecName, VOICE_OPUS_CUSTOM_CODEC ))
{
Con_Printf( S_ERROR "Server requested unsupported codec: %s\n", pszCodecName );
return false;
}
voice.autogain.block_size = 128; voice.autogain.block_size = 128;
if( !Voice_InitCustomMode( )) if( !Voice_InitCustomMode( ))