return ScriptAvatarData raw pointer from getAvatar

This commit is contained in:
Stephen Birarda 2017-04-10 21:34:07 -07:00 committed by Zach Fox
parent 54ca8bd89e
commit 84a5807ff1
9 changed files with 22 additions and 39 deletions

View file

@ -28,7 +28,6 @@
#include <NodeList.h>
#include <udt/PacketHeaders.h>
#include <ResourceCache.h>
#include <ScriptAvatarData.h>
#include <ScriptCache.h>
#include <ScriptEngines.h>
#include <SoundCache.h>
@ -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<recording::Deck>();
connect(player.data(), &recording::Deck::playbackStateChanged, [=] {
if (player->isPlaying()) {

View file

@ -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());
}

View file

@ -41,6 +41,10 @@ public:
void init();
std::shared_ptr<MyAvatar> 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; }

View file

@ -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<Avatar> from a script
assert(false);
out = std::shared_ptr<Avatar>();
}
ScriptAvatar::ScriptAvatar(AvatarSharedPointer avatarData) :
ScriptAvatarData(avatarData)
{

View file

@ -55,7 +55,4 @@ private:
std::weak_ptr<AvatarData> _avatarData;
};
QScriptValue avatarToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in);
void avatarFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out);
#endif // hifi_ScriptAvatar_h

View file

@ -25,6 +25,8 @@
#include <NLPacket.h>
#include <Node.h>
#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<QUuid> 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);

View file

@ -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

View file

@ -13,7 +13,8 @@
#define hifi_ScriptAvatarData_h
#include <QtCore/QObject>
#include <AvatarData.h>
#include "AvatarData.h"
class ScriptAvatarData : public QObject {
Q_OBJECT
@ -134,9 +135,4 @@ private:
std::weak_ptr<AvatarData> _avatarData;
};
Q_DECLARE_METATYPE(AvatarSharedPointer)
QScriptValue avatarDataToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in);
void avatarDataFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out);
#endif // hifi_ScriptAvatarData_h

View file

@ -44,6 +44,7 @@
#include <PathUtils.h>
#include <ResourceScriptingInterface.h>
#include <NodeList.h>
#include <ScriptAvatarData.h>
#include <udt/PacketHeaders.h>
#include <UUID.h>
#include <ui/Menu.h>
@ -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);