Added onLoadComplete signal to MyAvatar

This can be used in javaScript to detect when the model has finished loading because the url has changed or the model has been reset.
This commit is contained in:
Anthony J. Thibault 2016-04-18 11:37:02 -07:00
parent b943a664b6
commit 1682598be7
4 changed files with 16 additions and 3 deletions

View file

@ -198,6 +198,8 @@ MyAvatar::MyAvatar(RigPointer rig) :
_headData->setLookAtPosition(headData->getLookAtPosition()); _headData->setLookAtPosition(headData->getLookAtPosition());
} }
}); });
connect(rig.get(), SIGNAL(onLoadComplete()), SLOT(onRigLoadComplete()));
} }
MyAvatar::~MyAvatar() { MyAvatar::~MyAvatar() {
@ -2080,7 +2082,7 @@ float MyAvatar::getAccelerationEnergy() {
int changeInVelocity = abs(velocity.length() - priorVelocity.length()); int changeInVelocity = abs(velocity.length() - priorVelocity.length());
float changeInEnergy = priorVelocity.length() * changeInVelocity * AVATAR_MOVEMENT_ENERGY_CONSTANT; float changeInEnergy = priorVelocity.length() * changeInVelocity * AVATAR_MOVEMENT_ENERGY_CONSTANT;
priorVelocity = velocity; priorVelocity = velocity;
return changeInEnergy; return changeInEnergy;
} }
@ -2103,3 +2105,6 @@ bool MyAvatar::didTeleport() {
return (changeInPosition.length() > MAX_AVATAR_MOVEMENT_PER_FRAME); return (changeInPosition.length() > MAX_AVATAR_MOVEMENT_PER_FRAME);
} }
void MyAvatar::onRigLoadComplete() {
emit onLoadComplete();
}

View file

@ -295,7 +295,7 @@ signals:
void collisionWithEntity(const Collision& collision); void collisionWithEntity(const Collision& collision);
void energyChanged(float newEnergy); void energyChanged(float newEnergy);
void positionGoneTo(); void positionGoneTo();
void onLoadComplete();
private: private:
@ -469,6 +469,8 @@ private:
float getEnergy(); float getEnergy();
void setEnergy(float value); void setEnergy(float value);
bool didTeleport(); bool didTeleport();
private slots:
void onRigLoadComplete();
}; };
QScriptValue audioListenModeToScriptValue(QScriptEngine* engine, const AudioListenerMode& audioListenerMode); QScriptValue audioListenModeToScriptValue(QScriptEngine* engine, const AudioListenerMode& audioListenerMode);

View file

@ -1161,6 +1161,7 @@ void Rig::initAnimGraph(const QUrl& url) {
overrideAnimation(origState.url, origState.fps, origState.loop, origState.firstFrame, origState.lastFrame); overrideAnimation(origState.url, origState.fps, origState.loop, origState.firstFrame, origState.lastFrame);
} }
emitOnLoadComplete();
}); });
connect(_animLoader.get(), &AnimNodeLoader::error, [url](int error, QString str) { connect(_animLoader.get(), &AnimNodeLoader::error, [url](int error, QString str) {
qCCritical(animation) << "Error loading" << url.toDisplayString() << "code = " << error << "str =" << str; qCCritical(animation) << "Error loading" << url.toDisplayString() << "code = " << error << "str =" << str;

View file

@ -32,6 +32,7 @@ typedef std::shared_ptr<Rig> RigPointer;
// However only specific methods thread-safe. Noted below. // However only specific methods thread-safe. Noted below.
class Rig : public QObject, public std::enable_shared_from_this<Rig> { class Rig : public QObject, public std::enable_shared_from_this<Rig> {
Q_OBJECT
public: public:
struct StateHandler { struct StateHandler {
AnimVariantMap results; AnimVariantMap results;
@ -223,7 +224,11 @@ public:
const glm::mat4& getGeometryToRigTransform() const { return _geometryToRigTransform; } const glm::mat4& getGeometryToRigTransform() const { return _geometryToRigTransform; }
protected: signals:
void onLoadComplete();
protected:
void emitOnLoadComplete() { emit onLoadComplete(); }
bool isIndexValid(int index) const { return _animSkeleton && index >= 0 && index < _animSkeleton->getNumJoints(); } bool isIndexValid(int index) const { return _animSkeleton && index >= 0 && index < _animSkeleton->getNumJoints(); }
void updateAnimationStateHandlers(); void updateAnimationStateHandlers();
void applyOverridePoses(); void applyOverridePoses();