parent
6da828c471
commit
4ee6be856d
|
@ -131,7 +131,7 @@ The `:` prefix can also be used for maintaining backwards compatibility.
|
||||||
|
|
||||||
Sounds
|
Sounds
|
||||||
------
|
------
|
||||||
**NOTE: Not fully implemented yet.**
|
**NOTE: max_hear_distance and connecting to objects is not implemented.**
|
||||||
|
|
||||||
Only Ogg Vorbis files are supported.
|
Only Ogg Vorbis files are supported.
|
||||||
|
|
||||||
|
@ -158,18 +158,12 @@ from the available ones of the following files:
|
||||||
|
|
||||||
Examples of sound parameter tables:
|
Examples of sound parameter tables:
|
||||||
|
|
||||||
-- Play locationless on all clients
|
-- Play locationless
|
||||||
{
|
{
|
||||||
gain = 1.0, -- default
|
gain = 1.0, -- default
|
||||||
}
|
}
|
||||||
-- Play locationless to one player
|
-- Play locationless, looped
|
||||||
{
|
{
|
||||||
to_player = name,
|
|
||||||
gain = 1.0, -- default
|
|
||||||
}
|
|
||||||
-- Play locationless to one player, looped
|
|
||||||
{
|
|
||||||
to_player = name,
|
|
||||||
gain = 1.0, -- default
|
gain = 1.0, -- default
|
||||||
loop = true,
|
loop = true,
|
||||||
}
|
}
|
||||||
|
@ -187,8 +181,7 @@ Examples of sound parameter tables:
|
||||||
loop = true,
|
loop = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
Looped sounds must either be connected to an object or played locationless to
|
Looped sounds must either be connected to an object or played locationless.
|
||||||
one player using `to_player = name,`
|
|
||||||
|
|
||||||
### SimpleSoundSpec
|
### SimpleSoundSpec
|
||||||
* e.g. `""`
|
* e.g. `""`
|
||||||
|
|
|
@ -62,7 +62,6 @@ void ClientScripting::InitializeModApi(lua_State *L, int top)
|
||||||
{
|
{
|
||||||
ModApiUtil::InitializeClient(L, top);
|
ModApiUtil::InitializeClient(L, top);
|
||||||
ModApiClient::Initialize(L, top);
|
ModApiClient::Initialize(L, top);
|
||||||
ModApiSound::Initialize(L, top);
|
|
||||||
ModApiStorage::Initialize(L, top);
|
ModApiStorage::Initialize(L, top);
|
||||||
ModApiEnvMod::InitializeClient(L, top);
|
ModApiEnvMod::InitializeClient(L, top);
|
||||||
|
|
||||||
|
|
|
@ -194,6 +194,45 @@ int ModApiClient::l_get_meta(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ModApiClient::l_sound_play(lua_State *L)
|
||||||
|
{
|
||||||
|
ISoundManager *sound = getClient(L)->getSoundManager();
|
||||||
|
|
||||||
|
SimpleSoundSpec spec;
|
||||||
|
read_soundspec(L, 1, spec);
|
||||||
|
float gain = 1.0 ;
|
||||||
|
bool looped = false;
|
||||||
|
s32 handle;
|
||||||
|
|
||||||
|
if (lua_istable(L, 2)) {
|
||||||
|
getfloatfield(L, 2, "gain", gain);
|
||||||
|
getboolfield(L, 2, "loop", looped);
|
||||||
|
|
||||||
|
lua_getfield(L, 2, "pos");
|
||||||
|
if (!lua_isnil(L, -1)) {
|
||||||
|
v3f pos = read_v3f(L, -1) * BS;
|
||||||
|
lua_pop(L, 1);
|
||||||
|
handle = sound->playSoundAt(spec.name, looped, gain * spec.gain, pos);
|
||||||
|
lua_pushinteger(L, handle);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handle = sound->playSound(spec.name, looped, gain * spec.gain);
|
||||||
|
lua_pushinteger(L, handle);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ModApiClient::l_sound_stop(lua_State *L)
|
||||||
|
{
|
||||||
|
u32 handle = luaL_checkinteger(L, 1);
|
||||||
|
|
||||||
|
getClient(L)->getSoundManager()->stopSound(handle);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void ModApiClient::Initialize(lua_State *L, int top)
|
void ModApiClient::Initialize(lua_State *L, int top)
|
||||||
{
|
{
|
||||||
API_FCT(get_current_modname);
|
API_FCT(get_current_modname);
|
||||||
|
@ -209,4 +248,6 @@ void ModApiClient::Initialize(lua_State *L, int top)
|
||||||
API_FCT(get_wielded_item);
|
API_FCT(get_wielded_item);
|
||||||
API_FCT(disconnect);
|
API_FCT(disconnect);
|
||||||
API_FCT(get_meta);
|
API_FCT(get_meta);
|
||||||
|
API_FCT(sound_play);
|
||||||
|
API_FCT(sound_stop);
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,10 @@ private:
|
||||||
// get_meta(pos)
|
// get_meta(pos)
|
||||||
static int l_get_meta(lua_State *L);
|
static int l_get_meta(lua_State *L);
|
||||||
|
|
||||||
|
static int l_sound_play(lua_State *L);
|
||||||
|
|
||||||
|
static int l_sound_stop(lua_State *L);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void Initialize(lua_State *L, int top);
|
static void Initialize(lua_State *L, int top);
|
||||||
};
|
};
|
||||||
|
|
|
@ -30,12 +30,7 @@ int ModApiSound::l_sound_play(lua_State *L)
|
||||||
read_soundspec(L, 1, spec);
|
read_soundspec(L, 1, spec);
|
||||||
bool looped = lua_toboolean(L, 2);
|
bool looped = lua_toboolean(L, 2);
|
||||||
|
|
||||||
s32 handle;
|
s32 handle = getGuiEngine(L)->playSound(spec, looped);
|
||||||
if (Client *client = getClient(L))
|
|
||||||
handle = client->getSoundManager()->playSound(spec, looped);
|
|
||||||
// Main menu doesn't have access to client, use guiEngine
|
|
||||||
else
|
|
||||||
handle = getGuiEngine(L)->playSound(spec, looped);
|
|
||||||
|
|
||||||
lua_pushinteger(L, handle);
|
lua_pushinteger(L, handle);
|
||||||
|
|
||||||
|
@ -46,11 +41,7 @@ int ModApiSound::l_sound_stop(lua_State *L)
|
||||||
{
|
{
|
||||||
u32 handle = luaL_checkinteger(L, 1);
|
u32 handle = luaL_checkinteger(L, 1);
|
||||||
|
|
||||||
if (Client *client = getClient(L))
|
getGuiEngine(L)->stopSound(handle);
|
||||||
client->getSoundManager()->stopSound(handle);
|
|
||||||
// Main menu doesn't have access to client, use guiEngine
|
|
||||||
else
|
|
||||||
getGuiEngine(L)->stopSound(handle);
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue