Combine PickScriptingInterface::getPickJointState and createTransformNode into one function

This commit is contained in:
sabrina-shanman 2018-09-27 14:28:10 -07:00
parent ed987ffe9e
commit 9e0d35e40d
2 changed files with 53 additions and 76 deletions

View file

@ -98,8 +98,7 @@ unsigned int PickScriptingInterface::createRayPick(const QVariant& properties) {
} }
auto rayPick = std::make_shared<RayPick>(position, direction, filter, maxDistance, enabled); auto rayPick = std::make_shared<RayPick>(position, direction, filter, maxDistance, enabled);
rayPick->parentTransform = createTransformNode(propMap); setParentTransform(rayPick, propMap);
rayPick->setJointState(getPickJointState(propMap));
return DependencyManager::get<PickManager>()->addPick(PickQuery::Ray, rayPick); return DependencyManager::get<PickManager>()->addPick(PickQuery::Ray, rayPick);
} }
@ -224,8 +223,7 @@ unsigned int PickScriptingInterface::createParabolaPick(const QVariant& properti
auto parabolaPick = std::make_shared<ParabolaPick>(position, direction, speed, accelerationAxis, auto parabolaPick = std::make_shared<ParabolaPick>(position, direction, speed, accelerationAxis,
rotateAccelerationWithAvatar, rotateAccelerationWithParent, scaleWithParent, filter, maxDistance, enabled); rotateAccelerationWithAvatar, rotateAccelerationWithParent, scaleWithParent, filter, maxDistance, enabled);
parabolaPick->parentTransform = createTransformNode(propMap); setParentTransform(parabolaPick, propMap);
parabolaPick->setJointState(getPickJointState(propMap));
return DependencyManager::get<PickManager>()->addPick(PickQuery::Parabola, parabolaPick); return DependencyManager::get<PickManager>()->addPick(PickQuery::Parabola, parabolaPick);
} }
@ -277,8 +275,7 @@ unsigned int PickScriptingInterface::createCollisionPick(const QVariant& propert
CollisionRegion collisionRegion(propMap); CollisionRegion collisionRegion(propMap);
auto collisionPick = std::make_shared<CollisionPick>(filter, maxDistance, enabled, collisionRegion, qApp->getPhysicsEngine()); auto collisionPick = std::make_shared<CollisionPick>(filter, maxDistance, enabled, collisionRegion, qApp->getPhysicsEngine());
collisionPick->parentTransform = createTransformNode(propMap); setParentTransform(collisionPick, propMap);
collisionPick->setJointState(getPickJointState(propMap));
return DependencyManager::get<PickManager>()->addPick(PickQuery::Collision, collisionPick); return DependencyManager::get<PickManager>()->addPick(PickQuery::Collision, collisionPick);
} }
@ -355,82 +352,63 @@ void PickScriptingInterface::setPerFrameTimeBudget(unsigned int numUsecs) {
DependencyManager::get<PickManager>()->setPerFrameTimeBudget(numUsecs); DependencyManager::get<PickManager>()->setPerFrameTimeBudget(numUsecs);
} }
PickQuery::JointState PickScriptingInterface::getPickJointState(const QVariantMap& propMap) { void PickScriptingInterface::setParentTransform(std::shared_ptr<PickQuery> pick, const QVariantMap& propMap) {
QUuid parentUuid;
int parentJointIndex = 0;
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
if (propMap["parentID"].isValid()) { if (propMap["parentID"].isValid()) {
QUuid parentUuid = propMap["parentID"].toUuid(); parentUuid = propMap["parentID"].toUuid();
if (propMap["parentJointIndex"].isValid() && parentUuid == DependencyManager::get<AvatarManager>()->getMyAvatar()->getSessionUUID()) { if (propMap["parentJointIndex"].isValid()) {
int jointIndex = propMap["parentJointIndes"].toInt(); parentJointIndex = propMap["parentJointIndex"].toInt();
if (jointIndex == CONTROLLER_LEFTHAND_INDEX || jointIndex == CAMERA_RELATIVE_CONTROLLER_LEFTHAND_INDEX) {
return PickQuery::JOINT_STATE_LEFT_HAND;
} else if (jointIndex == CONTROLLER_RIGHTHAND_INDEX || jointIndex == CAMERA_RELATIVE_CONTROLLER_RIGHTHAND_INDEX) {
return PickQuery::JOINT_STATE_RIGHT_HAND;
} else {
return PickQuery::JOINT_STATE_NONE;
}
} else {
return PickQuery::JOINT_STATE_NONE;
} }
} else if (propMap["joint"].isValid()) { } else if (propMap["joint"].isValid()) {
QString joint = propMap["joint"].toString(); QString joint = propMap["joint"].toString();
if (joint == "Mouse") { if (joint == "Mouse") {
return PickQuery::JOINT_STATE_MOUSE; pick->parentTransform = std::make_shared<MouseTransformNode>();
} else if (joint == "_CONTROLLER_LEFTHAND" || joint == "_CAMERA_RELATIVE_CONTROLLER_LEFTHAND") { pick->setJointState(PickQuery::JOINT_STATE_MOUSE);
return PickQuery::JOINT_STATE_LEFT_HAND; return;
} else if (joint== "_CONTROLLER_RIGHTHAND" || joint == "_CAMERA_RELATIVE_CONTROLLER_RIGHTHAND") { } else if (joint == "Avatar") {
return PickQuery::JOINT_STATE_RIGHT_HAND; pick->parentTransform = std::make_shared<MyAvatarHeadTransformNode>();
return;
} else { } else {
return PickQuery::JOINT_STATE_NONE; parentUuid = myAvatar->getSessionUUID();
parentJointIndex = myAvatar->getJointIndex(joint);
}
}
if (parentUuid == myAvatar->getSessionUUID()) {
if (parentJointIndex == CONTROLLER_LEFTHAND_INDEX || parentJointIndex == CAMERA_RELATIVE_CONTROLLER_LEFTHAND_INDEX) {
pick->setJointState(PickQuery::JOINT_STATE_LEFT_HAND);
} else if (parentJointIndex == CONTROLLER_RIGHTHAND_INDEX || parentJointIndex == CAMERA_RELATIVE_CONTROLLER_RIGHTHAND_INDEX) {
pick->setJointState(PickQuery::JOINT_STATE_RIGHT_HAND);
}
pick->parentTransform = std::make_shared<AvatarTransformNode>(myAvatar, parentJointIndex);
} else if (!parentUuid.isNull()) {
// Infer object type from parentID
// For now, assume a QUuid is a SpatiallyNestable. This should change when picks are converted over to QUuids.
bool success;
std::weak_ptr<SpatiallyNestable> nestablePointer = DependencyManager::get<SpatialParentFinder>()->find(parentUuid, success, nullptr);
auto sharedNestablePointer = nestablePointer.lock();
if (success && sharedNestablePointer) {
NestableType nestableType = sharedNestablePointer->getNestableType();
if (nestableType == NestableType::Avatar) {
pick->parentTransform = std::make_shared<AvatarTransformNode>(std::static_pointer_cast<Avatar>(sharedNestablePointer), parentJointIndex);
} else if (nestableType == NestableType::Overlay) {
pick->parentTransform = std::make_shared<OverlayTransformNode>(std::static_pointer_cast<Base3DOverlay>(sharedNestablePointer), parentJointIndex);
} else if (nestableType == NestableType::Entity) {
pick->parentTransform = std::make_shared<EntityTransformNode>(std::static_pointer_cast<EntityItem>(sharedNestablePointer), parentJointIndex);
} else {
pick->parentTransform = std::make_shared<NestableTransformNode>(nestablePointer, parentJointIndex);
}
} }
} else { } else {
return PickQuery::JOINT_STATE_NONE;
}
}
std::shared_ptr<TransformNode> PickScriptingInterface::createTransformNode(const QVariantMap& propMap) {
if (propMap["parentID"].isValid()) {
QUuid parentUuid = propMap["parentID"].toUuid();
if (!parentUuid.isNull()) {
// Infer object type from parentID
// For now, assume a QUuuid is a SpatiallyNestable. This should change when picks are converted over to QUuids.
bool success;
std::weak_ptr<SpatiallyNestable> nestablePointer = DependencyManager::get<SpatialParentFinder>()->find(parentUuid, success, nullptr);
int parentJointIndex = 0;
if (propMap["parentJointIndex"].isValid()) {
parentJointIndex = propMap["parentJointIndex"].toInt();
}
auto sharedNestablePointer = nestablePointer.lock();
if (success && sharedNestablePointer) {
NestableType nestableType = sharedNestablePointer->getNestableType();
if (nestableType == NestableType::Avatar) {
return std::make_shared<AvatarTransformNode>(std::static_pointer_cast<Avatar>(sharedNestablePointer), parentJointIndex);
} else if (nestableType == NestableType::Overlay) {
return std::make_shared<OverlayTransformNode>(std::static_pointer_cast<Base3DOverlay>(sharedNestablePointer), parentJointIndex);
} else if (nestableType == NestableType::Entity) {
return std::make_shared<EntityTransformNode>(std::static_pointer_cast<EntityItem>(sharedNestablePointer), parentJointIndex);
} else {
return std::make_shared<NestableTransformNode>(nestablePointer, parentJointIndex);
}
}
}
unsigned int pickID = propMap["parentID"].toUInt(); unsigned int pickID = propMap["parentID"].toUInt();
if (pickID != 0) {
return std::make_shared<PickTransformNode>(pickID);
}
}
if (propMap["joint"].isValid()) {
QString joint = propMap["joint"].toString();
if (joint == "Mouse") {
return std::make_shared<MouseTransformNode>();
} else if (joint == "Avatar") {
return std::make_shared<MyAvatarHeadTransformNode>();
} else if (!joint.isNull()) {
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
int jointIndex = myAvatar->getJointIndex(joint);
return std::make_shared<AvatarTransformNode>(myAvatar, jointIndex);
}
}
return std::shared_ptr<TransformNode>(); if (pickID != 0) {
pick->parentTransform = std::make_shared<PickTransformNode>(pickID);
}
}
} }

View file

@ -320,8 +320,7 @@ public slots:
static constexpr unsigned int INTERSECTED_HUD() { return IntersectionType::HUD; } static constexpr unsigned int INTERSECTED_HUD() { return IntersectionType::HUD; }
protected: protected:
static PickQuery::JointState getPickJointState(const QVariantMap& propMap); static void setParentTransform(std::shared_ptr<PickQuery> pick, const QVariantMap& propMap);
static std::shared_ptr<TransformNode> createTransformNode(const QVariantMap& propMap);
}; };
#endif // hifi_PickScriptingInterface_h #endif // hifi_PickScriptingInterface_h