- u16 parentID = readS16(is);
- u16 oldparent = m_env->attachement_parent_ids[getId()];
- if (oldparent) {
- m_children.erase(std::remove(m_children.begin(), m_children.end(),
- getId()), m_children.end());
- }
- m_env->attachement_parent_ids[getId()] = parentID;
- GenericCAO *parentobj = m_env->getGenericCAO(parentID);
+ u16 parent_id = readS16(is);
+ u16 &old_parent_id = m_env->attachement_parent_ids[getId()];
+ if (parent_id != old_parent_id) {
+ if (GenericCAO *old_parent = m_env->getGenericCAO(old_parent_id)) {
+ old_parent->m_children.erase(std::remove(
+ m_children.begin(), m_children.end(),
+ getId()), m_children.end());
+ }
+ if (GenericCAO *new_parent = m_env->getGenericCAO(parent_id))
+ new_parent->m_children.push_back(getId());