From 4fe90f7b74fb82cd00dac0e9b93236b356ec558f Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 2 Nov 2023 05:30:36 +0100 Subject: [PATCH] Add audio functionality to Lua --- Source/CMakeLists.txt | 1 + Source/lua/lua.cpp | 2 ++ Source/lua/modules/audio.cpp | 25 +++++++++++++++++++++++++ Source/lua/modules/audio.hpp | 9 +++++++++ 4 files changed, 37 insertions(+) create mode 100644 Source/lua/modules/audio.cpp create mode 100644 Source/lua/modules/audio.hpp diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 9fd547560..a6c378fcf 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -134,6 +134,7 @@ set(libdevilutionx_SRCS lua/lua.cpp lua/repl.cpp + lua/modules/audio.cpp lua/modules/render.cpp lua/modules/log.cpp diff --git a/Source/lua/lua.cpp b/Source/lua/lua.cpp index f78a1c581..7b8af675c 100644 --- a/Source/lua/lua.cpp +++ b/Source/lua/lua.cpp @@ -10,6 +10,7 @@ #include "appfat.h" #include "engine/assets.hpp" +#include "lua/modules/audio.hpp" #include "lua/modules/log.hpp" #include "lua/modules/render.hpp" #include "plrmsg.h" @@ -163,6 +164,7 @@ void LuaInitialize() const sol::table loaded = lua.create_table_with( "devilutionx.version", PROJECT_VERSION, "devilutionx.log", LuaLogModule(lua), + "devilutionx.audio", LuaLogModule(lua), "devilutionx.render", LuaRenderModule(lua), "devilutionx.message", [](std::string_view text) { EventPlrMsg(text, UiFlags::ColorRed); }); lua["require"] = lua["requireGen"](loaded, LuaLoadScriptFromAssets); diff --git a/Source/lua/modules/audio.cpp b/Source/lua/modules/audio.cpp new file mode 100644 index 000000000..291a0f874 --- /dev/null +++ b/Source/lua/modules/audio.cpp @@ -0,0 +1,25 @@ +#include "lua/modules/render.hpp" + +#include + +#include "effects.h" + +namespace devilution { + +namespace { + +bool IsValidSfx(int16_t psfx) +{ + return psfx >= 0 && psfx <= static_cast(SfxID::LAST); +} + +} // namespace + +sol::table LuaAudioModule(sol::state_view &lua) +{ + return lua.create_table_with( + "playSfx", [](int psfx) { if (IsValidSfx(psfx)) PlaySFX(static_cast(psfx)); }, + "playSfxLoc", [](int psfx, int x, int y) { if (IsValidSfx(psfx)) PlaySfxLoc(static_cast(psfx), { x, y }); }); +} + +} // namespace devilution diff --git a/Source/lua/modules/audio.hpp b/Source/lua/modules/audio.hpp new file mode 100644 index 000000000..5dd09a629 --- /dev/null +++ b/Source/lua/modules/audio.hpp @@ -0,0 +1,9 @@ +#pragma once + +#include + +namespace devilution { + +sol::table LuaAudioModule(sol::state_view &lua); + +} // namespace devilution