summaryrefslogtreecommitdiff
path: root/src/environment.cpp
diff options
context:
space:
mode:
authorraymoo <uguu@installgentoo.com>2016-08-04 13:09:21 -0700
committerNer'zhul <nerzhul@users.noreply.github.com>2016-10-13 17:33:16 +0200
commitc9e7a27eeb628be78a835abadf8afe1177eb90c5 (patch)
tree119a8747a0d33f69f5e14c6a563f3e9df673f923 /src/environment.cpp
parent0b27a70b294590d7fb2bb25bf2d207a719ce8d98 (diff)
downloadminetest-c9e7a27eeb628be78a835abadf8afe1177eb90c5.tar.gz
minetest-c9e7a27eeb628be78a835abadf8afe1177eb90c5.tar.bz2
minetest-c9e7a27eeb628be78a835abadf8afe1177eb90c5.zip
Attached particle spawners
Diffstat (limited to 'src/environment.cpp')
-rw-r--r--src/environment.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/environment.cpp b/src/environment.cpp
index ceaa01d7a..ceaf40d89 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -1518,6 +1518,30 @@ u32 ServerEnvironment::addParticleSpawner(float exptime)
return id;
}
+u32 ServerEnvironment::addParticleSpawner(float exptime, u16 attached_id)
+{
+ u32 id = addParticleSpawner(exptime);
+ m_particle_spawner_attachments[id] = attached_id;
+ if (ServerActiveObject *obj = getActiveObject(attached_id)) {
+ obj->attachParticleSpawner(id);
+ }
+ return id;
+}
+
+void ServerEnvironment::deleteParticleSpawner(u32 id, bool remove_from_object)
+{
+ m_particle_spawners.erase(id);
+ UNORDERED_MAP<u32, u16>::iterator it = m_particle_spawner_attachments.find(id);
+ if (it != m_particle_spawner_attachments.end()) {
+ u16 obj_id = (*it).second;
+ ServerActiveObject *sao = getActiveObject(obj_id);
+ if (sao != NULL && remove_from_object) {
+ sao->detachParticleSpawner(id);
+ }
+ m_particle_spawner_attachments.erase(id);
+ }
+}
+
ServerActiveObject* ServerEnvironment::getActiveObject(u16 id)
{
ActiveObjectMap::iterator n = m_active_objects.find(id);