aboutsummaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2020-04-10 22:53:08 +0200
committerLoïc Blot <nerzhul@users.noreply.github.com>2020-04-11 13:12:51 +0200
commit5f3a17eb65c1ad9259f03bde346a8d69fe0c1069 (patch)
tree12b575647f8b76a88ff4dea6027621d5a32aeeb2 /src/script
parent054c5dfaa35dd79560a465ccc0ef214cb5f34c88 (diff)
downloadminetest-5f3a17eb65c1ad9259f03bde346a8d69fe0c1069.tar.gz
minetest-5f3a17eb65c1ad9259f03bde346a8d69fe0c1069.tar.bz2
minetest-5f3a17eb65c1ad9259f03bde346a8d69fe0c1069.zip
Implement minetest.sound_fade()
Diffstat (limited to 'src/script')
-rw-r--r--src/script/lua_api/l_client.cpp22
-rw-r--r--src/script/lua_api/l_client.h6
-rw-r--r--src/script/lua_api/l_nodemeta.cpp2
3 files changed, 27 insertions, 3 deletions
diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp
index fba182492..e30c05260 100644
--- a/src/script/lua_api/l_client.cpp
+++ b/src/script/lua_api/l_client.cpp
@@ -209,7 +209,7 @@ int ModApiClient::l_gettext(lua_State *L)
return 1;
}
-// get_node(pos)
+// get_node_or_nil(pos)
// pos = {x=num, y=num, z=num}
int ModApiClient::l_get_node_or_nil(lua_State *L)
{
@@ -228,6 +228,7 @@ int ModApiClient::l_get_node_or_nil(lua_State *L)
return 1;
}
+// get_langauge()
int ModApiClient::l_get_language(lua_State *L)
{
#ifdef _WIN32
@@ -244,6 +245,7 @@ int ModApiClient::l_get_language(lua_State *L)
return 2;
}
+// get_wielded_item()
int ModApiClient::l_get_wielded_item(lua_State *L)
{
Client *client = getClient(L);
@@ -266,12 +268,14 @@ int ModApiClient::l_get_meta(lua_State *L)
return 1;
}
+// sound_play(spec, parameters)
int ModApiClient::l_sound_play(lua_State *L)
{
ISoundManager *sound = getClient(L)->getSoundManager();
SimpleSoundSpec spec;
read_soundspec(L, 1, spec);
+
float gain = 1.0f;
float pitch = 1.0f;
bool looped = false;
@@ -293,21 +297,32 @@ int ModApiClient::l_sound_play(lua_State *L)
}
}
- handle = sound->playSound(spec.name, looped, gain * spec.gain, 0.0f, pitch);
+ handle = sound->playSound(spec.name, looped, gain * spec.gain, spec.fade, pitch);
lua_pushinteger(L, handle);
return 1;
}
+// sound_stop(handle)
int ModApiClient::l_sound_stop(lua_State *L)
{
- u32 handle = luaL_checkinteger(L, 1);
+ s32 handle = luaL_checkinteger(L, 1);
getClient(L)->getSoundManager()->stopSound(handle);
return 0;
}
+// sound_fade(handle, step, gain)
+int ModApiClient::l_sound_fade(lua_State *L)
+{
+ s32 handle = luaL_checkinteger(L, 1);
+ float step = readParam<float>(L, 2);
+ float gain = readParam<float>(L, 3);
+ getClient(L)->getSoundManager()->fadeSound(handle, step, gain);
+ return 0;
+}
+
// get_server_info()
int ModApiClient::l_get_server_info(lua_State *L)
{
@@ -426,6 +441,7 @@ void ModApiClient::Initialize(lua_State *L, int top)
API_FCT(get_meta);
API_FCT(sound_play);
API_FCT(sound_stop);
+ API_FCT(sound_fade);
API_FCT(get_server_info);
API_FCT(get_item_def);
API_FCT(get_node_def);
diff --git a/src/script/lua_api/l_client.h b/src/script/lua_api/l_client.h
index 6d1f70b1d..5dc3efdad 100644
--- a/src/script/lua_api/l_client.h
+++ b/src/script/lua_api/l_client.h
@@ -69,6 +69,7 @@ private:
// get_node(pos)
static int l_get_node_or_nil(lua_State *L);
+ // get_language()
static int l_get_language(lua_State *L);
// get_wielded_item()
@@ -77,10 +78,15 @@ private:
// get_meta(pos)
static int l_get_meta(lua_State *L);
+ // sound_play(spec, parameters)
static int l_sound_play(lua_State *L);
+ // sound_stop(handle)
static int l_sound_stop(lua_State *L);
+ // sound_fade(handle, step, gain)
+ static int l_sound_fade(lua_State *L);
+
// get_server_info()
static int l_get_server_info(lua_State *L);
diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp
index 229ce73db..57052cb42 100644
--- a/src/script/lua_api/l_nodemeta.cpp
+++ b/src/script/lua_api/l_nodemeta.cpp
@@ -55,11 +55,13 @@ Metadata* NodeMetaRef::getmeta(bool auto_create)
void NodeMetaRef::clearMeta()
{
+ SANITY_CHECK(!m_is_local);
m_env->getMap().removeNodeMetadata(m_p);
}
void NodeMetaRef::reportMetadataChange(const std::string *name)
{
+ SANITY_CHECK(!m_is_local);
// NOTE: This same code is in rollback_interface.cpp
// Inform other things that the metadata has changed
NodeMetadata *meta = dynamic_cast<NodeMetadata*>(m_meta);