mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 01:17:14 +02:00
Add special avatar id for attaching overlays
This commit is contained in:
parent
7c3c05a450
commit
23450e929b
13 changed files with 58 additions and 46 deletions
|
@ -671,10 +671,12 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
// send a location update immediately
|
// send a location update immediately
|
||||||
discoverabilityManager->updateLocation();
|
discoverabilityManager->updateLocation();
|
||||||
|
|
||||||
|
auto myAvatar = getMyAvatar();
|
||||||
|
|
||||||
connect(nodeList.data(), &NodeList::nodeAdded, this, &Application::nodeAdded);
|
connect(nodeList.data(), &NodeList::nodeAdded, this, &Application::nodeAdded);
|
||||||
connect(nodeList.data(), &NodeList::nodeKilled, this, &Application::nodeKilled);
|
connect(nodeList.data(), &NodeList::nodeKilled, this, &Application::nodeKilled);
|
||||||
connect(nodeList.data(), &NodeList::nodeActivated, this, &Application::nodeActivated);
|
connect(nodeList.data(), &NodeList::nodeActivated, this, &Application::nodeActivated);
|
||||||
connect(nodeList.data(), &NodeList::uuidChanged, getMyAvatar(), &MyAvatar::setSessionUUID);
|
connect(nodeList.data(), &NodeList::uuidChanged, myAvatar.get(), &MyAvatar::setSessionUUID);
|
||||||
connect(nodeList.data(), &NodeList::uuidChanged, this, &Application::setSessionUUID);
|
connect(nodeList.data(), &NodeList::uuidChanged, this, &Application::setSessionUUID);
|
||||||
connect(nodeList.data(), &NodeList::packetVersionMismatch, this, &Application::notifyPacketVersionMismatch);
|
connect(nodeList.data(), &NodeList::packetVersionMismatch, this, &Application::notifyPacketVersionMismatch);
|
||||||
|
|
||||||
|
@ -704,7 +706,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
connect(this, &Application::activeDisplayPluginChanged, this, &Application::updateThreadPoolCount);
|
connect(this, &Application::activeDisplayPluginChanged, this, &Application::updateThreadPoolCount);
|
||||||
|
|
||||||
// Save avatar location immediately after a teleport.
|
// Save avatar location immediately after a teleport.
|
||||||
connect(getMyAvatar(), &MyAvatar::positionGoneTo,
|
connect(myAvatar.get(), &MyAvatar::positionGoneTo,
|
||||||
DependencyManager::get<AddressManager>().data(), &AddressManager::storeCurrentAddress);
|
DependencyManager::get<AddressManager>().data(), &AddressManager::storeCurrentAddress);
|
||||||
|
|
||||||
auto scriptEngines = DependencyManager::get<ScriptEngines>().data();
|
auto scriptEngines = DependencyManager::get<ScriptEngines>().data();
|
||||||
|
@ -741,7 +743,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
connect(&_entityEditSender, &EntityEditPacketSender::packetSent, this, &Application::packetSent);
|
connect(&_entityEditSender, &EntityEditPacketSender::packetSent, this, &Application::packetSent);
|
||||||
|
|
||||||
// send the identity packet for our avatar each second to our avatar mixer
|
// send the identity packet for our avatar each second to our avatar mixer
|
||||||
connect(&identityPacketTimer, &QTimer::timeout, getMyAvatar(), &MyAvatar::sendIdentityPacket);
|
connect(&identityPacketTimer, &QTimer::timeout, myAvatar.get(), &MyAvatar::sendIdentityPacket);
|
||||||
identityPacketTimer.start(AVATAR_IDENTITY_PACKET_SEND_INTERVAL_MSECS);
|
identityPacketTimer.start(AVATAR_IDENTITY_PACKET_SEND_INTERVAL_MSECS);
|
||||||
|
|
||||||
const char** constArgv = const_cast<const char**>(argv);
|
const char** constArgv = const_cast<const char**>(argv);
|
||||||
|
@ -820,7 +822,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
|
|
||||||
// Tell our entity edit sender about our known jurisdictions
|
// Tell our entity edit sender about our known jurisdictions
|
||||||
_entityEditSender.setServerJurisdictions(&_entityServerJurisdictions);
|
_entityEditSender.setServerJurisdictions(&_entityServerJurisdictions);
|
||||||
_entityEditSender.setMyAvatar(getMyAvatar());
|
_entityEditSender.setMyAvatar(myAvatar.get());
|
||||||
|
|
||||||
// For now we're going to set the PPS for outbound packets to be super high, this is
|
// For now we're going to set the PPS for outbound packets to be super high, this is
|
||||||
// probably not the right long term solution. But for now, we're going to do this to
|
// probably not the right long term solution. But for now, we're going to do this to
|
||||||
|
@ -841,7 +843,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
bandwidthRecorder.data(), &BandwidthRecorder::updateInboundData);
|
bandwidthRecorder.data(), &BandwidthRecorder::updateInboundData);
|
||||||
|
|
||||||
// FIXME -- I'm a little concerned about this.
|
// FIXME -- I'm a little concerned about this.
|
||||||
connect(getMyAvatar()->getSkeletonModel().get(), &SkeletonModel::skeletonLoaded,
|
connect(myAvatar->getSkeletonModel().get(), &SkeletonModel::skeletonLoaded,
|
||||||
this, &Application::checkSkeleton, Qt::QueuedConnection);
|
this, &Application::checkSkeleton, Qt::QueuedConnection);
|
||||||
|
|
||||||
// Setup the userInputMapper with the actions
|
// Setup the userInputMapper with the actions
|
||||||
|
@ -1055,7 +1057,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
applicationUpdater->checkForUpdate();
|
applicationUpdater->checkForUpdate();
|
||||||
|
|
||||||
// Now that menu is initialized we can sync myAvatar with it's state.
|
// Now that menu is initialized we can sync myAvatar with it's state.
|
||||||
getMyAvatar()->updateMotionBehaviorFromMenu();
|
myAvatar->updateMotionBehaviorFromMenu();
|
||||||
|
|
||||||
// FIXME spacemouse code still needs cleanup
|
// FIXME spacemouse code still needs cleanup
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -1090,10 +1092,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
static int SEND_STATS_INTERVAL_MS = 10000;
|
static int SEND_STATS_INTERVAL_MS = 10000;
|
||||||
static int NEARBY_AVATAR_RADIUS_METERS = 10;
|
static int NEARBY_AVATAR_RADIUS_METERS = 10;
|
||||||
|
|
||||||
static glm::vec3 lastAvatarPosition = getMyAvatar()->getPosition();
|
static glm::vec3 lastAvatarPosition = myAvatar->getPosition();
|
||||||
static glm::mat4 lastHMDHeadPose = getHMDSensorPose();
|
static glm::mat4 lastHMDHeadPose = getHMDSensorPose();
|
||||||
static controller::Pose lastLeftHandPose = getMyAvatar()->getLeftHandPose();
|
static controller::Pose lastLeftHandPose = myAvatar->getLeftHandPose();
|
||||||
static controller::Pose lastRightHandPose = getMyAvatar()->getRightHandPose();
|
static controller::Pose lastRightHandPose = myAvatar->getRightHandPose();
|
||||||
|
|
||||||
// Periodically send fps as a user activity event
|
// Periodically send fps as a user activity event
|
||||||
QTimer* sendStatsTimer = new QTimer(this);
|
QTimer* sendStatsTimer = new QTimer(this);
|
||||||
|
@ -1141,7 +1143,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
|
|
||||||
properties["throttled"] = _displayPlugin ? _displayPlugin->isThrottled() : false;
|
properties["throttled"] = _displayPlugin ? _displayPlugin->isThrottled() : false;
|
||||||
|
|
||||||
glm::vec3 avatarPosition = getMyAvatar()->getPosition();
|
auto myAvatar = getMyAvatar();
|
||||||
|
glm::vec3 avatarPosition = myAvatar->getPosition();
|
||||||
properties["avatar_has_moved"] = lastAvatarPosition != avatarPosition;
|
properties["avatar_has_moved"] = lastAvatarPosition != avatarPosition;
|
||||||
lastAvatarPosition = avatarPosition;
|
lastAvatarPosition = avatarPosition;
|
||||||
|
|
||||||
|
@ -1156,8 +1159,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
properties["hmd_head_pose_changed"] = isHMDMode() && (hmdHeadPose != lastHMDHeadPose);
|
properties["hmd_head_pose_changed"] = isHMDMode() && (hmdHeadPose != lastHMDHeadPose);
|
||||||
lastHMDHeadPose = hmdHeadPose;
|
lastHMDHeadPose = hmdHeadPose;
|
||||||
|
|
||||||
auto leftHandPose = getMyAvatar()->getLeftHandPose();
|
auto leftHandPose = myAvatar->getLeftHandPose();
|
||||||
auto rightHandPose = getMyAvatar()->getRightHandPose();
|
auto rightHandPose = myAvatar->getRightHandPose();
|
||||||
// controller::Pose considers two poses to be different if either are invalid. In our case, we actually
|
// controller::Pose considers two poses to be different if either are invalid. In our case, we actually
|
||||||
// want to consider the pose to be unchanged if it was invalid and still is invalid, so we check that first.
|
// want to consider the pose to be unchanged if it was invalid and still is invalid, so we check that first.
|
||||||
properties["hand_pose_changed"] =
|
properties["hand_pose_changed"] =
|
||||||
|
@ -1204,7 +1207,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
|
|
||||||
OctreeEditPacketSender* packetSender = entityScriptingInterface->getPacketSender();
|
OctreeEditPacketSender* packetSender = entityScriptingInterface->getPacketSender();
|
||||||
EntityEditPacketSender* entityPacketSender = static_cast<EntityEditPacketSender*>(packetSender);
|
EntityEditPacketSender* entityPacketSender = static_cast<EntityEditPacketSender*>(packetSender);
|
||||||
entityPacketSender->setMyAvatar(getMyAvatar());
|
entityPacketSender->setMyAvatar(myAvatar.get());
|
||||||
|
|
||||||
connect(this, &Application::applicationStateChanged, this, &Application::activeChanged);
|
connect(this, &Application::applicationStateChanged, this, &Application::activeChanged);
|
||||||
qCDebug(interfaceapp, "Startup time: %4.2f seconds.", (double)startupTimer.elapsed() / 1000.0);
|
qCDebug(interfaceapp, "Startup time: %4.2f seconds.", (double)startupTimer.elapsed() / 1000.0);
|
||||||
|
@ -1581,7 +1584,7 @@ void Application::initializeUi() {
|
||||||
FileScriptingInterface* fileDownload = new FileScriptingInterface(engine);
|
FileScriptingInterface* fileDownload = new FileScriptingInterface(engine);
|
||||||
rootContext->setContextProperty("File", fileDownload);
|
rootContext->setContextProperty("File", fileDownload);
|
||||||
connect(fileDownload, &FileScriptingInterface::unzipSuccess, this, &Application::showAssetServerWidget);
|
connect(fileDownload, &FileScriptingInterface::unzipSuccess, this, &Application::showAssetServerWidget);
|
||||||
rootContext->setContextProperty("MyAvatar", getMyAvatar());
|
rootContext->setContextProperty("MyAvatar", getMyAvatar().get());
|
||||||
rootContext->setContextProperty("Messages", DependencyManager::get<MessagesClient>().data());
|
rootContext->setContextProperty("Messages", DependencyManager::get<MessagesClient>().data());
|
||||||
rootContext->setContextProperty("Recording", DependencyManager::get<RecordingScriptingInterface>().data());
|
rootContext->setContextProperty("Recording", DependencyManager::get<RecordingScriptingInterface>().data());
|
||||||
rootContext->setContextProperty("Preferences", DependencyManager::get<Preferences>().data());
|
rootContext->setContextProperty("Preferences", DependencyManager::get<Preferences>().data());
|
||||||
|
@ -3331,7 +3334,7 @@ void Application::init() {
|
||||||
entity->setCollisionSound(sound);
|
entity->setCollisionSound(sound);
|
||||||
}
|
}
|
||||||
}, Qt::QueuedConnection);
|
}, Qt::QueuedConnection);
|
||||||
connect(getMyAvatar(), &MyAvatar::newCollisionSoundURL, this, [this](QUrl newURL) {
|
connect(getMyAvatar().get(), &MyAvatar::newCollisionSoundURL, this, [this](QUrl newURL) {
|
||||||
if (auto avatar = getMyAvatar()) {
|
if (auto avatar = getMyAvatar()) {
|
||||||
auto sound = DependencyManager::get<SoundCache>()->getSound(newURL);
|
auto sound = DependencyManager::get<SoundCache>()->getSound(newURL);
|
||||||
avatar->setCollisionSound(sound);
|
avatar->setCollisionSound(sound);
|
||||||
|
@ -3387,7 +3390,7 @@ void Application::updateMyAvatarLookAtPosition() {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
AvatarSharedPointer lookingAt = myAvatar->getLookAtTargetAvatar().lock();
|
AvatarSharedPointer lookingAt = myAvatar->getLookAtTargetAvatar().lock();
|
||||||
if (lookingAt && myAvatar != lookingAt.get()) {
|
if (lookingAt && myAvatar.get() != lookingAt.get()) {
|
||||||
// If I am looking at someone else, look directly at one of their eyes
|
// If I am looking at someone else, look directly at one of their eyes
|
||||||
isLookingAtSomeone = true;
|
isLookingAtSomeone = true;
|
||||||
auto lookingAtHead = static_pointer_cast<Avatar>(lookingAt)->getHead();
|
auto lookingAtHead = static_pointer_cast<Avatar>(lookingAt)->getHead();
|
||||||
|
@ -4236,7 +4239,7 @@ PickRay Application::computePickRay(float x, float y) const {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
MyAvatar* Application::getMyAvatar() const {
|
std::shared_ptr<MyAvatar> Application::getMyAvatar() const {
|
||||||
return DependencyManager::get<AvatarManager>()->getMyAvatar();
|
return DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4824,7 +4827,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri
|
||||||
scriptEngine->registerGlobalObject("Rates", new RatesScriptingInterface(this));
|
scriptEngine->registerGlobalObject("Rates", new RatesScriptingInterface(this));
|
||||||
|
|
||||||
// hook our avatar and avatar hash map object into this script engine
|
// hook our avatar and avatar hash map object into this script engine
|
||||||
scriptEngine->registerGlobalObject("MyAvatar", getMyAvatar());
|
scriptEngine->registerGlobalObject("MyAvatar", getMyAvatar().get());
|
||||||
qScriptRegisterMetaType(scriptEngine, audioListenModeToScriptValue, audioListenModeFromScriptValue);
|
qScriptRegisterMetaType(scriptEngine, audioListenModeToScriptValue, audioListenModeFromScriptValue);
|
||||||
|
|
||||||
scriptEngine->registerGlobalObject("AvatarList", DependencyManager::get<AvatarManager>().data());
|
scriptEngine->registerGlobalObject("AvatarList", DependencyManager::get<AvatarManager>().data());
|
||||||
|
|
|
@ -401,7 +401,7 @@ private:
|
||||||
|
|
||||||
int sendNackPackets();
|
int sendNackPackets();
|
||||||
|
|
||||||
MyAvatar* getMyAvatar() const;
|
std::shared_ptr<MyAvatar> getMyAvatar() const;
|
||||||
|
|
||||||
void checkSkeleton() const;
|
void checkSkeleton() const;
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,12 @@
|
||||||
#include <EntityTree.h>
|
#include <EntityTree.h>
|
||||||
#include <EntityTreeRenderer.h>
|
#include <EntityTreeRenderer.h>
|
||||||
#include <avatar/AvatarManager.h>
|
#include <avatar/AvatarManager.h>
|
||||||
|
#include <AvatarData.h>
|
||||||
|
|
||||||
#include "InterfaceParentFinder.h"
|
#include "InterfaceParentFinder.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SpatiallyNestableWeakPointer InterfaceParentFinder::find(QUuid parentID, bool& success, SpatialParentTree* entityTree) const {
|
SpatiallyNestableWeakPointer InterfaceParentFinder::find(QUuid parentID, bool& success, SpatialParentTree* entityTree) const {
|
||||||
SpatiallyNestableWeakPointer parent;
|
SpatiallyNestableWeakPointer parent;
|
||||||
|
|
||||||
|
@ -45,6 +48,11 @@ SpatiallyNestableWeakPointer InterfaceParentFinder::find(QUuid parentID, bool& s
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (parentID == AVATAR_SELF_ID) {
|
||||||
|
success = true;
|
||||||
|
return avatarManager->getMyAvatar();
|
||||||
|
}
|
||||||
|
|
||||||
success = false;
|
success = false;
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,7 +166,7 @@ Menu::Menu() {
|
||||||
// Avatar menu ----------------------------------
|
// Avatar menu ----------------------------------
|
||||||
MenuWrapper* avatarMenu = addMenu("Avatar");
|
MenuWrapper* avatarMenu = addMenu("Avatar");
|
||||||
auto avatarManager = DependencyManager::get<AvatarManager>();
|
auto avatarManager = DependencyManager::get<AvatarManager>();
|
||||||
QObject* avatar = avatarManager->getMyAvatar();
|
auto avatar = avatarManager->getMyAvatar();
|
||||||
|
|
||||||
// Avatar > Attachments...
|
// Avatar > Attachments...
|
||||||
auto action = addActionToQMenuAndActionHash(avatarMenu, MenuOption::Attachments);
|
auto action = addActionToQMenuAndActionHash(avatarMenu, MenuOption::Attachments);
|
||||||
|
@ -182,19 +182,19 @@ Menu::Menu() {
|
||||||
addActionToQMenuAndActionHash(avatarSizeMenu,
|
addActionToQMenuAndActionHash(avatarSizeMenu,
|
||||||
MenuOption::IncreaseAvatarSize,
|
MenuOption::IncreaseAvatarSize,
|
||||||
0, // QML Qt::Key_Plus,
|
0, // QML Qt::Key_Plus,
|
||||||
avatar, SLOT(increaseSize()));
|
avatar.get(), SLOT(increaseSize()));
|
||||||
|
|
||||||
// Avatar > Size > Decrease
|
// Avatar > Size > Decrease
|
||||||
addActionToQMenuAndActionHash(avatarSizeMenu,
|
addActionToQMenuAndActionHash(avatarSizeMenu,
|
||||||
MenuOption::DecreaseAvatarSize,
|
MenuOption::DecreaseAvatarSize,
|
||||||
0, // QML Qt::Key_Minus,
|
0, // QML Qt::Key_Minus,
|
||||||
avatar, SLOT(decreaseSize()));
|
avatar.get(), SLOT(decreaseSize()));
|
||||||
|
|
||||||
// Avatar > Size > Reset
|
// Avatar > Size > Reset
|
||||||
addActionToQMenuAndActionHash(avatarSizeMenu,
|
addActionToQMenuAndActionHash(avatarSizeMenu,
|
||||||
MenuOption::ResetAvatarSize,
|
MenuOption::ResetAvatarSize,
|
||||||
0, // QML Qt::Key_Equal,
|
0, // QML Qt::Key_Equal,
|
||||||
avatar, SLOT(resetSize()));
|
avatar.get(), SLOT(resetSize()));
|
||||||
|
|
||||||
// Avatar > Reset Sensors
|
// Avatar > Reset Sensors
|
||||||
addActionToQMenuAndActionHash(avatarMenu,
|
addActionToQMenuAndActionHash(avatarMenu,
|
||||||
|
@ -486,38 +486,38 @@ Menu::Menu() {
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderOtherLookAtVectors, 0, false);
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderOtherLookAtVectors, 0, false);
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::FixGaze, 0, false);
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::FixGaze, 0, false);
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::AnimDebugDrawDefaultPose, 0, false,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::AnimDebugDrawDefaultPose, 0, false,
|
||||||
avatar, SLOT(setEnableDebugDrawDefaultPose(bool)));
|
avatar.get(), SLOT(setEnableDebugDrawDefaultPose(bool)));
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::AnimDebugDrawAnimPose, 0, false,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::AnimDebugDrawAnimPose, 0, false,
|
||||||
avatar, SLOT(setEnableDebugDrawAnimPose(bool)));
|
avatar.get(), SLOT(setEnableDebugDrawAnimPose(bool)));
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::AnimDebugDrawPosition, 0, false,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::AnimDebugDrawPosition, 0, false,
|
||||||
avatar, SLOT(setEnableDebugDrawPosition(bool)));
|
avatar.get(), SLOT(setEnableDebugDrawPosition(bool)));
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::MeshVisible, 0, true,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::MeshVisible, 0, true,
|
||||||
avatar, SLOT(setEnableMeshVisible(bool)));
|
avatar.get(), SLOT(setEnableMeshVisible(bool)));
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::DisableEyelidAdjustment, 0, false);
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::DisableEyelidAdjustment, 0, false);
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::TurnWithHead, 0, false);
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::TurnWithHead, 0, false);
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::UseAnimPreAndPostRotations, 0, true,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::UseAnimPreAndPostRotations, 0, true,
|
||||||
avatar, SLOT(setUseAnimPreAndPostRotations(bool)));
|
avatar.get(), SLOT(setUseAnimPreAndPostRotations(bool)));
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableInverseKinematics, 0, true,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableInverseKinematics, 0, true,
|
||||||
avatar, SLOT(setEnableInverseKinematics(bool)));
|
avatar.get(), SLOT(setEnableInverseKinematics(bool)));
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderSensorToWorldMatrix, 0, false,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderSensorToWorldMatrix, 0, false,
|
||||||
avatar, SLOT(setEnableDebugDrawSensorToWorldMatrix(bool)));
|
avatar.get(), SLOT(setEnableDebugDrawSensorToWorldMatrix(bool)));
|
||||||
|
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::ActionMotorControl,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::ActionMotorControl,
|
||||||
Qt::CTRL | Qt::SHIFT | Qt::Key_K, true, avatar, SLOT(updateMotionBehaviorFromMenu()),
|
Qt::CTRL | Qt::SHIFT | Qt::Key_K, true, avatar.get(), SLOT(updateMotionBehaviorFromMenu()),
|
||||||
UNSPECIFIED_POSITION, "Developer");
|
UNSPECIFIED_POSITION, "Developer");
|
||||||
|
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::ScriptedMotorControl, 0, true,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::ScriptedMotorControl, 0, true,
|
||||||
avatar, SLOT(updateMotionBehaviorFromMenu()),
|
avatar.get(), SLOT(updateMotionBehaviorFromMenu()),
|
||||||
UNSPECIFIED_POSITION, "Developer");
|
UNSPECIFIED_POSITION, "Developer");
|
||||||
|
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableCharacterController, 0, true,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableCharacterController, 0, true,
|
||||||
avatar, SLOT(updateMotionBehaviorFromMenu()),
|
avatar.get(), SLOT(updateMotionBehaviorFromMenu()),
|
||||||
UNSPECIFIED_POSITION, "Developer");
|
UNSPECIFIED_POSITION, "Developer");
|
||||||
|
|
||||||
// Developer > Hands >>>
|
// Developer > Hands >>>
|
||||||
MenuWrapper* handOptionsMenu = developerMenu->addMenu("Hands");
|
MenuWrapper* handOptionsMenu = developerMenu->addMenu("Hands");
|
||||||
addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::DisplayHandTargets, 0, false,
|
addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::DisplayHandTargets, 0, false,
|
||||||
avatar, SLOT(setEnableDebugDrawHandControllers(bool)));
|
avatar.get(), SLOT(setEnableDebugDrawHandControllers(bool)));
|
||||||
addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::LowVelocityFilter, 0, true,
|
addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::LowVelocityFilter, 0, true,
|
||||||
qApp, SLOT(setLowVelocityFilter(bool)));
|
qApp, SLOT(setLowVelocityFilter(bool)));
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ AvatarActionHold::~AvatarActionHold() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AvatarActionHold::getAvatarRigidBodyLocation(glm::vec3& avatarRigidBodyPosition, glm::quat& avatarRigidBodyRotation) {
|
bool AvatarActionHold::getAvatarRigidBodyLocation(glm::vec3& avatarRigidBodyPosition, glm::quat& avatarRigidBodyRotation) {
|
||||||
MyAvatar* myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
MyCharacterController* controller = myAvatar ? myAvatar->getCharacterController() : nullptr;
|
MyCharacterController* controller = myAvatar ? myAvatar->getCharacterController() : nullptr;
|
||||||
if (!controller) {
|
if (!controller) {
|
||||||
qDebug() << "AvatarActionHold::getAvatarRigidBodyLocation failed to get character controller";
|
qDebug() << "AvatarActionHold::getAvatarRigidBodyLocation failed to get character controller";
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include <SettingHandle.h>
|
#include <SettingHandle.h>
|
||||||
#include <UsersScriptingInterface.h>
|
#include <UsersScriptingInterface.h>
|
||||||
#include <UUID.h>
|
#include <UUID.h>
|
||||||
|
#include <AvatarData.h>
|
||||||
|
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "Avatar.h"
|
#include "Avatar.h"
|
||||||
|
@ -323,7 +324,7 @@ void AvatarManager::handleCollisionEvents(const CollisionEvents& collisionEvents
|
||||||
// an id of null. Thus this code handles any collision in which one of the participating objects is
|
// an id of null. Thus this code handles any collision in which one of the participating objects is
|
||||||
// my avatar. (Other user machines will make a similar analysis and inject sound for their collisions.)
|
// my avatar. (Other user machines will make a similar analysis and inject sound for their collisions.)
|
||||||
if (collision.idA.isNull() || collision.idB.isNull()) {
|
if (collision.idA.isNull() || collision.idB.isNull()) {
|
||||||
MyAvatar* myAvatar = getMyAvatar();
|
auto myAvatar = getMyAvatar();
|
||||||
auto collisionSound = myAvatar->getCollisionSound();
|
auto collisionSound = myAvatar->getCollisionSound();
|
||||||
if (collisionSound) {
|
if (collisionSound) {
|
||||||
const auto characterController = myAvatar->getCharacterController();
|
const auto characterController = myAvatar->getCharacterController();
|
||||||
|
@ -399,7 +400,7 @@ void AvatarManager::updateAvatarRenderStatus(bool shouldRenderAvatars) {
|
||||||
|
|
||||||
|
|
||||||
AvatarSharedPointer AvatarManager::getAvatarBySessionID(const QUuid& sessionID) {
|
AvatarSharedPointer AvatarManager::getAvatarBySessionID(const QUuid& sessionID) {
|
||||||
if (sessionID == _myAvatar->getSessionUUID()) {
|
if (sessionID == AVATAR_SELF_ID || sessionID == _myAvatar->getSessionUUID()) {
|
||||||
return _myAvatar;
|
return _myAvatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ public:
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
MyAvatar* getMyAvatar() { return _myAvatar.get(); }
|
std::shared_ptr<MyAvatar> getMyAvatar() { return _myAvatar; }
|
||||||
AvatarSharedPointer getAvatarBySessionID(const QUuid& sessionID) override;
|
AvatarSharedPointer getAvatarBySessionID(const QUuid& sessionID) override;
|
||||||
|
|
||||||
void updateMyAvatar(float deltaTime);
|
void updateMyAvatar(float deltaTime);
|
||||||
|
|
|
@ -79,7 +79,7 @@ bool HMDScriptingInterface::getHUDLookAtPosition3D(glm::vec3& result) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::mat4 HMDScriptingInterface::getWorldHMDMatrix() const {
|
glm::mat4 HMDScriptingInterface::getWorldHMDMatrix() const {
|
||||||
MyAvatar* myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
return myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
|
return myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ bool OverlayConductor::headOutsideOverlay() const {
|
||||||
|
|
||||||
bool OverlayConductor::updateAvatarIsAtRest() {
|
bool OverlayConductor::updateAvatarIsAtRest() {
|
||||||
|
|
||||||
MyAvatar* myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
|
|
||||||
const quint64 REST_ENABLE_TIME_USECS = 1000 * 1000; // 1 s
|
const quint64 REST_ENABLE_TIME_USECS = 1000 * 1000; // 1 s
|
||||||
const quint64 REST_DISABLE_TIME_USECS = 200 * 1000; // 200 ms
|
const quint64 REST_DISABLE_TIME_USECS = 200 * 1000; // 200 ms
|
||||||
|
@ -69,7 +69,7 @@ bool OverlayConductor::updateAvatarIsAtRest() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OverlayConductor::updateAvatarHasDriveInput() {
|
bool OverlayConductor::updateAvatarHasDriveInput() {
|
||||||
MyAvatar* myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
|
|
||||||
const quint64 DRIVE_ENABLE_TIME_USECS = 200 * 1000; // 200 ms
|
const quint64 DRIVE_ENABLE_TIME_USECS = 200 * 1000; // 200 ms
|
||||||
const quint64 DRIVE_DISABLE_TIME_USECS = 1000 * 1000; // 1 s
|
const quint64 DRIVE_DISABLE_TIME_USECS = 1000 * 1000; // 1 s
|
||||||
|
@ -103,7 +103,7 @@ void OverlayConductor::update(float dt) {
|
||||||
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
||||||
bool currentVisible = !offscreenUi->getDesktop()->property("pinned").toBool();
|
bool currentVisible = !offscreenUi->getDesktop()->property("pinned").toBool();
|
||||||
|
|
||||||
MyAvatar* myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
// centerUI when hmd mode is first enabled and mounted
|
// centerUI when hmd mode is first enabled and mounted
|
||||||
if (qApp->isHMDMode() && qApp->getActiveDisplayPlugin()->isDisplayVisible()) {
|
if (qApp->isHMDMode() && qApp->getActiveDisplayPlugin()->isDisplayVisible()) {
|
||||||
if (!_hmdMode) {
|
if (!_hmdMode) {
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
void setupPreferences() {
|
void setupPreferences() {
|
||||||
auto preferences = DependencyManager::get<Preferences>();
|
auto preferences = DependencyManager::get<Preferences>();
|
||||||
|
|
||||||
MyAvatar* myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
static const QString AVATAR_BASICS { "Avatar Basics" };
|
static const QString AVATAR_BASICS { "Avatar Basics" };
|
||||||
{
|
{
|
||||||
auto getter = [=]()->QString { return myAvatar->getDisplayName(); };
|
auto getter = [=]()->QString { return myAvatar->getDisplayName(); };
|
||||||
|
|
|
@ -170,7 +170,7 @@ void Stats::updateStats(bool force) {
|
||||||
STAT_UPDATE(entitiesPing, octreeServerCount ? totalPingOctree / octreeServerCount : -1);
|
STAT_UPDATE(entitiesPing, octreeServerCount ? totalPingOctree / octreeServerCount : -1);
|
||||||
|
|
||||||
// Third column, avatar stats
|
// Third column, avatar stats
|
||||||
MyAvatar* myAvatar = avatarManager->getMyAvatar();
|
auto myAvatar = avatarManager->getMyAvatar();
|
||||||
glm::vec3 avatarPos = myAvatar->getPosition();
|
glm::vec3 avatarPos = myAvatar->getPosition();
|
||||||
STAT_UPDATE(position, QVector3D(avatarPos.x, avatarPos.y, avatarPos.z));
|
STAT_UPDATE(position, QVector3D(avatarPos.x, avatarPos.y, avatarPos.z));
|
||||||
STAT_UPDATE_FLOAT(speed, glm::length(myAvatar->getVelocity()), 0.01f);
|
STAT_UPDATE_FLOAT(speed, glm::length(myAvatar->getVelocity()), 0.01f);
|
||||||
|
|
|
@ -64,7 +64,7 @@ namespace render {
|
||||||
if (args) {
|
if (args) {
|
||||||
if (overlay->getAnchor() == Overlay::MY_AVATAR) {
|
if (overlay->getAnchor() == Overlay::MY_AVATAR) {
|
||||||
auto batch = args->_batch;
|
auto batch = args->_batch;
|
||||||
MyAvatar* avatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto avatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
glm::quat myAvatarRotation = avatar->getOrientation();
|
glm::quat myAvatarRotation = avatar->getOrientation();
|
||||||
glm::vec3 myAvatarPosition = avatar->getPosition();
|
glm::vec3 myAvatarPosition = avatar->getPosition();
|
||||||
float angle = glm::degrees(glm::angle(myAvatarRotation));
|
float angle = glm::degrees(glm::angle(myAvatarRotation));
|
||||||
|
|
|
@ -856,7 +856,7 @@ QList<SpatiallyNestablePointer> SpatiallyNestable::getChildren() const {
|
||||||
_childrenLock.withReadLock([&] {
|
_childrenLock.withReadLock([&] {
|
||||||
foreach(SpatiallyNestableWeakPointer childWP, _children.values()) {
|
foreach(SpatiallyNestableWeakPointer childWP, _children.values()) {
|
||||||
SpatiallyNestablePointer child = childWP.lock();
|
SpatiallyNestablePointer child = childWP.lock();
|
||||||
if (child && child->_parentKnowsMe && child->getParentID() == getID()) {
|
if (child && child->_parentKnowsMe && (child->getParentID() == getID() || child->getParentID() == QUuid("{00000000-0000-0000-0000-000000000001}"))) {
|
||||||
children << child;
|
children << child;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue