From 7f69bdecb2829641d7fc55a0d8cbf6d0d4b2e2cc Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 1 May 2017 07:06:21 -0700 Subject: [PATCH] first try at angular-velocity setting action --- interface/src/InterfaceDynamicFactory.cpp | 3 ++ .../entities/src/EntityDynamicInterface.cpp | 5 +++ .../entities/src/EntityDynamicInterface.h | 3 +- libraries/physics/src/ObjectActionSpring.cpp | 35 ------------------- libraries/physics/src/ObjectActionSpring.h | 4 --- libraries/physics/src/ObjectDynamic.cpp | 35 +++++++++++++++++++ libraries/physics/src/ObjectDynamic.h | 4 +++ 7 files changed, 49 insertions(+), 40 deletions(-) diff --git a/interface/src/InterfaceDynamicFactory.cpp b/interface/src/InterfaceDynamicFactory.cpp index 5acc0700c0..4b9e3b96ed 100644 --- a/interface/src/InterfaceDynamicFactory.cpp +++ b/interface/src/InterfaceDynamicFactory.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include "InterfaceDynamicFactory.h" @@ -47,6 +48,8 @@ EntityDynamicPointer interfaceDynamicFactory(EntityDynamicType type, const QUuid return std::make_shared(id, ownerEntity); case DYNAMIC_TYPE_CONE_TWIST: return std::make_shared(id, ownerEntity); + case DYNAMIC_TYPE_MOTOR: + return std::make_shared(id, ownerEntity); } qDebug() << "Unknown entity dynamic type"; diff --git a/libraries/entities/src/EntityDynamicInterface.cpp b/libraries/entities/src/EntityDynamicInterface.cpp index 57f86105b2..71b3bda534 100644 --- a/libraries/entities/src/EntityDynamicInterface.cpp +++ b/libraries/entities/src/EntityDynamicInterface.cpp @@ -126,6 +126,9 @@ EntityDynamicType EntityDynamicInterface::dynamicTypeFromString(QString dynamicT if (normalizedDynamicTypeString == "conetwist") { return DYNAMIC_TYPE_CONE_TWIST; } + if (normalizedDynamicTypeString == "motor") { + return DYNAMIC_TYPE_MOTOR; + } qCDebug(entities) << "Warning -- EntityDynamicInterface::dynamicTypeFromString got unknown dynamic-type name" << dynamicTypeString; @@ -154,6 +157,8 @@ QString EntityDynamicInterface::dynamicTypeToString(EntityDynamicType dynamicTyp return "ball-socket"; case DYNAMIC_TYPE_CONE_TWIST: return "cone-twist"; + case DYNAMIC_TYPE_MOTOR: + return "motor"; } assert(false); return "none"; diff --git a/libraries/entities/src/EntityDynamicInterface.h b/libraries/entities/src/EntityDynamicInterface.h index c04aaf67b2..536389ef2d 100644 --- a/libraries/entities/src/EntityDynamicInterface.h +++ b/libraries/entities/src/EntityDynamicInterface.h @@ -34,7 +34,8 @@ enum EntityDynamicType { DYNAMIC_TYPE_FAR_GRAB = 6000, DYNAMIC_TYPE_SLIDER = 7000, DYNAMIC_TYPE_BALL_SOCKET = 8000, - DYNAMIC_TYPE_CONE_TWIST = 9000 + DYNAMIC_TYPE_CONE_TWIST = 9000, + DYNAMIC_TYPE_MOTOR = 10000 }; diff --git a/libraries/physics/src/ObjectActionSpring.cpp b/libraries/physics/src/ObjectActionSpring.cpp index 3cd3926073..04bc53de83 100644 --- a/libraries/physics/src/ObjectActionSpring.cpp +++ b/libraries/physics/src/ObjectActionSpring.cpp @@ -42,41 +42,6 @@ ObjectActionSpring::~ObjectActionSpring() { #endif } -SpatiallyNestablePointer ObjectActionSpring::getOther() { - SpatiallyNestablePointer other; - withWriteLock([&]{ - if (_otherID == QUuid()) { - // no other - return; - } - other = _other.lock(); - if (other && other->getID() == _otherID) { - // other is already up-to-date - return; - } - if (other) { - // we have a pointer to other, but it's wrong - other.reset(); - _other.reset(); - } - // we have an other-id but no pointer to other cached - QSharedPointer parentFinder = DependencyManager::get(); - if (!parentFinder) { - return; - } - EntityItemPointer ownerEntity = _ownerEntity.lock(); - if (!ownerEntity) { - return; - } - bool success; - _other = parentFinder->find(_otherID, success, ownerEntity->getParentTree()); - if (success) { - other = _other.lock(); - } - }); - return other; -} - bool ObjectActionSpring::getTarget(float deltaTimeStep, glm::quat& rotation, glm::vec3& position, glm::vec3& linearVelocity, glm::vec3& angularVelocity, float& linearTimeScale, float& angularTimeScale) { diff --git a/libraries/physics/src/ObjectActionSpring.h b/libraries/physics/src/ObjectActionSpring.h index 8f810d7956..83a65b36b4 100644 --- a/libraries/physics/src/ObjectActionSpring.h +++ b/libraries/physics/src/ObjectActionSpring.h @@ -47,10 +47,6 @@ protected: glm::vec3 _linearVelocityTarget; glm::vec3 _angularVelocityTarget; - EntityItemID _otherID; - SpatiallyNestableWeakPointer _other; - SpatiallyNestablePointer getOther(); - virtual bool prepareForSpringUpdate(btScalar deltaTimeStep); void serializeParameters(QDataStream& dataStream) const; diff --git a/libraries/physics/src/ObjectDynamic.cpp b/libraries/physics/src/ObjectDynamic.cpp index 3cb9f5b405..c11817041e 100644 --- a/libraries/physics/src/ObjectDynamic.cpp +++ b/libraries/physics/src/ObjectDynamic.cpp @@ -274,3 +274,38 @@ QList ObjectDynamic::getRigidBodies() { result += getRigidBody(); return result; } + +SpatiallyNestablePointer ObjectDynamic::getOther() { + SpatiallyNestablePointer other; + withWriteLock([&]{ + if (_otherID == QUuid()) { + // no other + return; + } + other = _other.lock(); + if (other && other->getID() == _otherID) { + // other is already up-to-date + return; + } + if (other) { + // we have a pointer to other, but it's wrong + other.reset(); + _other.reset(); + } + // we have an other-id but no pointer to other cached + QSharedPointer parentFinder = DependencyManager::get(); + if (!parentFinder) { + return; + } + EntityItemPointer ownerEntity = _ownerEntity.lock(); + if (!ownerEntity) { + return; + } + bool success; + _other = parentFinder->find(_otherID, success, ownerEntity->getParentTree()); + if (success) { + other = _other.lock(); + } + }); + return other; +} diff --git a/libraries/physics/src/ObjectDynamic.h b/libraries/physics/src/ObjectDynamic.h index dcd0103a55..3843647de8 100644 --- a/libraries/physics/src/ObjectDynamic.h +++ b/libraries/physics/src/ObjectDynamic.h @@ -67,6 +67,10 @@ protected: QString _tag; quint64 _expires { 0 }; // in seconds since epoch + EntityItemID _otherID; + SpatiallyNestableWeakPointer _other; + SpatiallyNestablePointer getOther(); + private: qint64 getEntityServerClockSkew() const; };