From 601d1936c9ab4787d43f55d67900ed7c46fd3452 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 24 Mar 2012 19:01:26 +0200 Subject: Lua API for playing sounds --- src/server.h | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'src/server.h') 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 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 m_Textures; + + /* + Sounds + */ + std::map m_playing_sounds; + s32 m_next_sound_id; }; /* -- cgit v1.2.3