*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);
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);
ServerActiveObject *co = getobject(ref);
if (co == NULL)
return 0;
-
- 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());
+ co->detachFromParent();
return 0;
}
if (!playersao)
return;
+ playersao->detachFromParent();
+
infostream << "Server::DiePlayer(): Player "
<< playersao->getPlayer()->getName()
<< " dies" << std::endl;
{}
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()