mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-07 22:56:30 -10:00
Apply `const` to a whole bunch of functions. Also change a bunch of ints to bools.
124 lines
3.0 KiB
C++
124 lines
3.0 KiB
C++
/*
|
|
* Copyright (C) Volition, Inc. 1999. All rights reserved.
|
|
*
|
|
* All source code herein is the property of Volition, Inc. You may not sell
|
|
* or otherwise commercially exploit the source or things you created based on the
|
|
* source.
|
|
*
|
|
*/
|
|
|
|
|
|
|
|
#include "cmdline/cmdline.h"
|
|
#include "globalincs/pstypes.h"
|
|
#include "object/object.h"
|
|
#include "sound/channel.h"
|
|
#include "sound/ds.h"
|
|
#include "sound/ds3d.h"
|
|
#include "sound/openal.h"
|
|
#include "sound/sound.h"
|
|
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// ds3d_update_buffer()
|
|
//
|
|
// parameters: channel => identifies the 3D sound to update
|
|
// min => the distance at which sound doesn't get any louder
|
|
// max => the distance at which sound doesn't attenuate any further
|
|
// pos => world position of sound
|
|
// vel => velocity of the objects producing the sound
|
|
//
|
|
// returns: 0 => success
|
|
// -1 => failure
|
|
//
|
|
//
|
|
int ds3d_update_buffer(int channel_id, float min, float max, const vec3d *pos, const vec3d *vel)
|
|
{
|
|
if (Cmdline_no_3d_sound) {
|
|
nprintf(("Sound", "Aborting ds3d_update_buffer due to Cmdline_no_3d_sound...\n"));
|
|
return -1;
|
|
}
|
|
|
|
if (channel_id < 0) {
|
|
return 0;
|
|
}
|
|
|
|
ALuint source_id = Channels[channel_id].source_id;
|
|
ALfloat rolloff = 1.0f;
|
|
|
|
if (pos) {
|
|
OpenAL_ErrorPrint( alSource3f(source_id, AL_POSITION, pos->xyz.x, pos->xyz.y, -pos->xyz.z) );
|
|
}
|
|
|
|
if (vel) {
|
|
OpenAL_ErrorPrint( alSource3f(source_id, AL_VELOCITY, vel->xyz.x, vel->xyz.y, vel->xyz.z) );
|
|
//OpenAL_ErrorPrint( alDopplerFactor(1.0f) );
|
|
} else {
|
|
OpenAL_ErrorPrint( alSource3f(source_id, AL_VELOCITY, 0.0f, 0.0f, 0.0f) );
|
|
OpenAL_ErrorPrint( alDopplerFactor(0.0f) );
|
|
}
|
|
|
|
if (max <= min) {
|
|
rolloff = 0.0f;
|
|
} else {
|
|
#define MIN_GAIN 0.05f
|
|
|
|
rolloff = (min / (min + (max - min))) / MIN_GAIN;
|
|
|
|
if (rolloff < 0.0f) {
|
|
rolloff = 0.0f;
|
|
}
|
|
}
|
|
|
|
OpenAL_ErrorPrint( alSourcef(source_id, AL_ROLLOFF_FACTOR, rolloff) );
|
|
|
|
OpenAL_ErrorPrint( alSourcef(source_id, AL_REFERENCE_DISTANCE, min) );
|
|
OpenAL_ErrorPrint( alSourcef(source_id, AL_MAX_DISTANCE, max) );
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
// ds3d_update_listener()
|
|
//
|
|
// returns: 0 => success
|
|
// -1 => failure
|
|
//
|
|
int ds3d_update_listener(const vec3d *pos, const vec3d *vel, const matrix *orient)
|
|
{
|
|
if (!ds_initialized) {
|
|
return -1;
|
|
}
|
|
|
|
if (Cmdline_no_3d_sound) {
|
|
nprintf(("Sound", "Aborting ds3d_update_listener due to Cmdline_no_3d_sound...\n"));
|
|
return -1;
|
|
}
|
|
|
|
if (pos) {
|
|
OpenAL_ErrorPrint( alListener3f(AL_POSITION, pos->xyz.x, pos->xyz.y, -pos->xyz.z) );
|
|
}
|
|
|
|
if (vel) {
|
|
OpenAL_ErrorPrint( alListener3f(AL_VELOCITY, vel->xyz.x, vel->xyz.y, vel->xyz.z) );
|
|
}
|
|
|
|
if (orient) {
|
|
ALfloat alOrient[6];
|
|
|
|
alOrient[0] = orient->vec.fvec.xyz.x;
|
|
alOrient[1] = orient->vec.fvec.xyz.y;
|
|
alOrient[2] = -orient->vec.fvec.xyz.z;
|
|
|
|
alOrient[3] = orient->vec.uvec.xyz.x;
|
|
alOrient[4] = orient->vec.uvec.xyz.y;
|
|
alOrient[5] = -orient->vec.uvec.xyz.z;
|
|
|
|
OpenAL_ErrorPrint( alListenerfv(AL_ORIENTATION, alOrient) );
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|