Overte C++ Documentation
AvatarActionHold.h
1 //
2 // AvatarActionHold.h
3 // interface/src/avatar/
4 //
5 // Created by Seth Alves 2015-6-9
6 // Copyright 2015 High Fidelity, Inc.
7 //
8 // Distributed under the Apache License, Version 2.0.
9 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10 //
11 
12 #ifndef hifi_AvatarActionHold_h
13 #define hifi_AvatarActionHold_h
14 
15 #include <QUuid>
16 
17 #include <EntityItem.h>
18 #include <AnimPose.h>
19 #include <ObjectActionTractor.h>
20 
21 #include "avatar/MyAvatar.h"
22 
23 
24 class AvatarActionHold : public ObjectActionTractor {
25 public:
26  AvatarActionHold(const QUuid& id, EntityItemPointer ownerEntity);
27  virtual ~AvatarActionHold();
28 
29  virtual void removeFromOwner() override;
30 
31  virtual bool updateArguments(QVariantMap arguments) override;
32  virtual QVariantMap getArguments() override;
33 
34  virtual void updateActionWorker(float deltaTimeStep) override;
35 
36  QByteArray serialize() const override;
37  virtual void deserialize(QByteArray serializedArguments) override;
38 
39  virtual bool shouldSuppressLocationEdits() override { return _active && !_ownerEntity.expired(); }
40 
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;
45 
46  virtual void prepareForPhysicsSimulation() override;
47 
48  void lateAvatarUpdate(const AnimPose& prePhysicsRoomPose, const AnimPose& postAvatarUpdateRoomPose);
49 
50 private:
51  void doKinematicUpdate(float deltaTimeStep);
52 
53  static const uint16_t holdVersion;
54 
55  glm::vec3 _relativePosition { Vectors::ZERO };
56  glm::quat _relativeRotation { Quaternions::IDENTITY };
57  QString _hand { "right" };
58  QUuid _holderID;
59 
60  bool _kinematic { false };
61  bool _kinematicSetVelocity { false };
62  bool _previousSet { false };
63  bool _ignoreIK { false };
64  bool _isTransitingWithAvatar { false };
65 
66  glm::vec3 _previousPositionalTarget;
67  glm::quat _previousRotationalTarget;
68 
69  float _previousDeltaTimeStep { 0.0f };
70  glm::vec3 _previousPositionalDelta;
71 
72  glm::vec3 _palmOffsetFromRigidBody;
73  // leaving this here for future refernece.
74  // glm::quat _palmRotationFromRigidBody;
75 
76  static const int velocitySmoothFrames;
77  QVector<glm::vec3> _measuredLinearVelocities;
78  int _measuredLinearVelocitiesIndex { 0 };
79 };
80 
81 #endif // hifi_AvatarActionHold_h