hinge is sort-of working

This commit is contained in:
Seth Alves 2017-04-12 07:12:05 -07:00
parent 2b0315645c
commit cc77fce95f
5 changed files with 22 additions and 16 deletions

View file

@ -323,7 +323,7 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) {
bool ignoreIK; bool ignoreIK;
bool needUpdate = false; bool needUpdate = false;
bool somethingChanged = ObjectAction::updateArguments(arguments); bool somethingChanged = ObjectDynamic::updateArguments(arguments);
withReadLock([&]{ withReadLock([&]{
bool ok = true; bool ok = true;
relativePosition = EntityDynamicInterface::extractVec3Argument("hold", arguments, "relativePosition", ok, false); relativePosition = EntityDynamicInterface::extractVec3Argument("hold", arguments, "relativePosition", ok, false);
@ -410,7 +410,7 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) {
} }
QVariantMap AvatarActionHold::getArguments() { QVariantMap AvatarActionHold::getArguments() {
QVariantMap arguments = ObjectAction::getArguments(); QVariantMap arguments = ObjectDynamic::getArguments();
withReadLock([&]{ withReadLock([&]{
arguments["holderID"] = _holderID; arguments["holderID"] = _holderID;
arguments["relativePosition"] = glmToQMap(_relativePosition); arguments["relativePosition"] = glmToQMap(_relativePosition);

View file

@ -88,7 +88,7 @@ bool ObjectActionOffset::updateArguments(QVariantMap arguments) {
float linearDistance; float linearDistance;
bool needUpdate = false; bool needUpdate = false;
bool somethingChanged = ObjectAction::updateArguments(arguments); bool somethingChanged = ObjectDynamic::updateArguments(arguments);
withReadLock([&]{ withReadLock([&]{
bool ok = true; bool ok = true;
@ -143,7 +143,7 @@ bool ObjectActionOffset::updateArguments(QVariantMap arguments) {
} }
QVariantMap ObjectActionOffset::getArguments() { QVariantMap ObjectActionOffset::getArguments() {
QVariantMap arguments = ObjectAction::getArguments(); QVariantMap arguments = ObjectDynamic::getArguments();
withReadLock([&] { withReadLock([&] {
arguments["pointToOffsetFrom"] = glmToQMap(_pointToOffsetFrom); arguments["pointToOffsetFrom"] = glmToQMap(_pointToOffsetFrom);
arguments["linearTimeScale"] = _linearTimeScale; arguments["linearTimeScale"] = _linearTimeScale;

View file

@ -190,7 +190,7 @@ bool ObjectActionSpring::updateArguments(QVariantMap arguments) {
float angularTimeScale; float angularTimeScale;
bool needUpdate = false; bool needUpdate = false;
bool somethingChanged = ObjectAction::updateArguments(arguments); bool somethingChanged = ObjectDynamic::updateArguments(arguments);
withReadLock([&]{ withReadLock([&]{
// targets are required, spring-constants are optional // targets are required, spring-constants are optional
bool ok = true; bool ok = true;
@ -248,7 +248,7 @@ bool ObjectActionSpring::updateArguments(QVariantMap arguments) {
} }
QVariantMap ObjectActionSpring::getArguments() { QVariantMap ObjectActionSpring::getArguments() {
QVariantMap arguments = ObjectAction::getArguments(); QVariantMap arguments = ObjectDynamic::getArguments();
withReadLock([&] { withReadLock([&] {
arguments["linearTimeScale"] = _linearTimeScale; arguments["linearTimeScale"] = _linearTimeScale;
arguments["targetPosition"] = glmToQMap(_desiredPositionalTarget); arguments["targetPosition"] = glmToQMap(_desiredPositionalTarget);

View file

@ -106,7 +106,7 @@ bool ObjectActionTravelOriented::updateArguments(QVariantMap arguments) {
float angularTimeScale; float angularTimeScale;
bool needUpdate = false; bool needUpdate = false;
bool somethingChanged = ObjectAction::updateArguments(arguments); bool somethingChanged = ObjectDynamic::updateArguments(arguments);
withReadLock([&]{ withReadLock([&]{
bool ok = true; bool ok = true;
forward = EntityDynamicInterface::extractVec3Argument("travel oriented action", arguments, "forward", ok, true); forward = EntityDynamicInterface::extractVec3Argument("travel oriented action", arguments, "forward", ok, true);
@ -147,7 +147,7 @@ bool ObjectActionTravelOriented::updateArguments(QVariantMap arguments) {
} }
QVariantMap ObjectActionTravelOriented::getArguments() { QVariantMap ObjectActionTravelOriented::getArguments() {
QVariantMap arguments = ObjectAction::getArguments(); QVariantMap arguments = ObjectDynamic::getArguments();
withReadLock([&] { withReadLock([&] {
arguments["forward"] = glmToQMap(_forward); arguments["forward"] = glmToQMap(_forward);
arguments["angularTimeScale"] = _angularTimeScale; arguments["angularTimeScale"] = _angularTimeScale;

View file

@ -42,6 +42,7 @@ btTypedConstraint* ObjectConstraintHinge::getConstraint() {
btRigidBody* rigidBodyA = getRigidBody(); btRigidBody* rigidBodyA = getRigidBody();
if (!rigidBodyA) { if (!rigidBodyA) {
qCDebug(physics) << "ObjectConstraintHinge::getConstraint -- no rigidBodyA";
return nullptr; return nullptr;
} }
@ -49,8 +50,14 @@ btTypedConstraint* ObjectConstraintHinge::getConstraint() {
btTransform rigidBodyAFrame(glmToBullet(_rbARotation), glmToBullet(_rbATranslation)); btTransform rigidBodyAFrame(glmToBullet(_rbARotation), glmToBullet(_rbATranslation));
_constraint = new btHingeConstraint(*rigidBodyA, rigidBodyAFrame, useReferenceFrameA); btHingeConstraint* constraint = new btHingeConstraint(*rigidBodyA, rigidBodyAFrame, useReferenceFrameA);
return _constraint; _constraint = constraint;
// constraint->setAngularOnly(true);
btVector3 axisInA = glmToBullet(glm::vec3(0.0f, 1.0f, 0.0f));
constraint->setAxis(axisInA);
return constraint;
} }
@ -61,15 +68,14 @@ bool ObjectConstraintHinge::updateArguments(QVariantMap arguments) {
bool needUpdate = false; bool needUpdate = false;
bool somethingChanged = ObjectConstraint::updateArguments(arguments); bool somethingChanged = ObjectConstraint::updateArguments(arguments);
withReadLock([&]{ withReadLock([&]{
// targets are required, hinge-constants are optional
bool ok = true; bool ok = true;
rbATranslation = EntityDynamicInterface::extractVec3Argument("hinge constraint", arguments, "targetPosition", ok, false); rbATranslation = EntityDynamicInterface::extractVec3Argument("hinge constraint", arguments, "aTranslation", ok, false);
if (!ok) { if (!ok) {
rbATranslation = _rbATranslation; rbATranslation = _rbATranslation;
} }
ok = true; ok = true;
rbARotation = EntityDynamicInterface::extractQuatArgument("hinge constraint", arguments, "targetRotation", ok, false); rbARotation = EntityDynamicInterface::extractQuatArgument("hinge constraint", arguments, "aRotation", ok, false);
if (!ok) { if (!ok) {
rbARotation = _rbARotation; rbARotation = _rbARotation;
} }
@ -94,7 +100,7 @@ bool ObjectConstraintHinge::updateArguments(QVariantMap arguments) {
ownerEntity->setDynamicDataNeedsTransmit(true); ownerEntity->setDynamicDataNeedsTransmit(true);
} }
}); });
activateBody(); // activateBody();
} }
return true; return true;
@ -103,8 +109,8 @@ bool ObjectConstraintHinge::updateArguments(QVariantMap arguments) {
QVariantMap ObjectConstraintHinge::getArguments() { QVariantMap ObjectConstraintHinge::getArguments() {
QVariantMap arguments = ObjectConstraint::getArguments(); QVariantMap arguments = ObjectConstraint::getArguments();
withReadLock([&] { withReadLock([&] {
arguments["targetPosition"] = glmToQMap(_rbATranslation); arguments["aTranslation"] = glmToQMap(_rbATranslation);
arguments["targetRotation"] = glmToQMap(_rbARotation); arguments["aRotation"] = glmToQMap(_rbARotation);
}); });
return arguments; return arguments;
} }