diff options
-rw-r--r-- | src/content_sao.cpp | 10 | ||||
-rw-r--r-- | src/content_sao.h | 1 | ||||
-rw-r--r-- | src/script/lua_api/l_object.cpp | 15 | ||||
-rw-r--r-- | src/server.cpp | 2 | ||||
-rw-r--r-- | src/serverobject.h | 2 |
5 files changed, 14 insertions, 16 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp index f0973082d..bb62aea7d 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -203,16 +203,6 @@ void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, *rotation = m_attachment_rotation; } -void UnitSAO::detachFromParent() -{ - ServerActiveObject *parent = NULL; - if (m_attachment_parent_id) - parent = m_env->getActiveObject(m_attachment_parent_id); - setAttachment(NULL, "", v3f(0, 0, 0), v3f(0, 0, 0)); - if (parent != NULL) - parent->removeAttachmentChild(m_id); -} - void UnitSAO::addAttachmentChild(int child_id) { m_attachment_child_ids.insert(child_id); diff --git a/src/content_sao.h b/src/content_sao.h index 56a26fb0d..c3674fa2d 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -49,7 +49,6 @@ public: void setBonePosition(const std::string &bone, v3f position, v3f rotation); void getBonePosition(const std::string &bone, v3f *position, v3f *rotation); void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation); - void detachFromParent(); void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation); void addAttachmentChild(int child_id); void removeAttachmentChild(int child_id); diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 1fa3663ca..be4451704 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -710,7 +710,20 @@ int ObjectRef::l_set_detach(lua_State *L) ServerActiveObject *co = getobject(ref); if (co == NULL) return 0; - co->detachFromParent(); + + int parent_id = 0; + std::string bone = ""; + v3f position; + v3f rotation; + co->getAttachment(&parent_id, &bone, &position, &rotation); + ServerActiveObject *parent = NULL; + if (parent_id) + parent = env->getActiveObject(parent_id); + + // Do it + co->setAttachment(0, "", v3f(0,0,0), v3f(0,0,0)); + if (parent != NULL) + parent->removeAttachmentChild(co->getId()); return 0; } diff --git a/src/server.cpp b/src/server.cpp index 1e5704042..1656b9f5a 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2560,8 +2560,6 @@ void Server::DiePlayer(u16 peer_id) if (!playersao) return; - playersao->detachFromParent(); - infostream << "Server::DiePlayer(): Player " << playersao->getPlayer()->getName() << " dies" << std::endl; diff --git a/src/serverobject.h b/src/serverobject.h index dfe6312f0..38204980e 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -166,8 +166,6 @@ public: {} virtual void removeAttachmentChild(int child_id) {} - virtual void detachFromParent() - {} virtual const UNORDERED_SET<int> &getAttachmentChildIds() { static const UNORDERED_SET<int> rv; return rv; } virtual ObjectProperties* accessObjectProperties() |