49582f9d |
1 | // Copyright (c) 2019 OPEN CASCADE SAS |
2 | // |
3 | // This file is part of Open CASCADE Technology software library. |
4 | // |
5 | // This library is free software; you can redistribute it and/or modify it under |
6 | // the terms of the GNU Lesser General Public License version 2.1 as published |
7 | // by the Free Software Foundation, with special exception defined in the file |
8 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
9 | // distribution for complete text of the license and disclaimer of any warranty. |
10 | // |
11 | // Alternatively, this file may be used under the terms of Open CASCADE |
12 | // commercial license or contractual agreement. |
13 | |
14 | #ifndef _AIS_WalkDelta_HeaderFile |
15 | #define _AIS_WalkDelta_HeaderFile |
16 | |
17 | #include <Standard_Real.hxx> |
18 | |
19 | //! Walking translation components. |
20 | enum AIS_WalkTranslation |
21 | { |
22 | AIS_WalkTranslation_Forward = 0, //!< translation delta, Forward walk |
23 | AIS_WalkTranslation_Side, //!< translation delta, Side walk |
24 | AIS_WalkTranslation_Up, //!< translation delta, Up walk |
25 | }; |
26 | |
27 | //! Walking rotation components. |
28 | enum AIS_WalkRotation |
29 | { |
30 | AIS_WalkRotation_Yaw = 0, //!< yaw rotation angle |
31 | AIS_WalkRotation_Pitch, //!< pitch rotation angle |
32 | AIS_WalkRotation_Roll, //!< roll rotation angle |
33 | }; |
34 | |
35 | //! Walking value. |
36 | struct AIS_WalkPart |
37 | { |
38 | Standard_Real Value; //!< value |
39 | Standard_Real Pressure; //!< key pressure |
40 | Standard_Real Duration; //!< duration |
41 | |
42 | //! Return TRUE if delta is empty. |
43 | bool IsEmpty() const { return Abs (Value) <= RealSmall(); } |
44 | |
45 | //! Empty constructor. |
46 | AIS_WalkPart() : Value (0.0), Pressure (1.0), Duration (0.0) {} |
47 | }; |
48 | |
49 | //! Walking values. |
50 | struct AIS_WalkDelta |
51 | { |
52 | //! Empty constructor. |
53 | AIS_WalkDelta() |
54 | : myIsJumping (false), myIsCrouching (false), myIsRunning (false) {} |
55 | |
56 | //! Return translation component. |
57 | const AIS_WalkPart& operator[] (AIS_WalkTranslation thePart) const { return myTranslation[thePart]; } |
58 | |
59 | //! Return translation component. |
60 | AIS_WalkPart& operator[] (AIS_WalkTranslation thePart) { return myTranslation[thePart]; } |
61 | |
62 | //! Return rotation component. |
63 | const AIS_WalkPart& operator[] (AIS_WalkRotation thePart) const { return myRotation[thePart]; } |
64 | |
65 | //! Return rotation component. |
66 | AIS_WalkPart& operator[] (AIS_WalkRotation thePart) { return myRotation[thePart]; } |
67 | |
68 | //! Return jumping state. |
69 | bool IsJumping() const { return myIsJumping; } |
70 | |
71 | //! Set jumping state. |
72 | void SetJumping (bool theIsJumping) { myIsJumping = theIsJumping; } |
73 | |
74 | //! Return crouching state. |
75 | bool IsCrouching() const { return myIsCrouching; } |
76 | |
77 | //! Set crouching state. |
78 | void SetCrouching (bool theIsCrouching) { myIsCrouching = theIsCrouching; } |
79 | |
80 | //! Return running state. |
81 | bool IsRunning() const { return myIsRunning; } |
82 | |
83 | //! Set running state. |
84 | void SetRunning (bool theIsRunning) { myIsRunning = theIsRunning; } |
85 | |
86 | //! Return TRUE when both Rotation and Translation deltas are empty. |
87 | bool IsEmpty() const { return !ToMove() && !ToRotate(); } |
88 | |
89 | //! Return TRUE if translation delta is defined. |
90 | bool ToMove() const |
91 | { |
92 | return !myTranslation[AIS_WalkTranslation_Forward].IsEmpty() |
93 | || !myTranslation[AIS_WalkTranslation_Side].IsEmpty() |
94 | || !myTranslation[AIS_WalkTranslation_Up].IsEmpty(); |
95 | } |
96 | |
97 | //! Return TRUE if rotation delta is defined. |
98 | bool ToRotate() const |
99 | { |
100 | return !myRotation[AIS_WalkRotation_Yaw].IsEmpty() |
101 | || !myRotation[AIS_WalkRotation_Pitch].IsEmpty() |
102 | || !myRotation[AIS_WalkRotation_Roll].IsEmpty(); |
103 | } |
104 | |
105 | private: |
106 | |
107 | AIS_WalkPart myTranslation[3]; |
108 | AIS_WalkPart myRotation[3]; |
109 | bool myIsJumping; |
110 | bool myIsCrouching; |
111 | bool myIsRunning; |
112 | |
113 | }; |
114 | |
115 | #endif // _AIS_WalkDelta_HeaderFile |