mirror of
https://github.com/overte-org/overte.git
synced 2025-04-23 01:53:35 +02:00
add ScriptAvatar for std::shared_ptr<Avatar> passing to scripts
This commit is contained in:
parent
0aa1e633fe
commit
42a406e90a
6 changed files with 226 additions and 4 deletions
assignment-client/src
interface/src
libraries/script-engine/src
|
@ -343,6 +343,9 @@ 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, avatarDataToScriptValue, avatarDataFromScriptValue);
|
||||
|
||||
auto player = DependencyManager::get<recording::Deck>();
|
||||
connect(player.data(), &recording::Deck::playbackStateChanged, [=] {
|
||||
if (player->isPlaying()) {
|
||||
|
|
|
@ -129,6 +129,7 @@
|
|||
#include "AudioClient.h"
|
||||
#include "audio/AudioScope.h"
|
||||
#include "avatar/AvatarManager.h"
|
||||
#include "avatar/ScriptAvatar.h"
|
||||
#include "CrashHandler.h"
|
||||
#include "devices/DdeFaceTracker.h"
|
||||
#include "devices/EyeTracker.h"
|
||||
|
@ -5437,6 +5438,9 @@ 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());
|
||||
}
|
||||
|
|
156
interface/src/avatar/ScriptAvatar.cpp
Normal file
156
interface/src/avatar/ScriptAvatar.cpp
Normal file
|
@ -0,0 +1,156 @@
|
|||
//
|
||||
// ScriptAvatar.cpp
|
||||
// interface/src/avatars
|
||||
//
|
||||
// Created by Stephen Birarda on 4/10/17.
|
||||
// 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 "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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<Avatar> ScriptAvatar::lockAvatar() const {
|
||||
if (auto lockedAvatarData = _avatarData.lock()) {
|
||||
return std::dynamic_pointer_cast<Avatar>(lockedAvatarData);
|
||||
} else {
|
||||
return std::shared_ptr<Avatar>();
|
||||
}
|
||||
}
|
||||
|
||||
glm::quat ScriptAvatar::getDefaultJointRotation(int index) const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getDefaultJointRotation(index);
|
||||
} else {
|
||||
return glm::quat();
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 ScriptAvatar::getDefaultJointTranslation(int index) const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getDefaultJointTranslation(index);
|
||||
} else {
|
||||
return glm::vec3();
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 ScriptAvatar::getSkeletonOffset() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getSkeletonOffset();
|
||||
} else {
|
||||
return glm::vec3();
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 ScriptAvatar::getJointPosition(int index) const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getJointPosition(index);
|
||||
} else {
|
||||
return glm::vec3();
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 ScriptAvatar::getJointPosition(const QString& name) const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getJointPosition(name);
|
||||
} else {
|
||||
return glm::vec3();
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 ScriptAvatar::getNeckPosition() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getNeckPosition();
|
||||
} else {
|
||||
return glm::vec3();
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 ScriptAvatar::getAcceleration() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getAcceleration();
|
||||
} else {
|
||||
return glm::vec3();
|
||||
}
|
||||
}
|
||||
|
||||
QUuid ScriptAvatar::getParentID() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getParentID();
|
||||
} else {
|
||||
return QUuid();
|
||||
}
|
||||
}
|
||||
|
||||
quint16 ScriptAvatar::getParentJointIndex() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getParentJointIndex();
|
||||
} else {
|
||||
return INVALID_JOINT_INDEX;
|
||||
}
|
||||
}
|
||||
|
||||
QVariantList ScriptAvatar::getSkeleton() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getSkeleton();
|
||||
} else {
|
||||
return QVariantList();
|
||||
}
|
||||
}
|
||||
|
||||
float ScriptAvatar::getSimulationRate(const QString& rateName) const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getSimulationRate(rateName);
|
||||
} else {
|
||||
return 0.0f;;
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 ScriptAvatar::getLeftPalmPosition() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getLeftPalmPosition();
|
||||
} else {
|
||||
return glm::vec3();
|
||||
}
|
||||
}
|
||||
|
||||
glm::quat ScriptAvatar::getLeftPalmRotation() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getLeftPalmRotation();
|
||||
} else {
|
||||
return glm::quat();
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 ScriptAvatar::getRightPalmPosition() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getRightPalmPosition();
|
||||
} else {
|
||||
return glm::vec3();
|
||||
}
|
||||
}
|
||||
|
||||
glm::quat ScriptAvatar::getRightPalmRotation() const {
|
||||
if (auto lockedAvatar = lockAvatar()) {
|
||||
return lockedAvatar->getRightPalmRotation();
|
||||
} else {
|
||||
return glm::quat();
|
||||
}
|
||||
}
|
61
interface/src/avatar/ScriptAvatar.h
Normal file
61
interface/src/avatar/ScriptAvatar.h
Normal file
|
@ -0,0 +1,61 @@
|
|||
//
|
||||
// ScriptAvatar.h
|
||||
// interface/src/avatars
|
||||
//
|
||||
// Created by Stephen Birarda on 4/10/17.
|
||||
// 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_ScriptAvatar_h
|
||||
#define hifi_ScriptAvatar_h
|
||||
|
||||
#include <ScriptAvatarData.h>
|
||||
|
||||
#include "Avatar.h"
|
||||
|
||||
class ScriptAvatar : public ScriptAvatarData {
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(glm::vec3 skeletonOffset READ getSkeletonOffset)
|
||||
|
||||
public:
|
||||
ScriptAvatar(AvatarSharedPointer avatarData);
|
||||
|
||||
public slots:
|
||||
|
||||
glm::quat getDefaultJointRotation(int index) const;
|
||||
glm::vec3 getDefaultJointTranslation(int index) const;
|
||||
|
||||
glm::vec3 getSkeletonOffset() const;
|
||||
|
||||
glm::vec3 getJointPosition(int index) const;
|
||||
glm::vec3 getJointPosition(const QString& name) const;
|
||||
glm::vec3 getNeckPosition() const;
|
||||
|
||||
glm::vec3 getAcceleration() const;
|
||||
|
||||
QUuid getParentID() const;
|
||||
quint16 getParentJointIndex() const;
|
||||
|
||||
QVariantList getSkeleton() const;
|
||||
|
||||
float getSimulationRate(const QString& rateName = QString("")) const;
|
||||
|
||||
glm::vec3 getLeftPalmPosition() const;
|
||||
glm::quat getLeftPalmRotation() const;
|
||||
glm::vec3 getRightPalmPosition() const;
|
||||
glm::quat getRightPalmRotation() const;
|
||||
|
||||
private:
|
||||
std::shared_ptr<Avatar> lockAvatar() const;
|
||||
|
||||
std::weak_ptr<AvatarData> _avatarData;
|
||||
};
|
||||
|
||||
QScriptValue avatarToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in);
|
||||
void avatarFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out);
|
||||
|
||||
#endif // hifi_ScriptAvatar_h
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
#include <QtCore/QObject>
|
||||
#include <AvatarData.h>
|
||||
#include <SpatiallyNestable.h>
|
||||
|
||||
class ScriptAvatarData : public QObject {
|
||||
Q_OBJECT
|
||||
|
@ -137,7 +136,7 @@ private:
|
|||
|
||||
Q_DECLARE_METATYPE(AvatarSharedPointer)
|
||||
|
||||
QScriptValue avatarDataToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in);
|
||||
void avatarDataFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out);
|
||||
QScriptValue avatarToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in);
|
||||
void avatarFromScriptValue(const QScriptValue& object, AvatarSharedPointer& out);
|
||||
|
||||
#endif // hifi_ScriptAvatarData_h
|
||||
|
|
|
@ -614,7 +614,6 @@ 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);
|
||||
|
|
Loading…
Reference in a new issue