overte/libraries/avatars/src/ScriptAvatarData.cpp

397 lines
11 KiB
C++
Raw Normal View History

2017-04-10 15:24:50 -07:00
//
// ScriptAvatarData.cpp
// libraries/script-engine/src
//
// Created by Zach Fox on 2017-04-10.
// Copyright 2017 High Fidelity, Inc.
2023-02-26 22:12:47 +01:00
// Copyright 2022-2023 Overte e.V.
2017-04-10 15:24:50 -07:00
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
2023-02-26 22:12:47 +01:00
// SPDX-License-Identifier: Apache-2.0
2017-04-10 15:24:50 -07:00
//
#include "ScriptAvatarData.h"
#include <NodeList.h>
#include <ScriptEngineCast.h>
#include <ScriptManager.h>
ScriptValue avatarDataToScriptValue(ScriptEngine* engine, ScriptAvatarData* const& in) {
return engine->newQObject(in, ScriptEngine::ScriptOwnership);
}
bool avatarDataFromScriptValue(const ScriptValue& object, ScriptAvatarData*& out) {
// This is not implemented because there are no slots/properties that take an AvatarSharedPointer from a script
assert(false);
out = nullptr;
return false;
}
STATIC_SCRIPT_TYPES_INITIALIZER((+[](ScriptManager* manager) {
auto scriptEngine = manager->engine().get();
2022-08-21 17:11:36 +02:00
scriptRegisterMetaType<ScriptAvatarData*, avatarDataToScriptValue, avatarDataFromScriptValue>(scriptEngine, "ScriptAvatarData*");
}));
2017-04-10 15:24:50 -07:00
ScriptAvatarData::ScriptAvatarData(AvatarSharedPointer avatarData) :
2017-04-10 17:39:46 -07:00
_avatarData(avatarData)
2017-04-10 15:24:50 -07:00
{
QObject::connect(avatarData.get(), &AvatarData::displayNameChanged, this, &ScriptAvatarData::displayNameChanged);
QObject::connect(avatarData.get(), &AvatarData::sessionDisplayNameChanged, this, &ScriptAvatarData::sessionDisplayNameChanged);
2018-02-15 13:14:56 -08:00
QObject::connect(avatarData.get(), &AvatarData::skeletonModelURLChanged, this, &ScriptAvatarData::skeletonModelURLChanged);
QObject::connect(avatarData.get(), &AvatarData::lookAtSnappingChanged, this, &ScriptAvatarData::lookAtSnappingChanged);
2017-04-10 15:24:50 -07:00
}
2017-04-10 15:46:43 -07:00
//
// PHYSICAL PROPERTIES: POSITION AND ORIENTATION
// START
//
glm::vec3 ScriptAvatarData::getPosition() const {
2017-04-10 15:24:50 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getWorldPosition();
2017-04-10 15:24:50 -07:00
} else {
2017-04-10 15:46:43 -07:00
return glm::vec3();
2017-04-10 15:24:50 -07:00
}
}
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getTargetScale() const {
2017-04-10 15:24:50 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
2017-04-10 15:46:43 -07:00
return sharedAvatarData->getTargetScale();
} else {
return 0.0f;
}
}
2017-04-10 17:10:06 -07:00
glm::vec3 ScriptAvatarData::getHandPosition() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getHandPosition();
2017-04-10 15:24:50 -07:00
} else {
return glm::vec3();
}
}
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getBodyPitch() const {
2017-04-10 15:24:50 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
2017-04-10 15:46:43 -07:00
return sharedAvatarData->getBodyPitch();
} else {
return 0.0f;
}
}
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getBodyYaw() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getBodyYaw();
} else {
return 0.0f;
}
}
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getBodyRoll() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getBodyRoll();
} else {
return 0.0f;
}
}
2017-04-10 17:10:06 -07:00
glm::quat ScriptAvatarData::getOrientation() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getWorldOrientation();
2017-04-10 15:46:43 -07:00
} else {
return glm::quat();
}
}
2017-04-10 17:10:06 -07:00
glm::quat ScriptAvatarData::getHeadOrientation() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getHeadOrientation();
2017-04-10 15:24:50 -07:00
} else {
2017-04-10 15:46:43 -07:00
return glm::quat();
}
}
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getHeadPitch() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getHeadPitch();
} else {
return 0.0f;
}
}
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getHeadYaw() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getHeadYaw();
} else {
return 0.0f;
2017-04-10 15:24:50 -07:00
}
}
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getHeadRoll() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getHeadRoll();
} else {
return 0.0f;
}
}
//
// PHYSICAL PROPERTIES: POSITION AND ORIENTATION
// END
//
2017-04-10 15:24:50 -07:00
2017-04-10 15:46:43 -07:00
//
// PHYSICAL PROPERTIES: VELOCITY
// START
//
2017-04-10 17:10:06 -07:00
glm::vec3 ScriptAvatarData::getVelocity() const {
2017-04-10 15:24:50 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getWorldVelocity();
2017-04-10 15:24:50 -07:00
} else {
2017-04-10 15:46:43 -07:00
return glm::vec3();
2017-04-10 15:24:50 -07:00
}
}
2017-04-10 17:10:06 -07:00
glm::vec3 ScriptAvatarData::getAngularVelocity() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getWorldAngularVelocity();
2017-04-10 15:46:43 -07:00
} else {
return glm::vec3();
}
}
//
// PHYSICAL PROPERTIES: VELOCITY
// END
//
2017-04-10 15:24:50 -07:00
2017-04-10 15:46:43 -07:00
//
// IDENTIFIER PROPERTIES
// START
//
2017-04-10 17:10:06 -07:00
QUuid ScriptAvatarData::getSessionUUID() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getSessionUUID();
} else {
return QUuid();
}
}
2017-04-10 17:10:06 -07:00
QString ScriptAvatarData::getDisplayName() const {
2017-04-10 15:24:50 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getDisplayName();
} else {
return QString();
}
}
2017-04-10 17:10:06 -07:00
QString ScriptAvatarData::getSessionDisplayName() const {
2017-04-10 15:24:50 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getSessionDisplayName();
} else {
return QString();
}
}
bool ScriptAvatarData::getIsReplicated() const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getIsReplicated();
} else {
return false;
}
}
bool ScriptAvatarData::getLookAtSnappingEnabled() const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getLookAtSnappingEnabled();
} else {
return false;
}
}
2017-04-10 15:46:43 -07:00
//
// IDENTIFIER PROPERTIES
// END
//
2017-04-10 15:24:50 -07:00
2017-04-10 15:46:43 -07:00
//
// ATTACHMENT AND JOINT PROPERTIES
// START
//
2017-04-10 17:10:06 -07:00
QString ScriptAvatarData::getSkeletonModelURLFromScript() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
auto nodeList = DependencyManager::get<NodeList>();
if (sharedAvatarData->isMyAvatar() && !sharedAvatarData->isMyAvatarURLProtected() && nodeList->getThisNodeCanViewAssetURLs()) {
return sharedAvatarData->getSkeletonModelURLFromScript();
}
return QString();
2017-04-10 15:46:43 -07:00
} else {
return QString();
}
}
char ScriptAvatarData::getHandState() const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getHandState();
} else {
return -1;
}
}
glm::quat ScriptAvatarData::getJointRotation(int index) const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getJointRotation(index);
} else {
return glm::quat();
}
}
glm::vec3 ScriptAvatarData::getJointTranslation(int index) const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getJointTranslation(index);
} else {
return glm::vec3();
}
}
2017-04-10 15:54:25 -07:00
glm::quat ScriptAvatarData::getJointRotation(const QString& name) const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getJointRotation(name);
} else {
return glm::quat();
}
}
glm::vec3 ScriptAvatarData::getJointTranslation(const QString& name) const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getJointTranslation(name);
} else {
return glm::vec3();
}
}
QVector<glm::quat> ScriptAvatarData::getJointRotations() const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getJointRotations();
} else {
return QVector<glm::quat>();
}
}
2017-04-24 19:22:02 -04:00
QVector<glm::vec3> ScriptAvatarData::getJointTranslations() const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getJointTranslations();
} else {
return QVector<glm::vec3>();
}
}
2017-04-10 15:54:25 -07:00
bool ScriptAvatarData::isJointDataValid(const QString& name) const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->isJointDataValid(name);
} else {
return false;
}
}
int ScriptAvatarData::getJointIndex(const QString& name) const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getJointIndex(name);
} else {
return -1;
}
}
QStringList ScriptAvatarData::getJointNames() const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getJointNames();
} else {
return QStringList();
}
}
QVector<AttachmentData> ScriptAvatarData::getAttachmentData() const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getAttachmentData();
} else {
return QVector<AttachmentData>();
}
}
2017-04-10 15:46:43 -07:00
//
// ATTACHMENT AND JOINT PROPERTIES
// END
//
#if PR_BUILD || DEV_BUILD
//
// ENTITY PROPERTIES
// START
//
AvatarEntityMap ScriptAvatarData::getAvatarEntities() const {
AvatarEntityMap scriptEntityData;
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getAvatarEntityDataNonDefault();
}
return scriptEntityData;
}
//
// ENTITY PROPERTIES
// END
//
#endif
2017-04-10 15:46:43 -07:00
//
// AUDIO PROPERTIES
// START
//
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getAudioLoudness() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getAudioLoudness();
} else {
return 0.0f;
}
}
2017-04-10 17:10:06 -07:00
float ScriptAvatarData::getAudioAverageLoudness() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getAudioAverageLoudness();
} else {
return 0.0f;
}
}
//
// AUDIO PROPERTIES
// END
//
//
// MATRIX PROPERTIES
// START
//
2017-04-10 17:10:06 -07:00
glm::mat4 ScriptAvatarData::getSensorToWorldMatrix() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getSensorToWorldMatrix();
} else {
return glm::mat4();
}
}
2017-04-10 17:10:06 -07:00
glm::mat4 ScriptAvatarData::getControllerLeftHandMatrix() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getControllerLeftHandMatrix();
} else {
return glm::mat4();
}
}
2017-04-10 17:10:06 -07:00
glm::mat4 ScriptAvatarData::getControllerRightHandMatrix() const {
2017-04-10 15:46:43 -07:00
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getControllerRightHandMatrix();
} else {
return glm::mat4();
}
}
//
// MATRIX PROPERTIES
// END
//
2017-04-10 15:24:50 -07:00
2019-03-22 17:19:39 -07:00
bool ScriptAvatarData::getHasPriority() const {
if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) {
return sharedAvatarData->getHasPriority();
} else {
return false;
}
}
2017-04-10 15:24:50 -07:00
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();
}
}