From df6762b4fe0d6008becc5f9aff21eb756de2586f Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 5 Mar 2024 18:05:26 +0300 Subject: [PATCH] lua: more speaker getters/setters --- src/logic/scripting/lua/libaudio.cpp | 104 +++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/src/logic/scripting/lua/libaudio.cpp b/src/logic/scripting/lua/libaudio.cpp index e9b078df..f87dc16c 100644 --- a/src/logic/scripting/lua/libaudio.cpp +++ b/src/logic/scripting/lua/libaudio.cpp @@ -1,5 +1,6 @@ #include "api_lua.h" #include "lua_commons.h" +#include "lua_util.h" #include "../../../audio/audio.h" #include "../../../engine.h" @@ -96,6 +97,17 @@ static int l_audio_set_pitch(lua_State* L) { return 0; } +/// @brief audio.set_time(speakerid: integer, value: number) -> nil +static int l_audio_set_time(lua_State* L) { + lua::luaint id = lua_tonumber(L, 1); + auto speaker = audio::get_speaker(id); + if (speaker != nullptr) { + lua::luanumber value = lua_tonumber(L, 2); + speaker->setTime(static_cast(value)); + } + return 0; +} + /// @brief audio.set_position(speakerid: integer, x: number, y: number, z: number) -> nil static int l_audio_set_position(lua_State* L) { lua::luaint id = lua_tonumber(L, 1); @@ -130,6 +142,90 @@ static int l_audio_set_velocity(lua_State* L) { return 0; } +/// @brief audio.is_playing(speakerid: integer) -> bool +static int l_audio_is_playing(lua_State* L) { + lua::luaint id = lua_tonumber(L, 1); + auto speaker = audio::get_speaker(id); + if (speaker != nullptr) { + lua_pushboolean(L, speaker->isPlaying()); + return 1; + } + lua_pushboolean(L, false); + return 1; +} + +/// @brief audio.is_paused(speakerid: integer) -> bool +static int l_audio_is_paused(lua_State* L) { + lua::luaint id = lua_tonumber(L, 1); + auto speaker = audio::get_speaker(id); + if (speaker != nullptr) { + lua_pushboolean(L, speaker->isPaused()); + return 1; + } + lua_pushboolean(L, false); + return 1; +} + +/// @brief audio.get_volume(speakerid: integer) -> number +static int l_audio_get_volume(lua_State* L) { + lua::luaint id = lua_tonumber(L, 1); + auto speaker = audio::get_speaker(id); + if (speaker != nullptr) { + lua_pushnumber(L, speaker->getVolume()); + return 1; + } + lua_pushnumber(L, 0.0); + return 1; +} + +/// @brief audio.get_pitch(speakerid: integer) -> number +static int l_audio_get_pitch(lua_State* L) { + lua::luaint id = lua_tonumber(L, 1); + auto speaker = audio::get_speaker(id); + if (speaker != nullptr) { + lua_pushnumber(L, speaker->getPitch()); + return 1; + } + lua_pushnumber(L, 1.0); + return 1; +} + +/// @brief audio.get_time(speakerid: integer) -> number +static int l_audio_get_time(lua_State* L) { + lua::luaint id = lua_tonumber(L, 1); + auto speaker = audio::get_speaker(id); + if (speaker != nullptr) { + lua_pushnumber(L, speaker->getTime()); + return 1; + } + lua_pushnumber(L, 0.0); + return 1; +} + +/// @brief audio.get_position(speakerid: integer) -> number, number, number +static int l_audio_get_position(lua_State* L) { + lua::luaint id = lua_tonumber(L, 1); + auto speaker = audio::get_speaker(id); + if (speaker != nullptr) { + auto vec = speaker->getPosition(); + lua::pushvec3(L, vec); + return 1; + } + return 0; +} + +/// @brief audio.get_velocity(speakerid: integer) -> number, number, number +static int l_audio_get_velocity(lua_State* L) { + lua::luaint id = lua_tonumber(L, 1); + auto speaker = audio::get_speaker(id); + if (speaker != nullptr) { + auto vec = speaker->getVelocity(); + lua::pushvec3(L, vec); + return 1; + } + return 0; +} + const luaL_Reg audiolib [] = { {"play_sound", lua_wrap_errors}, {"stop", lua_wrap_errors}, @@ -137,7 +233,15 @@ const luaL_Reg audiolib [] = { {"resume", lua_wrap_errors}, {"set_volume", lua_wrap_errors}, {"set_pitch", lua_wrap_errors}, + {"set_time", lua_wrap_errors}, {"set_position", lua_wrap_errors}, {"set_velocity", lua_wrap_errors}, + {"is_playing", lua_wrap_errors}, + {"is_paused", lua_wrap_errors}, + {"get_volume", lua_wrap_errors}, + {"get_pitch", lua_wrap_errors}, + {"get_time", lua_wrap_errors}, + {"get_position", lua_wrap_errors}, + {"get_velocity", lua_wrap_errors}, {NULL, NULL} };