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 void GatherProxyDraws(std::vector<DebugDraw>& inoutDraws) override;
143
144 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
145
146 glm::vec4 GetCollisionDebugColor();
147
148protected:
149
150 static btCollisionShape* GetEmptyCollisionShape();
151
152 bool IsRigidBodyInWorld() const;
153 void EnableRigidBody(bool enable);
154 void DestroyComponentCollisionShape();
155
156 btRigidBody* mRigidBody = nullptr;
157 PolyphaseMotionState* mMotionState = nullptr;
158 btCollisionShape* mCollisionShape = nullptr;
159
160 float mCullDistance = 0.0f;
161
162 // Physics Properties
163 float mMass = 1.0f;
164 float mRestitution = 0.0f;
165 float mFriction = 0.5f;
166 uint8_t mCollisionGroup = ColGroup0;
167 uint8_t mCollisionMask = ColGroupAll;
168 uint8_t mLightingChannels = 0x01;
169
170 bool mPhysicsEnabled = false;
171 bool mCollisionEnabled = false;
172 bool mOverlapsEnabled = false;
173 bool mCastShadows = false;
174 bool mReceiveShadows = true;
175 bool mReceiveSimpleShadows = true;
176 //BeginOverlapHandlerFP mBeginOverlapHandler;
177 //EndOverlapHandlerFP mEndOverlapHandler;
178 //CollisionHandlerFP mCollisionHandler;
179};
@ ColGroup0
Definition EngineTypes.h:456
@ ColGroupAll
Definition EngineTypes.h:465
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
VertexType
Definition Vertex.h:7
Definition Datum.h:164
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 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:74
virtual void Render()
Definition Node.cpp:583
virtual void SetWorld(World *world, bool subRoot)
Definition Node.cpp:1224
virtual bool IsPrimitive3D() const
Definition Node.cpp:1536
virtual VertexType GetVertexType() const
Definition Node.cpp:593
Definition Primitive3d.h:46
DECLARE_OBJECT(Primitive3D, Node3D)
Definition World.h:24
Definition EngineTypes.h:193
Definition EngineTypes.h:407