Create TransformNodes for SpatiallyNestables, the mouse, and MyAvatar head

This commit is contained in:
sabrina-shanman 2018-08-23 14:05:44 -07:00
parent fcdbc6c6d2
commit 3167d3c0c7
7 changed files with 182 additions and 0 deletions

View file

@ -0,0 +1,23 @@
//
// Created by Sabrina Shanman 8/14/2018
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "MyAvatarHeadTransformNode.h"
#include "DependencyManager.h"
#include "AvatarManager.h"
#include "MyAvatar.h"
Transform MyAvatarHeadTransformNode::getTransform() {
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
glm::vec3 pos = myAvatar->getHeadPosition();
glm::quat headOri = myAvatar->getHeadOrientation();
glm::quat ori = headOri * glm::angleAxis(-PI / 2.0f, Vectors::RIGHT);
return Transform(ori, myAvatar->scaleForChildren(), pos);
}

View file

@ -0,0 +1,19 @@
//
// Created by Sabrina Shanman 8/14/2018
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_MyAvatarHeadTransformNode_h
#define hifi_MyAvatarHeadTransformNode_h
#include "TransformNode.h"
class MyAvatarHeadTransformNode : public TransformNode {
public:
MyAvatarHeadTransformNode() { }
Transform getTransform() override;
};
#endif // hifi_MyAvatarHeadTransformNode_h

View file

@ -0,0 +1,43 @@
//
// Created by Sabrina Shanman 8/14/2018
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "MouseTransformNode.h"
#include "DependencyManager.h"
#include "PickManager.h"
#include "MouseRayPick.h"
const PickFilter MOUSE_TRANSFORM_NODE_PICK_FILTER(
1 << PickFilter::PICK_ENTITIES |
1 << PickFilter::PICK_AVATARS |
1 << PickFilter::PICK_INCLUDE_NONCOLLIDABLE
);
const float MOUSE_TRANSFORM_NODE_MAX_DISTANCE = 1000.0f;
MouseTransformNode::MouseTransformNode() {
_parentMouseRayPick = DependencyManager::get<PickManager>()->addPick(PickQuery::Ray,
std::make_shared<MouseRayPick>(MOUSE_TRANSFORM_NODE_PICK_FILTER, MOUSE_TRANSFORM_NODE_MAX_DISTANCE, true));
}
MouseTransformNode::~MouseTransformNode() {
if (DependencyManager::isSet<PickManager>()) {
auto pickManager = DependencyManager::get<PickManager>();
if (pickManager) {
pickManager->removePick(_parentMouseRayPick);
}
}
}
Transform MouseTransformNode::getTransform() {
Transform transform;
std::shared_ptr<RayPickResult> rayPickResult = DependencyManager::get<PickManager>()->getPrevPickResultTyped<RayPickResult>(_parentMouseRayPick);
if (rayPickResult) {
transform.setTranslation(rayPickResult->intersection);
}
return transform;
}

View file

@ -0,0 +1,23 @@
//
// Created by Sabrina Shanman 8/14/2018
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_MouseTransformNode_h
#define hifi_MouseTransformNode_h
#include "TransformNode.h"
class MouseTransformNode : public TransformNode {
public:
MouseTransformNode();
~MouseTransformNode();
Transform getTransform() override;
protected:
unsigned int _parentMouseRayPick = 0;
};
#endif // hifi_MouseTransformNode_h

View file

@ -0,0 +1,31 @@
//
// Created by Sabrina Shanman 8/14/2018
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "NestableTransformNode.h"
NestableTransformNode::NestableTransformNode(SpatiallyNestableWeakPointer spatiallyNestable, int jointIndex) :
_spatiallyNestable(spatiallyNestable),
_jointIndex(jointIndex)
{
}
Transform NestableTransformNode::getTransform() {
auto nestable = _spatiallyNestable.lock();
if (!nestable) {
return Transform();
}
bool success;
Transform jointWorldTransform = nestable->getTransform(_jointIndex, success, 30);
if (success) {
return jointWorldTransform;
} else {
return Transform();
}
}

View file

@ -0,0 +1,25 @@
//
// Created by Sabrina Shanman 8/14/2018
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_NestableTransformNode_h
#define hifi_NestableTransformNode_h
#include "TransformNode.h"
#include "SpatiallyNestable.h"
class NestableTransformNode : public TransformNode {
public:
NestableTransformNode(SpatiallyNestableWeakPointer spatiallyNestable, int jointIndex);
Transform getTransform() override;
protected:
SpatiallyNestableWeakPointer _spatiallyNestable;
int _jointIndex;
};
#endif // hifi_NestableTransformNode_h

View file

@ -0,0 +1,18 @@
//
// Created by Sabrina Shanman 8/14/2018
// Copyright 2018 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_TransformNode_h
#define hifi_TransformNode_h
#include "Transform.h"
class TransformNode {
public:
virtual Transform getTransform() = 0;
};
#endif // hifi_TransformNode_h