Aether3D Game Engine
TransformComponent.hpp
1 #ifndef TRANSFORM_COMPONENT_H
2 #define TRANSFORM_COMPONENT_H
3 
4 #include <string>
5 #include "Vec3.hpp"
6 #include "Matrix.hpp"
7 #include "Quaternion.hpp"
8 
9 namespace ae3d
10 {
13  {
14  public:
16  const Vec3& GetLocalPosition() const { return localPosition; }
17 
19  const Quaternion& GetLocalRotation() const { return localRotation; }
20 
22  float GetLocalScale() const { return localScale; }
23 
27  void LookAt( const Vec3& localPosition, const Vec3& center, const Vec3& up );
28 
30  void MoveRight( float amount );
31 
33  void MoveForward( float amount );
34 
36  void MoveUp( float amount );
37 
40  void OffsetRotate( const Vec3& axis, float angleDegrees );
41 
43  void SetLocalPosition( const Vec3& localPos );
44 
46  void SetLocalRotation( const Quaternion& localRotation );
47 
49  void SetLocalScale( float localScale );
50 
52  void SetParent( TransformComponent* parent );
53 
55 #if OCULUS_RIFT
56  const Matrix44& GetVrView() const { return hmdView; }
57 #else
58  const Matrix44& GetVrView() const { return Matrix44::identity; }
59 #endif
60  void SetVrView( const Matrix44& view );
62 
64  const Matrix44& GetLocalMatrix();
65 
67  std::string GetSerialized() const;
68 
70  Vec3 GetViewDirection() const;
71 
72  private:
73  friend class GameObject;
74 
76  static int Type() { return 2; }
77 
79  static unsigned New();
80 
82  static TransformComponent* Get( unsigned index );
83 
84  void SolveLocalMatrix();
85 
86  void UpdateViewMatrix();
87 
88  Vec3 localPosition;
89  Quaternion localRotation;
90  float localScale = 1;
91  Matrix44 localMatrix;
92  TransformComponent* parent = nullptr;
93 #if OCULUS_RIFT
94  Matrix44 hmdView; // For VR
95 #endif
96  bool isDirty = true;
97  };
98 }
99 
100 #endif
void LookAt(const Vec3 &localPosition, const Vec3 &center, const Vec3 &up)
void MoveUp(float amount)
const Vec3 & GetLocalPosition() const
Definition: TransformComponent.hpp:16
Definition: AudioClip.hpp:4
void MoveRight(float amount)
Stores a position and an orientation.
Definition: TransformComponent.hpp:12
void SetParent(TransformComponent *parent)
const Quaternion & GetLocalRotation() const
Definition: TransformComponent.hpp:19
std::string GetSerialized() const
3-component vector.
Definition: Vec3.hpp:12
Vec3 GetViewDirection() const
const Matrix44 & GetVrView() const
Definition: TransformComponent.hpp:58
float GetLocalScale() const
Definition: TransformComponent.hpp:22
void SetLocalScale(float localScale)
void SetVrView(const Matrix44 &view)
GameObject is composed of components that define its behavior.
Definition: GameObject.hpp:9
const Matrix44 & GetLocalMatrix()
void SetLocalPosition(const Vec3 &localPos)
void OffsetRotate(const Vec3 &axis, float angleDegrees)
Stores an orientation.
Definition: Quaternion.hpp:11
void SetLocalRotation(const Quaternion &localRotation)
void MoveForward(float amount)