Polyphase Game Engine
Loading...
Searching...
No Matches
Primitive3d.h
Go to the documentation of this file.
1#pragma once
2#include "Node3d.h"
3#include "Vertex.h"
4#include "Assets/StaticMesh.h"
5
6#include <Bullet/btBulletDynamicsCommon.h>
7#include "Maths.h"
8
9#include <vector>
10
11//typedef void(*BeginOverlapHandlerFP)(Primitive3D* thisPrim, Primitive3D* otherPrim);
12//typedef void(*EndOverlapHandlerFP)(Primitive3D* thisPrim, Primitive3D* otherPrim);
13//typedef void(*CollisionHandlerFP)(Primitive3D* thisPrim, Primitive3D* otherPrim, btPersistentManifold* manifold);
14
15ATTRIBUTE_ALIGNED16(struct) PolyphaseMotionState : public btMotionState
16{
17 btTransform mInterpolatedTransform;
18 //void* mUserPointer;
19
20 BT_DECLARE_ALIGNED_ALLOCATOR();
21
22 PolyphaseMotionState(glm::mat4 startTransform = glm::mat4(1))
23 {
24 mInterpolatedTransform.setFromOpenGLMatrix(glm::value_ptr(startTransform));
25 }
26
27 virtual void getWorldTransform(btTransform& transform) const override
28 {
29 transform = mInterpolatedTransform;
30 }
31
32 virtual void setWorldTransform(const btTransform& transform) override
33 {
34 mInterpolatedTransform = transform;
35 }
36
37 glm::mat4 GetTransform() const
38 {
39 glm::mat4 retMat;
40 mInterpolatedTransform.getOpenGLMatrix(glm::value_ptr(retMat));
41 return retMat;
42 }
43};
44
46{
47public:
48
50
52 virtual ~Primitive3D();
53
54 virtual void Create() override;
55 virtual void Destroy() override;
56
57 virtual const char* GetTypeName() const override;
58 virtual bool IsPrimitive3D() const override;
59 virtual void Tick(float deltaTime) override;
60 virtual void GatherProperties(std::vector<Property>& outProps) override;
61
62 virtual void SetWorld(World* world, bool subRoot) override;
63 virtual void Render() override;
64
65 virtual void UpdateTransform(bool updateChildren) override;
66 virtual void SetTransform(const glm::mat4& transform) override;
67
68 void EnablePhysics(bool enable);
69 void EnableCollision(bool enable);
70 void EnableOverlaps(bool enable);
71 bool IsPhysicsEnabled() const;
72 bool IsCollisionEnabled() const;
73 bool AreOverlapsEnabled() const;
74
75 float GetCullDistance() const;
76 void SetCullDistance(float cullDistance);
77
78 float GetMass() const;
79 float GetLinearDamping() const;
80 float GetAngularDamping() const;
81 float GetRestitution() const;
82 float GetFriction() const;
83 float GetRollingFriction();
84 glm::vec3 GetLinearFactor() const;
85 glm::vec3 GetAngularFactor() const;
86 uint8_t GetCollisionGroup() const;
87 uint8_t GetCollisionMask() const;
88
89 void SetMass(float mass);
90 void SetLinearDamping(float linearDamping);
91 void SetAngularDamping(float angularDamping);
92 void SetRestitution(float restitution);
93 void SetFriction(float friction);
94 void SetRollingFriction(float rollingFriction);
95 void SetLinearFactor(glm::vec3 linearFactor);
96 void SetAngularFactor(glm::vec3 angularFactor);
97 void SetCollisionGroup(uint8_t group);
98 void SetCollisionMask(uint8_t mask);
99
100 glm::vec3 GetLinearVelocity() const;
101 glm::vec3 GetAngularVelocity() const;
102
103 void AddLinearVelocity(glm::vec3 deltaVelocity);
104 void AddAngularVelocity(glm::vec3 deltaVelocity);
105 void SetLinearVelocity(glm::vec3 linearVelocity);
106 void SetAngularVelocity(glm::vec3 angularVelocity);
107 void AddForce(glm::vec3 force);
108 void AddImpulse(glm::vec3 impulse);
109 void ClearForces();
110
111 void FullSyncRigidBodyTransform();
112
113 void SyncRigidBodyTransform();
114 void SyncRigidBodyMass();
115 void SyncCollisionFlags();
116
117 void EnableCastShadows(bool enable);
118 bool ShouldCastShadows() const;
119
120 void EnableReceiveShadows(bool enable);
121 bool ShouldReceiveShadows() const;
122
123 void EnableReceiveSimpleShadows(bool enable);
124 bool ShouldReceiveSimpleShadows() const;
125
126 uint8_t GetLightingChannels() const;
127 void SetLightingChannels(uint8_t channels);
128
129 virtual VertexType GetVertexType() const override;
130
131 btRigidBody* GetRigidBody();
132 btCollisionShape* GetCollisionShape();
133 void SetCollisionShape(btCollisionShape* newShape);
134
135 // When passing in the mask as 0, it means use the primitive's collision mask
136 bool SweepToWorldPosition(glm::vec3 position, SweepTestResult& outSweepResult, uint8_t mask = 0, bool testOnly = false);
137 bool SweepTest(glm::vec3 position, SweepTestResult& outSweepResult, uint8_t mask = 0);
138
139 Bounds GetBounds() const;
140 virtual Bounds GetLocalBounds() const;
141
142 virtual AABB GetAABB() const override;
143 virtual AABB GetLocalAABB() const;
144
145 virtual void GatherProxyDraws(std::vector<DebugDraw>& inoutDraws) override;
146
147 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
148
149 glm::vec4 GetCollisionDebugColor();
150
151protected:
152
153 static btCollisionShape* GetEmptyCollisionShape();
154
155 bool IsRigidBodyInWorld() const;
156 void EnableRigidBody(bool enable);
157 void DestroyComponentCollisionShape();
158
159 btRigidBody* mRigidBody = nullptr;
160 PolyphaseMotionState* mMotionState = nullptr;
161 btCollisionShape* mCollisionShape = nullptr;
162
163 float mCullDistance = 0.0f;
164
165 // Physics Properties
166 float mMass = 1.0f;
167 float mRestitution = 0.0f;
168 float mFriction = 0.5f;
169 uint8_t mCollisionGroup = ColGroup0;
170 uint8_t mCollisionMask = ColGroupAll;
171 uint8_t mLightingChannels = 0x01;
172
173 bool mPhysicsEnabled = false;
174 bool mCollisionEnabled = false;
175 bool mOverlapsEnabled = false;
176 bool mCastShadows = false;
177 bool mReceiveShadows = true;
178 bool mReceiveSimpleShadows = true;
179 //BeginOverlapHandlerFP mBeginOverlapHandler;
180 //EndOverlapHandlerFP mEndOverlapHandler;
181 //CollisionHandlerFP mCollisionHandler;
182};
@ ColGroup0
Definition EngineTypes.h:596
@ ColGroupAll
Definition EngineTypes.h:605
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
VertexType
Definition Vertex.h:7
Definition Datum.h:169
Definition Node3d.h:14
virtual void Create() override
Definition Node3d.cpp:96
virtual const char * GetTypeName() const override
Definition Node3d.cpp:119
virtual void UpdateTransform(bool updateChildren)
Definition Node3d.cpp:198
virtual AABB GetAABB() const
Definition Node3d.cpp:605
virtual void Destroy() override
Definition Node3d.cpp:101
virtual void Tick(float deltaTime) override
Definition Node3d.cpp:114
virtual void SetTransform(const glm::mat4 &transform)
Definition Node3d.cpp:430
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Node3d.cpp:124
virtual void GatherProxyDraws(std::vector< DebugDraw > &inoutDraws)
Definition Node3d.cpp:298
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Node.cpp:89
virtual void Render()
Definition Node.cpp:598
virtual void SetWorld(World *world, bool subRoot)
Definition Node.cpp:1251
virtual bool IsPrimitive3D() const
Definition Node.cpp:1588
virtual VertexType GetVertexType() const
Definition Node.cpp:613
Definition Primitive3d.h:46
DECLARE_OBJECT(Primitive3D, Node3D)
Definition World.h:24
Definition EngineTypes.h:210
Definition EngineTypes.h:201
Definition EngineTypes.h:547