1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Allow damage for attached objects, add attach/detach callbacks (#6786)

* Allow right-clicking on attached LuaEntities
This commit is contained in:
SmallJoker 2018-04-30 18:43:49 +02:00 committed by GitHub
parent 0b5b32b026
commit ba91624d8c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 136 additions and 78 deletions

View file

@ -103,12 +103,8 @@ int ObjectRef::l_remove(lua_State *L)
if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER)
return 0;
const std::unordered_set<int> &child_ids = co->getAttachmentChildIds();
for (int child_id : child_ids) {
// Child can be NULL if it was deleted earlier
if (ServerActiveObject *child = env->getActiveObject(child_id))
child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0));
}
co->clearChildAttachments();
co->clearParentAttachment();
verbosestream << "ObjectRef::l_remove(): id=" << co->getId() << std::endl;
co->m_pending_removal = true;
@ -721,21 +717,7 @@ int ObjectRef::l_set_detach(lua_State *L)
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);
co->setAttachment(0, "", position, rotation);
} else {
co->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0));
}
// Do it
if (parent != NULL)
parent->removeAttachmentChild(co->getId());
co->clearParentAttachment();
return 0;
}