Polyphase Game Engine
Loading...
Searching...
No Matches
Node3d.h
Go to the documentation of this file.
1#pragma once
2
3#include "PolyphaseAPI.h"
4#include "Nodes/Node.h"
5#include "EngineTypes.h"
6
7#include "Maths.h"
8
9#include "AssetRef.h"
10
11class SkeletalMesh3D;
12
14{
15public:
16
18
19 Node3D();
20 virtual ~Node3D();
21
22 virtual void Create() override;
23 virtual void Destroy() override;
24 virtual void Tick(float deltaTime) override;
25
26 virtual const char* GetTypeName() const override;
27 virtual void GatherProperties(std::vector<Property>& outProps) override;
28 virtual void GatherReplicatedData(std::vector<NetDatum>& outData);
29
30 virtual bool IsNode3D() const override;
31
32 void AttachToBone(SkeletalMesh3D* parent, const char* boneName, bool keepWorldTransform = false, int32_t childIndex = -1);
33 void AttachToBone(SkeletalMesh3D* parent, int32_t boneIndex, bool keepWorldTransform = false, int32_t childIndex = -1);
34
35 void MarkTransformDirty();
36 bool IsTransformDirty() const;
37 virtual void UpdateTransform(bool updateChildren);
38
39 virtual bool CheckNetRelevance(Node* playerNode) override;
40
41 virtual void GatherProxyDraws(std::vector<DebugDraw>& inoutDraws);
42
43#if EDITOR
44 virtual void OnDrawGizmos();
45 virtual void OnDrawGizmosSelected();
46#endif
47
48 glm::vec3 GetPosition() const;
49 glm::vec3 GetRotationEuler() const;
50 glm::quat GetRotationQuat() const;
51 glm::vec3 GetScale() const;
52
53 glm::vec3& GetPositionRef();
54 glm::vec3& GetRotationEulerRef();
55 glm::quat& GetRotationQuatRef();
56 glm::vec3& GetScaleRef();
57
58 const glm::mat4& GetTransform();
59
60 void SetPosition(glm::vec3 position);
61 void SetRotation(glm::vec3 rotation);
62 void SetRotation(glm::quat quat);
63 void SetScale(glm::vec3 scale);
64 virtual void SetTransform(const glm::mat4& transform);
65
66 glm::vec3 GetWorldPosition();
67 glm::vec3 GetWorldRotationEuler();
68 glm::quat GetWorldRotationQuat();
69 glm::vec3 GetWorldScale();
70
71 void SetWorldPosition(glm::vec3 position);
72 void SetWorldRotation(glm::vec3 rotation);
73 void SetWorldRotation(glm::quat rotation);
74 void SetWorldScale(glm::vec3 scale);
75
76 void AddRotation(glm::quat rotation);
77 void AddRotation(glm::vec3 rotation);
78 void AddWorldRotation(glm::quat rotation);
79 void AddWorldRotation(glm::vec3 rotation);
80 void RotateAround(glm::vec3 pivot, glm::vec3 axis, float degrees);
81
82 void LookAt(glm::vec3 target, glm::vec3 up);
83
84 // World-space bounding box of THIS node's own geometry. Node3D has no
85 // geometry of its own, so the base implementation returns a degenerate
86 // box at the node's world origin. Primitive3D overrides this.
87 virtual AABB GetAABB() const;
88
89 // This node unioned with every Node3D descendant's GetAABB(). Useful for
90 // framing, selection and group operations.
91 AABB GetHierarchyAABB(bool includeSelf = true) const;
92
93 glm::vec3 GetCachedEulerRotation() const;
94
95 glm::vec3 GetForwardVector();
96 glm::vec3 GetRightVector();
97 glm::vec3 GetUpVector();
98
99 glm::mat4 GetParentTransform();
100 int32_t GetParentBoneIndex() const;
101
102 bool GetInheritTransform() const;
103 void SetInheritTransform(bool inheritTransform);
104
105 virtual void Attach(Node* parent, bool keepWorldTransform = false, int32_t index = -1) override;
106
107 static bool OnRep_RootPosition(Datum* datum, uint32_t index, const void* newValue);
108 static bool OnRep_RootRotation(Datum* datum, uint32_t index, const void* newValue);
109 static bool OnRep_RootScale(Datum* datum, uint32_t index, const void* newValue);
110
111protected:
112
113 virtual void SetParent(Node* parent) override;
114
115 glm::vec3 mPosition;
116 glm::vec3 mRotationEuler;
117 glm::vec3 mScale;
118
119 glm::quat mRotationQuat;
120
121 glm::mat4 mTransform;
123
124 bool mInheritTransform = true;
125
127};
Export macros for Polyphase Engine symbols.
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition Datum.h:169
Definition Node3d.h:14
glm::vec3 mRotationEuler
Definition Node3d.h:116
glm::vec3 mPosition
Definition Node3d.h:115
glm::mat4 mTransform
Definition Node3d.h:121
glm::quat mRotationQuat
Definition Node3d.h:119
bool mTransformDirty
Definition Node3d.h:126
int32_t mParentBoneIndex
Definition Node3d.h:122
glm::vec3 mScale
Definition Node3d.h:117
DECLARE_NODE(Node3D, Node)
Definition Node.h:67
virtual bool CheckNetRelevance(Node *playerNode)
Definition Node.cpp:1412
virtual void Create()
Definition Node.cpp:235
virtual void SetParent(Node *parent)
Definition Node.cpp:2338
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Node.cpp:618
virtual void GatherReplicatedData(std::vector< NetDatum > &outData)
Definition Node.cpp:662
virtual void Attach(Node *parent, bool keepWorldTransform=false, int32_t index=-1)
Definition Node.cpp:1613
virtual bool IsNode3D() const
Definition Node.cpp:1578
virtual void Tick(float deltaTime)
Definition Node.cpp:573
virtual const char * GetTypeName() const
Definition Node.cpp:1565
virtual void Destroy()
Definition Node.cpp:249
Definition SkeletalMesh3d.h:116
Definition EngineTypes.h:210