diff --git a/src/logic/scripting/lua/LuaState.cpp b/src/logic/scripting/lua/LuaState.cpp index 0b870f92..9aca86e0 100644 --- a/src/logic/scripting/lua/LuaState.cpp +++ b/src/logic/scripting/lua/LuaState.cpp @@ -6,6 +6,7 @@ #include "libgui.h" #include "libplayer.h" #include "libinventory.h" +#include "libaudio.h" #include "../../../util/stringutil.h" lua::luaerror::luaerror(const std::string& message) : std::runtime_error(message) { @@ -124,6 +125,7 @@ void lua::LuaState::createLibs() { openlib("time", timelib, 0); openlib("file", filelib, 0); openlib("gui", guilib, 0); + openlib("audio", audiolib, 0); addfunc("print", lua_wrap_errors); diff --git a/src/logic/scripting/lua/libaudio.cpp b/src/logic/scripting/lua/libaudio.cpp new file mode 100644 index 00000000..2af160e8 --- /dev/null +++ b/src/logic/scripting/lua/libaudio.cpp @@ -0,0 +1,40 @@ +#include "libaudio.h" + +#include "../../../audio/audio.h" +#include "../../../engine.h" +#include "../scripting.h" + +inline const char* DEFAULT_CHANNEL = "regular"; + +static int l_audio_play_sound(lua_State* L) { + const char* name = lua_tostring(L, 1); + lua::luanumber x = lua_tonumber(L, 2); + lua::luanumber y = lua_tonumber(L, 3); + lua::luanumber z = lua_tonumber(L, 4); + lua::luanumber volume = lua_tonumber(L, 5); + lua::luanumber pitch = lua_tonumber(L, 6); + const char* channel = DEFAULT_CHANNEL; + if (!lua_isnoneornil(L, 7)) { + channel = lua_tostring(L, 7); + } + int channel_index = audio::get_channel_index(channel); + if (channel_index == -1) { + return 0; + } + + auto assets = scripting::engine->getAssets(); + auto sound = assets->getSound(name); + if (sound == nullptr) { + return 0; + } + audio::speakerid_t id = audio::play( + sound, glm::vec3(x, y, z), false, volume, pitch, false, audio::PRIORITY_NORMAL, channel_index + ); + lua_pushinteger(L, static_cast(id)); + return 1; +} + +const luaL_Reg audiolib [] = { + {"play_sound", lua_wrap_errors}, + {NULL, NULL} +}; diff --git a/src/logic/scripting/lua/libaudio.h b/src/logic/scripting/lua/libaudio.h new file mode 100644 index 00000000..3cbd6e42 --- /dev/null +++ b/src/logic/scripting/lua/libaudio.h @@ -0,0 +1,8 @@ +#ifndef LOGIC_SCRIPTING_LUA_LIBAUDIO_H_ +#define LOGIC_SCRIPTING_LUA_LIBAUDIO_H_ + +#include "lua_commons.h" + +extern const luaL_Reg audiolib[]; + +#endif // LOGIC_SCRIPTING_LUA_LIBAUDIO_H_