From 8d9eeb3897f532cf5c7cf483fa597af47ae85234 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 30 Nov 2015 18:04:34 -0800 Subject: [PATCH 1/6] Have separate left/right hold action offset --- interface/src/avatar/AvatarActionHold.cpp | 151 ++++++++++------------ interface/src/avatar/AvatarActionHold.h | 12 +- interface/src/avatar/AvatarManager.cpp | 2 +- 3 files changed, 73 insertions(+), 92 deletions(-) diff --git a/interface/src/avatar/AvatarActionHold.cpp b/interface/src/avatar/AvatarActionHold.cpp index a30ba35e4a..bff6af7337 100644 --- a/interface/src/avatar/AvatarActionHold.cpp +++ b/interface/src/avatar/AvatarActionHold.cpp @@ -33,63 +33,46 @@ AvatarActionHold::~AvatarActionHold() { } std::shared_ptr AvatarActionHold::getTarget(glm::quat& rotation, glm::vec3& position) { - std::shared_ptr holdingAvatar = nullptr; + auto avatarManager = DependencyManager::get(); + auto holdingAvatar = std::static_pointer_cast(avatarManager->getAvatarBySessionID(_holderID)); + + if (!holdingAvatar) { + return holdingAvatar; + } withTryReadLock([&]{ - QSharedPointer avatarManager = DependencyManager::get(); - AvatarSharedPointer holdingAvatarData = avatarManager->getAvatarBySessionID(_holderID); - holdingAvatar = std::static_pointer_cast(holdingAvatarData); - - if (holdingAvatar) { - bool isRightHand = (_hand == "right"); - glm::vec3 palmPosition { Vectors::ZERO }; - glm::quat palmRotation { Quaternions::IDENTITY }; - - - static const glm::quat yFlip = glm::angleAxis(PI, Vectors::UNIT_Y); - if (_ignoreIK && holdingAvatar->isMyAvatar()) { - // We cannot ignore other avatars IK and this is not the point of this option - // This is meant to make the grabbing behavior more reactive. - if (isRightHand) { - palmPosition = holdingAvatar->getHand()->getCopyOfPalmData(HandData::RightHand).getPosition(); - palmRotation = holdingAvatar->getHand()->getCopyOfPalmData(HandData::RightHand).getRotation(); - } else { - palmPosition = holdingAvatar->getHand()->getCopyOfPalmData(HandData::LeftHand).getPosition(); - palmRotation = holdingAvatar->getHand()->getCopyOfPalmData(HandData::LeftHand).getRotation(); - palmRotation *= yFlip; // Match right hand frame of reference - } - } else { - if (isRightHand) { - palmPosition = holdingAvatar->getRightPalmPosition(); - palmRotation = holdingAvatar->getRightPalmRotation(); - } else { - palmPosition = holdingAvatar->getLeftPalmPosition(); - palmRotation = holdingAvatar->getLeftPalmRotation(); - palmRotation *= yFlip; // Match right hand frame of reference - } - } - - rotation = palmRotation * _relativeRotation; - position = palmPosition + rotation * _relativePosition; + bool isRightHand = (_hand == "right"); + glm::vec3 palmPosition { Vectors::ZERO }; + glm::quat palmRotation { Quaternions::IDENTITY }; + if (_ignoreIK && holdingAvatar->isMyAvatar()) { + // We cannot ignore other avatars IK and this is not the point of this option + // This is meant to make the grabbing behavior more reactive. if (isRightHand) { - rotation *= _perHandRelativeRotation; - position += rotation * _perHandRelativePosition; + palmPosition = holdingAvatar->getHand()->getCopyOfPalmData(HandData::RightHand).getPosition(); + palmRotation = holdingAvatar->getHand()->getCopyOfPalmData(HandData::RightHand).getRotation(); } else { - auto mirroredRotation = _perHandRelativeRotation; - auto mirroredPosition = _perHandRelativePosition; - - // Mirror along z axis - auto eulerAngles = safeEulerAngles(mirroredRotation); - eulerAngles.x *= -1; - eulerAngles.y *= -1; - mirroredRotation = glm::quat(eulerAngles); - - mirroredPosition.z *= -1; - - rotation *= mirroredRotation; - position += rotation * mirroredPosition; + palmPosition = holdingAvatar->getHand()->getCopyOfPalmData(HandData::LeftHand).getPosition(); + palmRotation = holdingAvatar->getHand()->getCopyOfPalmData(HandData::LeftHand).getRotation(); } + } else { + if (isRightHand) { + palmPosition = holdingAvatar->getRightPalmPosition(); + palmRotation = holdingAvatar->getRightPalmRotation(); + } else { + palmPosition = holdingAvatar->getLeftPalmPosition(); + palmRotation = holdingAvatar->getLeftPalmRotation(); + } + } + + if (isRightHand) { + rotation = palmRotation * _rightRelativeRotation; + position = palmPosition + rotation * _rightRelativePosition; + } else { + static const glm::quat yFlip = glm::angleAxis(PI, Vectors::UNIT_Y); + palmRotation *= yFlip; // Match right hand frame of reference + rotation = palmRotation * _leftRelativeRotation; + position = palmPosition + rotation * _leftRelativePosition; } }); @@ -192,10 +175,10 @@ void AvatarActionHold::doKinematicUpdate(float deltaTimeStep) { } bool AvatarActionHold::updateArguments(QVariantMap arguments) { - glm::vec3 relativePosition; - glm::quat relativeRotation; - glm::vec3 perHandRelativePosition; - glm::quat perHandRelativeRotation; + glm::vec3 leftRelativePosition; + glm::quat leftRelativeRotation; + glm::vec3 rightRelativePosition; + glm::quat rightRelativeRotation; float timeScale; QString hand; QUuid holderID; @@ -207,29 +190,27 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) { bool somethingChanged = ObjectAction::updateArguments(arguments); withReadLock([&]{ bool ok = true; - relativePosition = EntityActionInterface::extractVec3Argument("hold", arguments, "relativePosition", ok, false); + leftRelativePosition = EntityActionInterface::extractVec3Argument("hold", arguments, "leftRelativePosition", ok, false); if (!ok) { - relativePosition = _relativePosition; + leftRelativePosition = _leftRelativePosition; } ok = true; - relativeRotation = EntityActionInterface::extractQuatArgument("hold", arguments, "relativeRotation", ok, false); + leftRelativeRotation = EntityActionInterface::extractQuatArgument("hold", arguments, "leftRelativeRotation", ok, false); if (!ok) { - relativeRotation = _relativeRotation; + leftRelativeRotation = _leftRelativeRotation; } ok = true; - perHandRelativePosition = EntityActionInterface::extractVec3Argument("hold", arguments, - "perHandRelativePosition", ok, false); + rightRelativePosition = EntityActionInterface::extractVec3Argument("hold", arguments, "rightRelativePosition", ok, false); if (!ok) { - perHandRelativePosition = _perHandRelativePosition; + rightRelativePosition = _rightRelativePosition; } ok = true; - perHandRelativeRotation = EntityActionInterface::extractQuatArgument("hold", arguments, - "perHandRelativeRotation", ok, false); + rightRelativeRotation = EntityActionInterface::extractQuatArgument("hold", arguments, "rightRelativeRotation", ok, false); if (!ok) { - perHandRelativeRotation = _perHandRelativeRotation; + rightRelativeRotation = _rightRelativeRotation; } ok = true; @@ -268,10 +249,10 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) { } if (somethingChanged || - relativePosition != _relativePosition || - relativeRotation != _relativeRotation || - perHandRelativePosition != _perHandRelativePosition || - perHandRelativeRotation != _perHandRelativeRotation || + leftRelativePosition != _leftRelativePosition || + leftRelativeRotation != _leftRelativeRotation || + rightRelativePosition != _rightRelativePosition || + rightRelativeRotation != _rightRelativeRotation || timeScale != _linearTimeScale || hand != _hand || holderID != _holderID || @@ -284,10 +265,10 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) { if (needUpdate) { withWriteLock([&] { - _relativePosition = relativePosition; - _relativeRotation = relativeRotation; - _perHandRelativePosition = perHandRelativePosition; - _perHandRelativeRotation = perHandRelativeRotation; + _leftRelativePosition = leftRelativePosition; + _leftRelativeRotation = leftRelativeRotation; + _rightRelativePosition = rightRelativePosition; + _rightRelativeRotation = rightRelativeRotation; const float MIN_TIMESCALE = 0.1f; _linearTimeScale = glm::max(MIN_TIMESCALE, timeScale); _angularTimeScale = _linearTimeScale; @@ -314,10 +295,10 @@ QVariantMap AvatarActionHold::getArguments() { QVariantMap arguments = ObjectAction::getArguments(); withReadLock([&]{ arguments["holderID"] = _holderID; - arguments["relativePosition"] = glmToQMap(_relativePosition); - arguments["relativeRotation"] = glmToQMap(_relativeRotation); - arguments["perHandRelativePosition"] = glmToQMap(_perHandRelativePosition); - arguments["perHandRelativeRotation"] = glmToQMap(_perHandRelativeRotation); + arguments["leftRelativePosition"] = glmToQMap(_leftRelativePosition); + arguments["leftRelativeRotation"] = glmToQMap(_leftRelativeRotation); + arguments["rightRelativePosition"] = glmToQMap(_rightRelativePosition); + arguments["rightRelativeRotation"] = glmToQMap(_rightRelativeRotation); arguments["timeScale"] = _linearTimeScale; arguments["hand"] = _hand; arguments["kinematic"] = _kinematic; @@ -337,10 +318,10 @@ QByteArray AvatarActionHold::serialize() const { dataStream << AvatarActionHold::holdVersion; dataStream << _holderID; - dataStream << _relativePosition; - dataStream << _relativeRotation; - dataStream << _perHandRelativePosition; - dataStream << _perHandRelativeRotation; + dataStream << _leftRelativePosition; + dataStream << _leftRelativeRotation; + dataStream << _rightRelativePosition; + dataStream << _rightRelativeRotation; dataStream << _linearTimeScale; dataStream << _hand; @@ -372,10 +353,10 @@ void AvatarActionHold::deserialize(QByteArray serializedArguments) { withWriteLock([&]{ dataStream >> _holderID; - dataStream >> _relativePosition; - dataStream >> _relativeRotation; - dataStream >> _perHandRelativePosition; - dataStream >> _perHandRelativeRotation; + dataStream >> _leftRelativePosition; + dataStream >> _leftRelativeRotation; + dataStream >> _rightRelativePosition; + dataStream >> _rightRelativeRotation; dataStream >> _linearTimeScale; _angularTimeScale = _linearTimeScale; dataStream >> _hand; diff --git a/interface/src/avatar/AvatarActionHold.h b/interface/src/avatar/AvatarActionHold.h index c9563e5e88..d3aad19384 100644 --- a/interface/src/avatar/AvatarActionHold.h +++ b/interface/src/avatar/AvatarActionHold.h @@ -41,12 +41,12 @@ private: static const uint16_t holdVersion; void doKinematicUpdate(float deltaTimeStep); - - glm::vec3 _relativePosition { 0.0f }; - glm::quat _relativeRotation; - glm::vec3 _perHandRelativePosition { 0.0f }; - glm::quat _perHandRelativeRotation; - + + glm::vec3 _leftRelativePosition{ Vectors::ZERO }; + glm::quat _leftRelativeRotation{ Quaternions::IDENTITY }; + glm::vec3 _rightRelativePosition{ Vectors::ZERO }; + glm::quat _rightRelativeRotation{ Quaternions::IDENTITY }; + QString _hand { "right" }; QUuid _holderID; diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 9df597109c..9fc6855d3b 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -402,7 +402,7 @@ void AvatarManager::updateAvatarRenderStatus(bool shouldRenderAvatars) { AvatarSharedPointer AvatarManager::getAvatarBySessionID(const QUuid& sessionID) { if (sessionID == _myAvatar->getSessionUUID()) { - return std::static_pointer_cast(_myAvatar); + return _myAvatar; } return findAvatar(sessionID); From 4025504749b5d02a02fc590bca99be5c55d6bb69 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 30 Nov 2015 18:21:14 -0800 Subject: [PATCH 2/6] Fix merge error --- libraries/audio/src/Sound.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/libraries/audio/src/Sound.h b/libraries/audio/src/Sound.h index 742d26b500..5447ca6213 100644 --- a/libraries/audio/src/Sound.h +++ b/libraries/audio/src/Sound.h @@ -30,9 +30,6 @@ public: const QByteArray& getByteArray() { return _byteArray; } -signals: - void ready(); - signals: void ready(); From 70dd8ec19a518da29f384a6fa1a3264b733fbe05 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 1 Dec 2015 11:44:42 -0800 Subject: [PATCH 3/6] Remove left/right relative pos/rot from c++ --- interface/src/avatar/AvatarActionHold.cpp | 76 ++++++------------- interface/src/avatar/AvatarActionHold.h | 9 +-- .../networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 1 - 4 files changed, 26 insertions(+), 62 deletions(-) diff --git a/interface/src/avatar/AvatarActionHold.cpp b/interface/src/avatar/AvatarActionHold.cpp index bff6af7337..8a59f91bc8 100644 --- a/interface/src/avatar/AvatarActionHold.cpp +++ b/interface/src/avatar/AvatarActionHold.cpp @@ -65,15 +65,13 @@ std::shared_ptr AvatarActionHold::getTarget(glm::quat& rotation, glm::ve } } - if (isRightHand) { - rotation = palmRotation * _rightRelativeRotation; - position = palmPosition + rotation * _rightRelativePosition; - } else { + if (!isRightHand) { static const glm::quat yFlip = glm::angleAxis(PI, Vectors::UNIT_Y); palmRotation *= yFlip; // Match right hand frame of reference - rotation = palmRotation * _leftRelativeRotation; - position = palmPosition + rotation * _leftRelativePosition; } + + rotation = palmRotation * _relativeRotation; + position = palmPosition + rotation * _relativePosition; }); return holdingAvatar; @@ -175,10 +173,8 @@ void AvatarActionHold::doKinematicUpdate(float deltaTimeStep) { } bool AvatarActionHold::updateArguments(QVariantMap arguments) { - glm::vec3 leftRelativePosition; - glm::quat leftRelativeRotation; - glm::vec3 rightRelativePosition; - glm::quat rightRelativeRotation; + glm::vec3 relativePosition; + glm::quat relativeRotation; float timeScale; QString hand; QUuid holderID; @@ -190,27 +186,15 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) { bool somethingChanged = ObjectAction::updateArguments(arguments); withReadLock([&]{ bool ok = true; - leftRelativePosition = EntityActionInterface::extractVec3Argument("hold", arguments, "leftRelativePosition", ok, false); + relativePosition = EntityActionInterface::extractVec3Argument("hold", arguments, "relativePosition", ok, false); if (!ok) { - leftRelativePosition = _leftRelativePosition; + relativePosition = _relativePosition; } - + ok = true; - leftRelativeRotation = EntityActionInterface::extractQuatArgument("hold", arguments, "leftRelativeRotation", ok, false); + relativeRotation = EntityActionInterface::extractQuatArgument("hold", arguments, "relativeRotation", ok, false); if (!ok) { - leftRelativeRotation = _leftRelativeRotation; - } - - ok = true; - rightRelativePosition = EntityActionInterface::extractVec3Argument("hold", arguments, "rightRelativePosition", ok, false); - if (!ok) { - rightRelativePosition = _rightRelativePosition; - } - - ok = true; - rightRelativeRotation = EntityActionInterface::extractQuatArgument("hold", arguments, "rightRelativeRotation", ok, false); - if (!ok) { - rightRelativeRotation = _rightRelativeRotation; + relativeRotation = _relativeRotation; } ok = true; @@ -234,25 +218,17 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) { if (!ok) { _kinematic = false; } - + ok = true; kinematicSetVelocity = EntityActionInterface::extractBooleanArgument("hold", arguments, "kinematicSetVelocity", ok, false); if (!ok) { _kinematicSetVelocity = false; } - - ok = true; - ignoreIK = EntityActionInterface::extractBooleanArgument("hold", arguments, "ignoreIK", ok, false); - if (!ok) { - _ignoreIK = true; - } if (somethingChanged || - leftRelativePosition != _leftRelativePosition || - leftRelativeRotation != _leftRelativeRotation || - rightRelativePosition != _rightRelativePosition || - rightRelativeRotation != _rightRelativeRotation || + relativePosition != _relativePosition || + relativeRotation != _relativeRotation || timeScale != _linearTimeScale || hand != _hand || holderID != _holderID || @@ -265,10 +241,8 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) { if (needUpdate) { withWriteLock([&] { - _leftRelativePosition = leftRelativePosition; - _leftRelativeRotation = leftRelativeRotation; - _rightRelativePosition = rightRelativePosition; - _rightRelativeRotation = rightRelativeRotation; + _relativePosition = relativePosition; + _relativeRotation = relativeRotation; const float MIN_TIMESCALE = 0.1f; _linearTimeScale = glm::max(MIN_TIMESCALE, timeScale); _angularTimeScale = _linearTimeScale; @@ -295,10 +269,8 @@ QVariantMap AvatarActionHold::getArguments() { QVariantMap arguments = ObjectAction::getArguments(); withReadLock([&]{ arguments["holderID"] = _holderID; - arguments["leftRelativePosition"] = glmToQMap(_leftRelativePosition); - arguments["leftRelativeRotation"] = glmToQMap(_leftRelativeRotation); - arguments["rightRelativePosition"] = glmToQMap(_rightRelativePosition); - arguments["rightRelativeRotation"] = glmToQMap(_rightRelativeRotation); + arguments["relativePosition"] = glmToQMap(_relativePosition); + arguments["relativeRotation"] = glmToQMap(_relativeRotation); arguments["timeScale"] = _linearTimeScale; arguments["hand"] = _hand; arguments["kinematic"] = _kinematic; @@ -318,10 +290,8 @@ QByteArray AvatarActionHold::serialize() const { dataStream << AvatarActionHold::holdVersion; dataStream << _holderID; - dataStream << _leftRelativePosition; - dataStream << _leftRelativeRotation; - dataStream << _rightRelativePosition; - dataStream << _rightRelativeRotation; + dataStream << _relativePosition; + dataStream << _relativeRotation; dataStream << _linearTimeScale; dataStream << _hand; @@ -353,10 +323,8 @@ void AvatarActionHold::deserialize(QByteArray serializedArguments) { withWriteLock([&]{ dataStream >> _holderID; - dataStream >> _leftRelativePosition; - dataStream >> _leftRelativeRotation; - dataStream >> _rightRelativePosition; - dataStream >> _rightRelativeRotation; + dataStream >> _relativePosition; + dataStream >> _relativeRotation; dataStream >> _linearTimeScale; _angularTimeScale = _linearTimeScale; dataStream >> _hand; diff --git a/interface/src/avatar/AvatarActionHold.h b/interface/src/avatar/AvatarActionHold.h index d3aad19384..8a6948dde2 100644 --- a/interface/src/avatar/AvatarActionHold.h +++ b/interface/src/avatar/AvatarActionHold.h @@ -38,15 +38,12 @@ public: std::shared_ptr getTarget(glm::quat& rotation, glm::vec3& position); private: - static const uint16_t holdVersion; - void doKinematicUpdate(float deltaTimeStep); - glm::vec3 _leftRelativePosition{ Vectors::ZERO }; - glm::quat _leftRelativeRotation{ Quaternions::IDENTITY }; - glm::vec3 _rightRelativePosition{ Vectors::ZERO }; - glm::quat _rightRelativeRotation{ Quaternions::IDENTITY }; + static const uint16_t holdVersion; + glm::vec3 _relativePosition { Vectors::ZERO }; + glm::quat _relativeRotation { Quaternions::IDENTITY }; QString _hand { "right" }; QUuid _holderID; diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 7bb3a1e46f..2f685b7e08 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -41,7 +41,7 @@ PacketVersion versionForPacketType(PacketType packetType) { case PacketType::EntityAdd: case PacketType::EntityEdit: case PacketType::EntityData: - return VERSION_ENTITIES_ACTIONS_PER_HAND_OFFSET; + return VERSION_ENTITIES_POLYLINE_TEXTURE; case PacketType::AvatarData: case PacketType::BulkAvatarData: default: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 5610d31661..23df89b3d7 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -160,6 +160,5 @@ const PacketVersion VERSION_ENTITIES_KEYLIGHT_PROPERTIES_GROUP = 47; const PacketVersion VERSION_ENTITIES_KEYLIGHT_PROPERTIES_GROUP_BIS = 48; const PacketVersion VERSION_ENTITIES_PARTICLES_ADDITIVE_BLENDING = 49; const PacketVersion VERSION_ENTITIES_POLYLINE_TEXTURE = 50; -const PacketVersion VERSION_ENTITIES_ACTIONS_PER_HAND_OFFSET = 51; #endif // hifi_PacketHeaders_h From 97454ae4466dc60faf86774ca4b417fee866b6b8 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 1 Dec 2015 12:10:49 -0800 Subject: [PATCH 4/6] Update handControllerGrab.js --- examples/controllers/handControllerGrab.js | 68 +++++++++++----------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/examples/controllers/handControllerGrab.js b/examples/controllers/handControllerGrab.js index 0812dc8980..fca668c5e0 100644 --- a/examples/controllers/handControllerGrab.js +++ b/examples/controllers/handControllerGrab.js @@ -200,6 +200,34 @@ function entityIsGrabbedByOther(entityID) { return false; } +function getSpatialOffsetPosition(hand, spatialKey) { + if (hand !== RIGHT_HAND && spatialKey.leftRelativePosition) { + return spatialKey.leftRelativePosition; + } + if (hand === RIGHT_HAND && spatialKey.rightRelativePosition) { + return spatialKey.rightRelativePosition; + } + if (spatialKey.relativePosition) { + return spatialKey.relativePosition; + } + + return Vec3.ZERO; +} + +function getSpatialOffsetRotation(hand, spatialKey) { + if (hand !== RIGHT_HAND && spatialKey.leftRelativeRotation) { + return spatialKey.leftRelativeRotation; + } + if (hand === RIGHT_HAND && spatialKey.rightRelativeRotation) { + return spatialKey.rightRelativeRotation; + } + if (spatialKey.relativeRotation) { + return spatialKey.relativeRotation; + } + + return Quat.IDENTITY; +} + function MyController(hand) { this.hand = hand; if (this.hand === RIGHT_HAND) { @@ -223,17 +251,8 @@ function MyController(hand) { this.rawTriggerValue = 0; this.rawBumperValue = 0; - this.offsetPosition = { - x: 0.0, - y: 0.0, - z: 0.0 - }; - this.offsetRotation = { - x: 0.0, - y: 0.0, - z: 0.0, - w: 1.0 - }; + this.offsetPosition = Vec3.ZERO; + this.offsetRotation = Quat.IDENTITY; var _this = this; @@ -767,12 +786,8 @@ function MyController(hand) { if (this.state != STATE_NEAR_GRABBING && grabbableData.spatialKey) { // if an object is "equipped" and has a spatialKey, use it. - if (grabbableData.spatialKey.relativePosition) { - this.offsetPosition = grabbableData.spatialKey.relativePosition; - } - if (grabbableData.spatialKey.relativeRotation) { - this.offsetRotation = grabbableData.spatialKey.relativeRotation; - } + this.offsetPosition = getSpatialOffsetPosition(this.hand, grabbableData.spatialKey); + this.offsetRotation = getSpatialOffsetRotation(this.hand, grabbableData.spatialKey); } else { var objectRotation = grabbedProperties.rotation; this.offsetRotation = Quat.multiply(Quat.inverse(handRotation), objectRotation); @@ -895,23 +910,8 @@ function MyController(hand) { var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA); // use a spring to pull the object to where it will be when equipped - var relativeRotation = { - x: 0.0, - y: 0.0, - z: 0.0, - w: 1.0 - }; - var relativePosition = { - x: 0.0, - y: 0.0, - z: 0.0 - }; - if (grabbableData.spatialKey.relativePosition) { - relativePosition = grabbableData.spatialKey.relativePosition; - } - if (grabbableData.spatialKey.relativeRotation) { - relativeRotation = grabbableData.spatialKey.relativeRotation; - } + var relativeRotation = getSpatialOffsetRotation(this.hand, grabbableData.spatialKey); + var relativePosition = getSpatialOffsetPosition(this.hand, grabbableData.spatialKey); var handRotation = this.getHandRotation(); var handPosition = this.getHandPosition(); var targetRotation = Quat.multiply(handRotation, relativeRotation); From e6763c2208f1fc404f7a0fd7e137d0920e764bc7 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 1 Dec 2015 15:03:25 -0800 Subject: [PATCH 5/6] Update bow's relative position --- examples/toybox/bow/bow.js | 13 +++++++++---- examples/toybox/bow/createBow.js | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/examples/toybox/bow/bow.js b/examples/toybox/bow/bow.js index 14e3ed86ec..90199fb70f 100644 --- a/examples/toybox/bow/bow.js +++ b/examples/toybox/bow/bow.js @@ -67,12 +67,17 @@ } var BOW_SPATIAL_KEY = { - relativePosition: { - x: 0, + leftRelativePosition: { + x: 0.05, y: 0.06, - z: 0.11 + z: -0.05 }, - relativeRotation: Quat.fromPitchYawRollDegrees(0, -90, 90) + rightRelativePosition: { + x: -0.05, + y: 0.06, + z: -0.05 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(0, 90, -90) } diff --git a/examples/toybox/bow/createBow.js b/examples/toybox/bow/createBow.js index 880b0920e8..9a9ed98c20 100644 --- a/examples/toybox/bow/createBow.js +++ b/examples/toybox/bow/createBow.js @@ -48,12 +48,17 @@ var bow = Entities.addEntity({ grabbableKey: { invertSolidWhileHeld: true, spatialKey: { - relativePosition: { - x: 0, + leftRelativePosition: { + x: 0.05, y: 0.06, - z: 0.11 + z: -0.05 }, - relativeRotation: Quat.fromPitchYawRollDegrees(0, -90, 90) + rightRelativePosition: { + x: -0.05, + y: 0.06, + z: -0.05 + }, + relativeRotation: Quat.fromPitchYawRollDegrees(0, 90, -90) } } }) From 0b93e637e8be2bf18f720d1f6032547eee0dd16e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 1 Dec 2015 15:13:46 -0800 Subject: [PATCH 6/6] Update bat rotation --- examples/baseball/createBatButton.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/baseball/createBatButton.js b/examples/baseball/createBatButton.js index 75f3dee26e..bbd2bea9f2 100644 --- a/examples/baseball/createBatButton.js +++ b/examples/baseball/createBatButton.js @@ -51,10 +51,9 @@ var batUserData = { grabbableKey: { spatialKey: { - relativePosition: { x: 0.9, y: 0, z: 0 }, - relativeRotation: Quat.fromPitchYawRollDegrees(0, 0, 45), - perHandRelativePosition: { x: 0.0, y: -0.05, z: -0.04 }, - perHandRelativeRotation: Quat.fromPitchYawRollDegrees(0, 0, 0) + leftRelativePosition: { x: 0.9, y: 0.05, z: -0.05 }, + rightRelativePosition: { x: 0.9, y: 0.05, z: 0.05 }, + relativeRotation: Quat.fromPitchYawRollDegrees(0, 0, 45) } } }