bool Window::unlinkFrom(shared_ptr<BaseObject> obj) { if (dynamic_pointer_cast<Texture>(obj).get() != nullptr) { TexturePtr tex = dynamic_pointer_cast<Texture>(obj); unsetTexture(tex); } else if (dynamic_pointer_cast<Image>(obj).get() != nullptr) { // Look for the corresponding texture string texName = getName() + "_" + obj->getName() + "_tex"; TexturePtr tex = nullptr; for (auto& inTex : _inTextures) { if (inTex.expired()) continue; auto lockedTex = inTex.lock(); if (lockedTex->getName() == texName) tex = lockedTex; } if (tex != nullptr) { tex->unlinkFrom(obj); unsetTexture(tex); } } else if (dynamic_pointer_cast<Camera>(obj).get() != nullptr) { CameraPtr cam = dynamic_pointer_cast<Camera>(obj); for (auto& tex : cam->getTextures()) unsetTexture(tex); } else if (dynamic_pointer_cast<Gui>(obj).get() != nullptr) { GuiPtr gui = dynamic_pointer_cast<Gui>(obj); if (gui->getTexture() == _guiTexture) { _screenGui->removeTexture(_guiTexture); _guiTexture = nullptr; } } return BaseObject::unlinkFrom(obj); }