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 glm::vec3 GetCachedEulerRotation() const;
85
86 glm::vec3 GetForwardVector();
87 glm::vec3 GetRightVector();
88 glm::vec3 GetUpVector();
89
90 glm::mat4 GetParentTransform();
91 int32_t GetParentBoneIndex() const;
92
93 bool GetInheritTransform() const;
94 void SetInheritTransform(bool inheritTransform);
95
96 virtual void Attach(Node* parent, bool keepWorldTransform = false, int32_t index = -1) override;
97
98 static bool OnRep_RootPosition(Datum* datum, uint32_t index, const void* newValue);
99 static bool OnRep_RootRotation(Datum* datum, uint32_t index, const void* newValue);
100 static bool OnRep_RootScale(Datum* datum, uint32_t index, const void* newValue);
101
102protected:
103
104 virtual void SetParent(Node* parent) override;
105
106 glm::vec3 mPosition;
107 glm::vec3 mRotationEuler;
108 glm::vec3 mScale;
109
110 glm::quat mRotationQuat;
111
112 glm::mat4 mTransform;
114
115 bool mInheritTransform = true;
116
118};
Export macros for Polyphase Engine symbols.
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition Datum.h:164
Definition Node3d.h:14
glm::vec3 mRotationEuler
Definition Node3d.h:107
glm::vec3 mPosition
Definition Node3d.h:106
glm::mat4 mTransform
Definition Node3d.h:112
glm::quat mRotationQuat
Definition Node3d.h:110
bool mTransformDirty
Definition Node3d.h:117
int32_t mParentBoneIndex
Definition Node3d.h:113
glm::vec3 mScale
Definition Node3d.h:108
DECLARE_NODE(Node3D, Node)
Definition Node.h:67
virtual bool CheckNetRelevance(Node *playerNode)
Definition Node.cpp:1360
virtual void Create()
Definition Node.cpp:220
virtual void SetParent(Node *parent)
Definition Node.cpp:2257
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Node.cpp:598
virtual void GatherReplicatedData(std::vector< NetDatum > &outData)
Definition Node.cpp:642
virtual void Attach(Node *parent, bool keepWorldTransform=false, int32_t index=-1)
Definition Node.cpp:1561
virtual bool IsNode3D() const
Definition Node.cpp:1526
virtual void Tick(float deltaTime)
Definition Node.cpp:558
virtual const char * GetTypeName() const
Definition Node.cpp:1513
virtual void Destroy()
Definition Node.cpp:234
Definition SkeletalMesh3d.h:52