12 #ifndef hifi_AvatarActionHold_h
13 #define hifi_AvatarActionHold_h
17 #include <EntityItem.h>
19 #include <ObjectActionTractor.h>
21 #include "avatar/MyAvatar.h"
24 class AvatarActionHold :
public ObjectActionTractor {
26 AvatarActionHold(
const QUuid&
id, EntityItemPointer ownerEntity);
27 virtual ~AvatarActionHold();
29 virtual void removeFromOwner()
override;
31 virtual bool updateArguments(QVariantMap arguments)
override;
32 virtual QVariantMap getArguments()
override;
34 virtual void updateActionWorker(
float deltaTimeStep)
override;
36 QByteArray serialize()
const override;
37 virtual void deserialize(QByteArray serializedArguments)
override;
39 virtual bool shouldSuppressLocationEdits()
override {
return _active && !_ownerEntity.expired(); }
41 bool getAvatarRigidBodyLocation(glm::vec3& avatarRigidBodyPosition, glm::quat& avatarRigidBodyRotation);
42 virtual bool getTarget(
float deltaTimeStep, glm::quat& rotation, glm::vec3& position,
43 glm::vec3& linearVelocity, glm::vec3& angularVelocity,
44 float& linearTimeScale,
float& angularTimeScale)
override;
46 virtual void prepareForPhysicsSimulation()
override;
48 void lateAvatarUpdate(
const AnimPose& prePhysicsRoomPose,
const AnimPose& postAvatarUpdateRoomPose);
51 void doKinematicUpdate(
float deltaTimeStep);
53 static const uint16_t holdVersion;
55 glm::vec3 _relativePosition { Vectors::ZERO };
56 glm::quat _relativeRotation { Quaternions::IDENTITY };
57 QString _hand {
"right" };
60 bool _kinematic {
false };
61 bool _kinematicSetVelocity {
false };
62 bool _previousSet {
false };
63 bool _ignoreIK {
false };
64 bool _isTransitingWithAvatar {
false };
66 glm::vec3 _previousPositionalTarget;
67 glm::quat _previousRotationalTarget;
69 float _previousDeltaTimeStep { 0.0f };
70 glm::vec3 _previousPositionalDelta;
72 glm::vec3 _palmOffsetFromRigidBody;
76 static const int velocitySmoothFrames;
77 QVector<glm::vec3> _measuredLinearVelocities;
78 int _measuredLinearVelocitiesIndex { 0 };