make Source:setSpatial a constructor option instead

This commit is contained in:
Nevyn Bengtsson 2020-11-26 11:21:44 +01:00 committed by Bjorn
parent 8403c9bd70
commit 407742e8b5
4 changed files with 18 additions and 29 deletions

View File

@ -49,15 +49,16 @@ static int l_lovrAudioSetVolume(lua_State* L) {
static int l_lovrAudioNewSource(lua_State* L) {
Source* source = NULL;
SoundData* soundData = luax_totype(L, 1, SoundData);
bool spatial = lua_isboolean(L, 2) ? lua_toboolean(L, 2) : true;
if (soundData) {
source = lovrSourceCreate(soundData);
source = lovrSourceCreate(soundData, spatial);
} else {
Blob* blob = luax_readblob(L, 1, "Source");
soundData = lovrSoundDataCreateFromFile(blob, false);
lovrRelease(Blob, blob);
source = lovrSourceCreate(soundData);
source = lovrSourceCreate(soundData, spatial);
lovrRelease(SoundData, soundData);
}

View File

@ -57,13 +57,6 @@ static int l_lovrSourceGetSpatial(lua_State* L) {
return 1;
}
static int l_lovrSourceSetSpatial(lua_State* L) {
Source* source = luax_checktype(L, 1, Source);
bool spatial = lua_toboolean(L, 2);
lovrSourceSetSpatial(source, spatial);
return 0;
}
static int l_lovrSourceSetPose(lua_State *L) {
Source* source = luax_checktype(L, 1, Source);
float position[4], orientation[4];
@ -128,7 +121,6 @@ const luaL_Reg lovrSource[] = {
{ "getVolume", l_lovrSourceGetVolume },
{ "setVolume", l_lovrSourceSetVolume },
{ "getSpatial", l_lovrSourceGetSpatial },
{ "setSpatial", l_lovrSourceSetSpatial },
{ "setPose", l_lovrSourceSetPose },
{ "getDuration", l_lovrSourceGetDuration },
{ "getTime", l_lovrSourceGetTime },

View File

@ -226,17 +226,7 @@ void lovrAudioSetListenerPose(float position[4], float orientation[4])
// Source
Source* lovrSourceCreate(SoundData* sound) {
Source* source = lovrAlloc(Source);
source->sound = sound;
lovrRetain(source->sound);
source->volume = 1.f;
lovrSourceSetSpatial(source, true);
return source;
}
void _lovrSourceAssignConverter(Source *source) {
static void _lovrSourceAssignConverter(Source *source) {
source->converter = NULL;
for (size_t i = 0; i < state.converters.length; i++) {
ma_data_converter* converter = &state.converters.data[i];
@ -263,6 +253,19 @@ void _lovrSourceAssignConverter(Source *source) {
}
}
Source* lovrSourceCreate(SoundData* sound, bool spatial) {
Source* source = lovrAlloc(Source);
source->sound = sound;
lovrRetain(source->sound);
source->volume = 1.f;
source->spatial = spatial;
source->output_channel_count = source->spatial ? 1 : 2;
_lovrSourceAssignConverter(source);
return source;
}
void lovrSourceDestroy(void* ref) {
Source* source = ref;
lovrRelease(SoundData, source->sound);
@ -318,12 +321,6 @@ bool lovrSourceGetSpatial(Source *source) {
return source->spatial;
}
void lovrSourceSetSpatial(Source *source, bool spatial) {
source->spatial = spatial;
source->output_channel_count = source->spatial ? 1 : 2;
_lovrSourceAssignConverter(source);
}
void lovrSourceSetPose(Source *source, float position[4], float orientation[4]) {
mat4_identity(source->pose);
mat4_translate(source->pose, position[0], position[1], position[2]);

View File

@ -36,7 +36,7 @@ float lovrAudioGetVolume(void);
void lovrAudioSetVolume(float volume);
void lovrAudioSetListenerPose(float position[4], float orientation[4]);
Source* lovrSourceCreate(struct SoundData* soundData);
Source* lovrSourceCreate(struct SoundData* soundData, bool spatial);
void lovrSourceDestroy(void* ref);
void lovrSourcePlay(Source* source);
void lovrSourcePause(Source* source);
@ -47,7 +47,6 @@ void lovrSourceSetLooping(Source* source, bool isLooping);
float lovrSourceGetVolume(Source* source);
void lovrSourceSetVolume(Source* source, float volume);
bool lovrSourceGetSpatial(Source *source);
void lovrSourceSetSpatial(Source *source, bool spatial);
void lovrSourceSetPose(Source *source, float position[4], float orientation[4]);
uint32_t lovrSourceGetTime(Source* source);
void lovrSourceSetTime(Source* source, uint32_t sample);