mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Sounds: Various little improvements (#12486)
Use SimpleSoundSpec where reasonable (OpenAL) Ensure the sound IDs do not underflow or get overwritten -> loop in u16 Proper use of an enum.
This commit is contained in:
parent
051181fa6e
commit
e51f474613
9 changed files with 112 additions and 108 deletions
|
@ -268,30 +268,32 @@ int ModApiClient::l_sound_play(lua_State *L)
|
|||
SimpleSoundSpec spec;
|
||||
read_soundspec(L, 1, spec);
|
||||
|
||||
SoundLocation type = SoundLocation::Local;
|
||||
float gain = 1.0f;
|
||||
float pitch = 1.0f;
|
||||
bool looped = false;
|
||||
s32 handle;
|
||||
v3f position;
|
||||
|
||||
if (lua_istable(L, 2)) {
|
||||
getfloatfield(L, 2, "gain", gain);
|
||||
getfloatfield(L, 2, "pitch", pitch);
|
||||
getboolfield(L, 2, "loop", looped);
|
||||
getfloatfield(L, 2, "pitch", spec.pitch);
|
||||
getboolfield(L, 2, "loop", spec.loop);
|
||||
|
||||
lua_getfield(L, 2, "pos");
|
||||
if (!lua_isnil(L, -1)) {
|
||||
v3f pos = read_v3f(L, -1) * BS;
|
||||
position = read_v3f(L, -1) * BS;
|
||||
type = SoundLocation::Position;
|
||||
lua_pop(L, 1);
|
||||
handle = sound->playSoundAt(
|
||||
spec.name, looped, gain * spec.gain, pos, pitch);
|
||||
lua_pushinteger(L, handle);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
handle = sound->playSound(spec.name, looped, gain * spec.gain, spec.fade, pitch);
|
||||
lua_pushinteger(L, handle);
|
||||
spec.gain *= gain;
|
||||
|
||||
s32 handle;
|
||||
if (type == SoundLocation::Local)
|
||||
handle = sound->playSound(spec);
|
||||
else
|
||||
handle = sound->playSoundAt(spec, position);
|
||||
|
||||
lua_pushinteger(L, handle);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue