Overte C++ Documentation
AnimManipulator.h
1 //
2 // AnimManipulator.h
3 //
4 // Created by Anthony J. Thibault on 9/8/15.
5 // Copyright (c) 2015 High Fidelity, Inc. All rights reserved.
6 //
7 // Distributed under the Apache License, Version 2.0.
8 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
9 //
10 
11 #ifndef hifi_AnimManipulator_h
12 #define hifi_AnimManipulator_h
13 
14 #include "AnimNode.h"
15 
16 // Allows procedural control over a set of joints.
17 
18 class AnimManipulator : public AnimNode {
19 public:
20  friend class AnimTests;
21 
22  AnimManipulator(const QString& id, float alpha);
23  virtual ~AnimManipulator() override;
24 
25  virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override;
26  virtual const AnimPoseVec& overlay(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut, const AnimPoseVec& underPoses) override;
27 
28  void setAlphaVar(const QString& alphaVar) { _alphaVar = alphaVar; }
29 
30  virtual void setSkeletonInternal(AnimSkeleton::ConstPointer skeleton) override;
31 
32  struct JointVar {
33  enum class Type {
34  Absolute,
35  Relative,
36  UnderPose,
37  Default,
38  NumTypes
39  };
40 
41  JointVar(const QString& jointNameIn, Type rotationType, Type translationType, const QString& rotationVarIn, const QString& translationVarIn);
42  QString jointName = "";
43  Type rotationType = Type::Absolute;
44  Type translationType = Type::Absolute;
45  QString rotationVar = "";
46  QString translationVar = "";
47 
48  int jointIndex = -1;
49  bool hasPerformedJointLookup = false;
50  bool isRelative = false;
51  };
52 
53  void addJointVar(const JointVar& jointVar);
54  void removeAllJointVars();
55 
56 protected:
57  // for AnimDebugDraw rendering
58  virtual const AnimPoseVec& getPosesInternal() const override;
59 
60  AnimPose computeRelativePoseFromJointVar(const AnimVariantMap& animVars, const JointVar& jointVar,
61  const AnimPose& defaultRelPose, const AnimPoseVec& underPoses);
62 
63  AnimPoseVec _poses;
64  float _alpha;
65  QString _alphaVar;
66 
67  std::vector<JointVar> _jointVars;
68 
69  // no copies
70  AnimManipulator(const AnimManipulator&) = delete;
71  AnimManipulator& operator=(const AnimManipulator&) = delete;
72 
73 };
74 
75 #endif // hifi_AnimManipulator_h