From 84a5807ff1cd3b0997c1f8397dbcf814203aa3af Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 10 Apr 2017 21:34:07 -0700 Subject: [PATCH] return ScriptAvatarData raw pointer from getAvatar --- assignment-client/src/Agent.cpp | 4 ---- interface/src/Application.cpp | 3 --- interface/src/avatar/AvatarManager.h | 4 ++++ interface/src/avatar/ScriptAvatar.cpp | 10 ---------- interface/src/avatar/ScriptAvatar.h | 3 --- libraries/avatars/src/AvatarHashMap.h | 5 ++++- .../src/ScriptAvatarData.cpp | 12 ------------ .../src/ScriptAvatarData.h | 8 ++------ libraries/script-engine/src/ScriptEngine.cpp | 12 ++++++++++++ 9 files changed, 22 insertions(+), 39 deletions(-) rename libraries/{script-engine => avatars}/src/ScriptAvatarData.cpp (94%) rename libraries/{script-engine => avatars}/src/ScriptAvatarData.h (94%) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index d0a261c208..07214176bd 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -344,9 +343,6 @@ void Agent::executeScript() { // give this AvatarData object to the script engine _scriptEngine->registerGlobalObject("Avatar", scriptedAvatar.data()); - // register meta types for retrieval of ScriptAvatarData objects - qScriptRegisterMetaType(_scriptEngine.get(), avatarDataToScriptValue, avatarDataFromScriptValue); - auto player = DependencyManager::get(); connect(player.data(), &recording::Deck::playbackStateChanged, [=] { if (player->isPlaying()) { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3ef83af68d..4278b34955 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5438,9 +5438,6 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri // AvatarManager has some custom types AvatarManager::registerMetaTypes(scriptEngine); - // register meta types for retrieval of Avatar objects - qScriptRegisterMetaType(scriptEngine, avatarToScriptValue, avatarFromScriptValue); - if (property(hifi::properties::TEST).isValid()) { scriptEngine->registerGlobalObject("Test", TestScriptingInterface::getInstance()); } diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index b94f9e6a96..a3fa0aebf5 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -41,6 +41,10 @@ public: void init(); std::shared_ptr getMyAvatar() { return _myAvatar; } + + // Null/Default-constructed QUuids will return MyAvatar + virtual ScriptAvatar* getAvatar(QUuid avatarID) override { return new ScriptAvatarData(getAvatarBySessionID(avatarID)); } + AvatarSharedPointer getAvatarBySessionID(const QUuid& sessionID) const override; int getNumAvatarsUpdated() const { return _numAvatarsUpdated; } diff --git a/interface/src/avatar/ScriptAvatar.cpp b/interface/src/avatar/ScriptAvatar.cpp index 2684af3c86..aa47abcdc0 100644 --- a/interface/src/avatar/ScriptAvatar.cpp +++ b/interface/src/avatar/ScriptAvatar.cpp @@ -11,16 +11,6 @@ #include "ScriptAvatar.h" -QScriptValue avatarToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in) { - return engine->newQObject(new ScriptAvatar(in), QScriptEngine::ScriptOwnership); -} - -void avatarFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out) { - // This is not implemented because there are no slots/properties that take an std::shared_ptr from a script - assert(false); - out = std::shared_ptr(); -} - ScriptAvatar::ScriptAvatar(AvatarSharedPointer avatarData) : ScriptAvatarData(avatarData) { diff --git a/interface/src/avatar/ScriptAvatar.h b/interface/src/avatar/ScriptAvatar.h index c4011803fa..ce186c7f61 100644 --- a/interface/src/avatar/ScriptAvatar.h +++ b/interface/src/avatar/ScriptAvatar.h @@ -55,7 +55,4 @@ private: std::weak_ptr _avatarData; }; -QScriptValue avatarToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in); -void avatarFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out); - #endif // hifi_ScriptAvatar_h diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h index d35b23bc64..4ae08f8c7c 100644 --- a/libraries/avatars/src/AvatarHashMap.h +++ b/libraries/avatars/src/AvatarHashMap.h @@ -25,6 +25,8 @@ #include #include +#include "ScriptAvatarData.h" + #include "AvatarData.h" class AvatarHashMap : public QObject, public Dependency { @@ -37,8 +39,9 @@ public: // Currently, your own avatar will be included as the null avatar id. Q_INVOKABLE QVector getAvatarIdentifiers(); + // Null/Default-constructed QUuids will return MyAvatar - Q_INVOKABLE AvatarSharedPointer getAvatar(QUuid avatarID) { return getAvatarBySessionID(avatarID); } + virtual ScriptAvatarData* getAvatar(QUuid avatarID) { return new ScriptAvatarData(getAvatarBySessionID(avatarID)); } virtual AvatarSharedPointer getAvatarBySessionID(const QUuid& sessionID) const { return findAvatar(sessionID); } int numberOfAvatarsInRange(const glm::vec3& position, float rangeMeters); diff --git a/libraries/script-engine/src/ScriptAvatarData.cpp b/libraries/avatars/src/ScriptAvatarData.cpp similarity index 94% rename from libraries/script-engine/src/ScriptAvatarData.cpp rename to libraries/avatars/src/ScriptAvatarData.cpp index d14d0ec7d7..f579eb9763 100644 --- a/libraries/script-engine/src/ScriptAvatarData.cpp +++ b/libraries/avatars/src/ScriptAvatarData.cpp @@ -9,26 +9,14 @@ // 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) { - // This is not implemented because there are no slots/properties that take an AvatarSharedPointer from a script - assert(false); - out = AvatarSharedPointer(nullptr); -} - ScriptAvatarData::ScriptAvatarData(AvatarSharedPointer avatarData) : _avatarData(avatarData) { QObject::connect(avatarData.get(), &AvatarData::displayNameChanged, this, &ScriptAvatarData::displayNameChanged); } - // // PHYSICAL PROPERTIES: POSITION AND ORIENTATION // START diff --git a/libraries/script-engine/src/ScriptAvatarData.h b/libraries/avatars/src/ScriptAvatarData.h similarity index 94% rename from libraries/script-engine/src/ScriptAvatarData.h rename to libraries/avatars/src/ScriptAvatarData.h index 23b2667bcc..fcf0edf0ae 100644 --- a/libraries/script-engine/src/ScriptAvatarData.h +++ b/libraries/avatars/src/ScriptAvatarData.h @@ -13,7 +13,8 @@ #define hifi_ScriptAvatarData_h #include -#include + +#include "AvatarData.h" class ScriptAvatarData : public QObject { Q_OBJECT @@ -134,9 +135,4 @@ 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 9920a66c7d..525928897d 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -535,6 +536,16 @@ static QScriptValue createScriptableResourcePrototype(QScriptEngine* engine) { return prototype; } +QScriptValue avatarDataToScriptValue(QScriptEngine* engine, ScriptAvatarData* const& in) { + return engine->newQObject(in, QScriptEngine::ScriptOwnership, DEFAULT_QOBJECT_WRAP_OPTIONS); +} + +void avatarDataFromScriptValue(const QScriptValue& object, ScriptAvatarData*& out) { + // This is not implemented because there are no slots/properties that take an AvatarSharedPointer from a script + assert(false); + out = nullptr; +} + void ScriptEngine::resetModuleCache(bool deleteScriptCache) { if (QThread::currentThread() != thread()) { executeOnScriptThread([=]() { resetModuleCache(deleteScriptCache); }); @@ -614,6 +625,7 @@ void ScriptEngine::init() { qScriptRegisterMetaType(this, injectorToScriptValue, injectorFromScriptValue); qScriptRegisterMetaType(this, inputControllerToScriptValue, inputControllerFromScriptValue); + qScriptRegisterMetaType(this, avatarDataToScriptValue, avatarDataFromScriptValue); qScriptRegisterMetaType(this, animationDetailsToScriptValue, animationDetailsFromScriptValue); qScriptRegisterMetaType(this, webSocketToScriptValue, webSocketFromScriptValue); qScriptRegisterMetaType(this, qWSCloseCodeToScriptValue, qWSCloseCodeFromScriptValue);