diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-03-24 19:01:26 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-03-24 19:01:26 +0200 |
commit | 601d1936c9ab4787d43f55d67900ed7c46fd3452 (patch) | |
tree | b328ea7a66ee7dc37fffddd0ee063a0c7b1ea10f /src/server.h | |
parent | 06e93f8d9508a23e86751dfae2f6a7e550d8e1af (diff) | |
download | minetest-601d1936c9ab4787d43f55d67900ed7c46fd3452.tar.gz minetest-601d1936c9ab4787d43f55d67900ed7c46fd3452.tar.bz2 minetest-601d1936c9ab4787d43f55d67900ed7c46fd3452.zip |
Lua API for playing sounds
Diffstat (limited to 'src/server.h')
-rw-r--r-- | src/server.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/server.h b/src/server.h index 3baeb433d..ae50af15b 100644 --- a/src/server.h +++ b/src/server.h @@ -35,6 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mods.h" #include "inventorymanager.h" #include "subgame.h" +#include "sound.h" struct LuaState; typedef struct lua_State lua_State; class IWritableItemDefManager; @@ -274,6 +275,58 @@ struct TextureInformation } }; +struct ServerSoundParams +{ + float gain; + std::string to_player; + enum Type{ + SSP_LOCAL=0, + SSP_POSITIONAL=1, + SSP_OBJECT=2 + } type; + v3f pos; + u16 object; + float max_hear_distance; + bool loop; + + ServerSoundParams(): + gain(1.0), + to_player(""), + type(SSP_LOCAL), + pos(0,0,0), + object(0), + max_hear_distance(32*BS), + loop(false) + {} + + v3f getPos(ServerEnvironment *env, bool *pos_exists) const + { + if(pos_exists) *pos_exists = false; + switch(type){ + case SSP_LOCAL: + return v3f(0,0,0); + case SSP_POSITIONAL: + if(pos_exists) *pos_exists = true; + return pos; + case SSP_OBJECT: { + if(object == 0) + return v3f(0,0,0); + ServerActiveObject *sao = env->getActiveObject(object); + if(!sao) + return v3f(0,0,0); + if(pos_exists) *pos_exists = true; + return sao->getBasePosition(); } + } + return v3f(0,0,0); + } +}; + +struct ServerPlayingSound +{ + ServerSoundParams params; + std::set<u16> clients; // peer ids +}; + class RemoteClient { public: @@ -464,6 +517,11 @@ public: // Envlock and conlock should be locked when calling this void SendMovePlayer(Player *player); + // Returns -1 if failed, sound handle on success + // Envlock + conlock + s32 playSound(const SimpleSoundSpec &spec, const ServerSoundParams ¶ms); + void stopSound(s32 handle); + // Thread-safe u64 getPlayerAuthPrivs(const std::string &name); void setPlayerAuthPrivs(const std::string &name, u64 privs); @@ -775,6 +833,12 @@ private: friend class RemoteClient; std::map<std::string,TextureInformation> m_Textures; + + /* + Sounds + */ + std::map<s32, ServerPlayingSound> m_playing_sounds; + s32 m_next_sound_id; }; /* |