From 5325b22b011cf8ad6b2b23dd350c1312d23fd807 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 9 Feb 2018 16:46:11 -0800 Subject: [PATCH] working on lambdas --- interface/src/avatar/MyAvatar.cpp | 28 +++++++++++++++------------- interface/src/avatar/MyAvatar.h | 1 + 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 0ee409745f..5710dcc354 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1448,10 +1448,20 @@ void MyAvatar::clearJointsData() { } void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { - if (skeletonModelURL != _skeletonModelURL) { - _shouldInitHeadBones = true; - } - + _skeletonModelChangeCount++; + int skeletonModelChangeCount = _skeletonModelChangeCount; + std::shared_ptr skeletonConnection = std::make_shared(); + *skeletonConnection = QObject::connect(_skeletonModel.get(), &SkeletonModel::skeletonLoaded, [this, skeletonModelChangeCount, skeletonConnection]() { + qDebug() << "checkingCount " << skeletonModelChangeCount << " -- " << _skeletonModelChangeCount; + if (skeletonModelChangeCount == _skeletonModelChangeCount && _skeletonModel->isLoaded()) { + qDebug() << "count is the same"; + initHeadBones(); + _skeletonModel->setCauterizeBoneSet(_headBoneSet); + _fstAnimGraphOverrideUrl = _skeletonModel->getGeometry()->getAnimGraphOverrideUrl(); + initAnimGraph(); + } + QObject::disconnect(*skeletonConnection); + }); Avatar::setSkeletonModelURL(skeletonModelURL); _skeletonModel->setVisibleInScene(true, qApp->getMain3DScene(), render::ItemKey::TAG_BITS_NONE); _headBoneSet.clear(); @@ -1878,6 +1888,7 @@ void MyAvatar::initAnimGraph() { _skeletonModel->getRig().initAnimGraph(graphUrl); _currentAnimGraphUrl.set(graphUrl); + qDebug() << "init anim graph"; connect(&(_skeletonModel->getRig()), SIGNAL(onLoadComplete()), this, SLOT(animGraphLoaded())); } @@ -1896,15 +1907,6 @@ void MyAvatar::animGraphLoaded() { void MyAvatar::postUpdate(float deltaTime, const render::ScenePointer& scene) { Avatar::postUpdate(deltaTime, scene); - - if (_skeletonModel->isLoaded() && !_skeletonModel->getRig().getAnimNode() && _shouldInitHeadBones) { - initHeadBones(); - _skeletonModel->setCauterizeBoneSet(_headBoneSet); - _fstAnimGraphOverrideUrl = _skeletonModel->getGeometry()->getAnimGraphOverrideUrl(); - initAnimGraph(); - _shouldInitHeadBones = false; - } - if (_enableDebugDrawDefaultPose || _enableDebugDrawAnimPose) { auto animSkeleton = _skeletonModel->getRig().getAnimSkeleton(); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 45dddb45a4..180cf04a18 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -654,6 +654,7 @@ private: bool isMyAvatar() const override { return true; } virtual int parseDataFromBuffer(const QByteArray& buffer) override; virtual glm::vec3 getSkeletonPosition() const override; + int _skeletonModelChangeCount { 0 }; void saveAvatarScale();