From 5edd5d2b3063424509eff0cc23819572eb7e76c9 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 10 Apr 2017 15:24:50 -0700 Subject: [PATCH] It's working...it's workinggit add -A! --- libraries/avatars/src/AvatarHashMap.cpp | 4 +- libraries/avatars/src/AvatarHashMap.h | 2 +- libraries/gl/src/gl/OffscreenGLCanvas.cpp | 2 - libraries/gl/src/gl/OffscreenQmlSurface.cpp | 6 +- .../script-engine/src/ScriptAvatarData.cpp | 102 ++++++++++++++++++ .../script-engine/src/ScriptAvatarData.h | 63 +++++++++++ libraries/script-engine/src/ScriptEngine.cpp | 11 +- 7 files changed, 175 insertions(+), 15 deletions(-) create mode 100644 libraries/script-engine/src/ScriptAvatarData.cpp create mode 100644 libraries/script-engine/src/ScriptAvatarData.h diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index bbb5c6d214..608518ba63 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -30,9 +30,9 @@ QVector AvatarHashMap::getAvatarIdentifiers() { return _avatarHash.keys().toVector(); } -QSharedPointer AvatarHashMap::getAvatar(QUuid avatarID) { +AvatarSharedPointer AvatarHashMap::getAvatar(QUuid avatarID) { // Null/Default-constructed QUuids will return MyAvatar - return QSharedPointer(getAvatarBySessionID(avatarID).get()); + return AvatarSharedPointer(getAvatarBySessionID(avatarID)); } bool AvatarHashMap::isAvatarInRange(const glm::vec3& position, const float range) { diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h index f51b66524f..5174f30dd4 100644 --- a/libraries/avatars/src/AvatarHashMap.h +++ b/libraries/avatars/src/AvatarHashMap.h @@ -37,7 +37,7 @@ public: // Currently, your own avatar will be included as the null avatar id. Q_INVOKABLE QVector getAvatarIdentifiers(); - Q_INVOKABLE QSharedPointer getAvatar(QUuid avatarID); + Q_INVOKABLE AvatarSharedPointer getAvatar(QUuid avatarID); virtual AvatarSharedPointer getAvatarBySessionID(const QUuid& sessionID) const { return findAvatar(sessionID); } int numberOfAvatarsInRange(const glm::vec3& position, float rangeMeters); diff --git a/libraries/gl/src/gl/OffscreenGLCanvas.cpp b/libraries/gl/src/gl/OffscreenGLCanvas.cpp index e5c630d97e..3f1d629638 100644 --- a/libraries/gl/src/gl/OffscreenGLCanvas.cpp +++ b/libraries/gl/src/gl/OffscreenGLCanvas.cpp @@ -59,8 +59,6 @@ bool OffscreenGLCanvas::create(QOpenGLContext* sharedContext) { bool OffscreenGLCanvas::makeCurrent() { bool result = _context->makeCurrent(_offscreenSurface); - Q_ASSERT(result); - std::call_once(_reportOnce, [this]{ qCDebug(glLogging) << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); qCDebug(glLogging) << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION)); diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.cpp b/libraries/gl/src/gl/OffscreenQmlSurface.cpp index 16e32ab42e..3bbd26e010 100644 --- a/libraries/gl/src/gl/OffscreenQmlSurface.cpp +++ b/libraries/gl/src/gl/OffscreenQmlSurface.cpp @@ -612,11 +612,7 @@ QObject* OffscreenQmlSurface::finishQmlLoad(std::functionmetaObject()->indexOfSignal("sendToScript"); - if (sendToScriptIndex != -1) { - connect(newItem, SIGNAL(sendToScript(QVariant)), this, SIGNAL(fromQml(QVariant))); - } + connect(newItem, SIGNAL(sendToScript(QVariant)), this, SIGNAL(fromQml(QVariant))); // The root item is ready. Associate it with the window. _rootItem = newItem; diff --git a/libraries/script-engine/src/ScriptAvatarData.cpp b/libraries/script-engine/src/ScriptAvatarData.cpp new file mode 100644 index 0000000000..80727170a6 --- /dev/null +++ b/libraries/script-engine/src/ScriptAvatarData.cpp @@ -0,0 +1,102 @@ +// +// ScriptAvatarData.cpp +// libraries/script-engine/src +// +// Created by Zach Fox on 2017-04-10. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "ScriptEngineLogging.h" +#include "ScriptAvatarData.h" + +QScriptValue avatarDataToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in) { + return engine->newQObject(new ScriptAvatarData(in), QScriptEngine::ScriptOwnership); +} + +void avatarDataFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out) { + // Not implemented - this should never happen (yet) + assert(false); + out = AvatarSharedPointer(nullptr); +} + +ScriptAvatarData::ScriptAvatarData(AvatarSharedPointer avatarData) : + _avatarData(avatarData), + SpatiallyNestable(NestableType::Avatar, QUuid()) +{ + QObject::connect(avatarData.get(), &AvatarData::displayNameChanged, this, &ScriptAvatarData::displayNameChanged); +} + +const QUuid ScriptAvatarData::getSessionUUID() const { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getSessionUUID(); + } else { + return QUuid(); + } +} + +glm::vec3 ScriptAvatarData::getPosition() const { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getPosition(); + } else { + return glm::vec3(); + } +} + +const float ScriptAvatarData::getAudioLoudness() { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getAudioLoudness(); + } else { + return 0.0; + } +} + +const float ScriptAvatarData::getAudioAverageLoudness() { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getAudioAverageLoudness(); + } else { + return 0.0; + } +} + +const QString ScriptAvatarData::getDisplayName() { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getDisplayName(); + } else { + return QString(); + } +} + +const QString ScriptAvatarData::getSessionDisplayName() { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getSessionDisplayName(); + } else { + return QString(); + } +} + +int ScriptAvatarData::getJointIndex(const QString& name) const { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getJointIndex(name); + } else { + return -1; + } +} + +glm::quat ScriptAvatarData::getAbsoluteJointRotationInObjectFrame(int index) const { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getAbsoluteJointRotationInObjectFrame(index); + } else { + return glm::quat(); + } +} + +glm::vec3 ScriptAvatarData::getAbsoluteJointTranslationInObjectFrame(int index) const { + if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { + return sharedAvatarData->getAbsoluteJointTranslationInObjectFrame(index); + } else { + return glm::vec3(); + } +} diff --git a/libraries/script-engine/src/ScriptAvatarData.h b/libraries/script-engine/src/ScriptAvatarData.h new file mode 100644 index 0000000000..4c3b6fa42c --- /dev/null +++ b/libraries/script-engine/src/ScriptAvatarData.h @@ -0,0 +1,63 @@ +// +// ScriptAvatarData.h +// libraries/script-engine/src +// +// Created by Zach Fox on 2017-04-10. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_ScriptAvatarData_h +#define hifi_ScriptAvatarData_h + +#include +#include +#include + +class ScriptAvatarData : public QObject, public SpatiallyNestable { + Q_OBJECT + + Q_PROPERTY(QUuid sessionUUID READ getSessionUUID) + Q_PROPERTY(glm::vec3 position READ getPosition) + Q_PROPERTY(float audioLoudness READ getAudioLoudness) + Q_PROPERTY(float audioAverageLoudness READ getAudioAverageLoudness) + Q_PROPERTY(QString displayName READ getDisplayName NOTIFY displayNameChanged) + Q_PROPERTY(QString sessionDisplayName READ getSessionDisplayName) + +public: + ScriptAvatarData(AvatarSharedPointer avatarData); + + const QUuid getSessionUUID() const; + + using SpatiallyNestable::getPosition; + virtual glm::vec3 getPosition() const override; + + const float getAudioLoudness(); + const float getAudioAverageLoudness(); + + const QString getDisplayName(); + const QString getSessionDisplayName(); + + int getFauxJointIndex(const QString& name) const; + /// Returns the index of the joint with the specified name, or -1 if not found/unknown. + Q_INVOKABLE virtual int getJointIndex(const QString& name) const; + +signals: + void displayNameChanged(); + +public slots: + glm::quat getAbsoluteJointRotationInObjectFrame(int index) const; + glm::vec3 getAbsoluteJointTranslationInObjectFrame(int index) const; + +private: + std::weak_ptr _avatarData; +}; + +Q_DECLARE_METATYPE(AvatarSharedPointer) + +QScriptValue avatarDataToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in); +void avatarDataFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out); + +#endif // hifi_ScriptAvatarData_h diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index e9702ae9c0..84a0881611 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -59,6 +59,7 @@ #include "FileScriptingInterface.h" // unzip project #include "MenuItemProperties.h" #include "ScriptAudioInjector.h" +#include "ScriptAvatarData.h" #include "ScriptCache.h" #include "ScriptEngineLogging.h" #include "ScriptEngine.h" @@ -111,15 +112,15 @@ static QScriptValue debugPrint(QScriptContext* context, QScriptEngine* engine) { return QScriptValue(); } -QScriptValue avatarDataToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in) { - return engine->newQObject(new AvatarDataScriptingInterface(in), QScriptEngine::ScriptOwnership); +/* +QScriptValue avatarDataToScriptValue(QScriptEngine* engine, AvatarData* const &in) { + return engine->newQObject(in, QScriptEngine::QtOwnership, DEFAULT_QOBJECT_WRAP_OPTIONS); } void avatarDataFromScriptValue(const QScriptValue &object, AvatarData* &out) { - if (auto avatarDataInterface = qobject_cast(object.toQObject())) { - out = avatarDataInterface->getAvatarData(); - } + out = qobject_cast(object.toQObject()); } +*/ Q_DECLARE_METATYPE(controller::InputController*) //static int inputControllerPointerId = qRegisterMetaType();