2#include "PhysXDefines.h"
4#include "mathtypes.hpp"
5#include "PhysicsCallback.hpp"
6#include "Queryable.hpp"
8#include <PxRigidActor.h>
9#include "ComponentWithOwner.hpp"
10#include "DataStructures.hpp"
11#include "PhysicsCollider.hpp"
15 struct PxContactPairPoint;
22 vector3 position, normal, impulse;
23 decimalType separation;
45 void CompleteConstruction();
48 mutable bool setPoseNeedsSync =
false;
57 physx::PxU32 filterGroup = -1;
58 physx::PxU32 filterMask = -1;
60 auto getScene()
const{
70 decltype(colliders)::iterator
id;
73 template<
typename T,
typename ... A>
75 auto collider_iter = colliders.emplace(std::make_shared<T>(
this,args...));
81 void DestroyCollider(ColliderHandle handle){
82 colliders.erase(handle.id);
92 void AddReceiver(
decltype(receivers)::value_type& obj);
143 void OnColliderEnter(PhysicsBodyComponent& other,
const ContactPairPoint* contactPoints,
size_t numContactPoints);
151 void OnColliderPersist(PhysicsBodyComponent& other,
const ContactPairPoint* contactPoints,
size_t numContactPoints);
159 void OnColliderExit(PhysicsBodyComponent& other,
const ContactPairPoint* contactPoints,
size_t numContactPoints);
177 return wantsContactData;
184 wantsContactData = state;
190 for (
const auto& collider : colliders) {
191 collider->DebugDraw(
dbg, debug_color,
tr);
197 bool wantsContactData =
false;
200 inline void LockWrite(
const T& func){
201 auto scene = rigidActor->
getScene();
205 scene->unlockWrite();
213 inline void LockRead(
const T& func)
const{
214 auto scene = rigidActor->
getScene();
225 void setDynamicsWorldPoseNoLock(
const vector3& worldpos,
const quaternion& worldrot)
const;
232 this->filterGroup = fg; this->filterMask = fm;
251 std::pair<vector3, quaternion> GetKinematicTarget()
const;
272 Angular_X = (1 << 3),
273 Angular_Y = (1 << 4),
294 void SetMass(decimalType mass);
330 PhysicsBodyComponent::Destroy();
339 this->filterGroup = fg; this->filterMask = fm;
344 PhysicsBodyComponent::Destroy();
Definition ComponentWithOwner.hpp:6
Definition DebugDrawer.hpp:11
Definition PhysicsBodyComponent.hpp:41
void AddReceiver(decltype(receivers)::value_type &obj)
Definition PhysicsBodyComponent.cpp:66
void SetGravityEnabled(bool)
Definition PhysicsBodyComponent.cpp:109
void OnTriggerExit(PhysicsBodyComponent &other)
Definition PhysicsBodyComponent.cpp:269
bool GetSleepNotificationsEnabled() const
Definition PhysicsBodyComponent.cpp:130
bool GetGravityEnabled() const
Definition PhysicsBodyComponent.cpp:116
std::pair< vector3, quaternion > getDynamicsWorldPose() const
Definition PhysicsBodyComponent.cpp:90
void setDynamicsWorldPose(const vector3 &worldpos, const quaternion &worldrot) const
Definition PhysicsBodyComponent.cpp:98
void DebugDraw(RavEngine::DebugDrawer &dbg, const RavEngine::Transform &tr) const
Definition PhysicsBodyComponent.hpp:187
void SetWantsContactData(bool state)
Definition PhysicsBodyComponent.hpp:183
void OnColliderPersist(PhysicsBodyComponent &other, const ContactPairPoint *contactPoints, size_t numContactPoints)
Definition PhysicsBodyComponent.cpp:244
void RemoveReceiver(decltype(receivers)::value_type &obj)
Definition PhysicsBodyComponent.cpp:73
void OnColliderExit(PhysicsBodyComponent &other, const ContactPairPoint *contactPoints, size_t numContactPoints)
Definition PhysicsBodyComponent.cpp:253
bool GetSimulationEnabled() const
Definition PhysicsBodyComponent.cpp:145
void OnTriggerEnter(PhysicsBodyComponent &other)
Definition PhysicsBodyComponent.cpp:263
void SetSimulationEnabled(bool)
Definition PhysicsBodyComponent.cpp:140
bool GetWantsContactData() const
Definition PhysicsBodyComponent.hpp:176
void SetSleepNotificationsEnabled(bool)
Definition PhysicsBodyComponent.cpp:125
void OnColliderEnter(PhysicsBodyComponent &other, const ContactPairPoint *contactPoints, size_t numContactPoints)
Definition PhysicsBodyComponent.cpp:235
Definition PhysicsCollider.hpp:21
Definition PhysicsLinkSystem.hpp:37
Definition PhysicsLinkSystem.hpp:25
Definition PhysicsBodyComponent.hpp:228
vector3 GetLinearVelocity() const
Definition PhysicsBodyComponent.cpp:170
bool IsSleeping() const
Definition PhysicsBodyComponent.cpp:230
void SetMass(decimalType mass)
Definition PhysicsBodyComponent.cpp:281
uint16_t GetAxisLock() const
Definition PhysicsBodyComponent.cpp:216
void Sleep()
Definition PhysicsBodyComponent.cpp:225
void SetLinearVelocity(const vector3 &, bool)
Definition PhysicsBodyComponent.cpp:193
void AddTorque(const vector3 &torque)
Definition PhysicsBodyComponent.cpp:307
void ClearAllForces()
Definition PhysicsBodyComponent.cpp:313
void AddForce(const vector3 &force)
Definition PhysicsBodyComponent.cpp:301
void SetAngularVelocity(const vector3 &, bool)
Definition PhysicsBodyComponent.cpp:205
void ClearAllTorques()
Definition PhysicsBodyComponent.cpp:319
decimalType GetMassInverse() const
Definition PhysicsBodyComponent.cpp:293
void SetAxisLock(uint16_t LockFlags)
Definition PhysicsBodyComponent.cpp:212
void Wake()
Definition PhysicsBodyComponent.cpp:220
vector3 GetAngularVelocity() const
Definition PhysicsBodyComponent.cpp:179
decimalType GetMass() const
Definition PhysicsBodyComponent.cpp:285
Definition concurrentqueue.h:747
virtual PxScene * getScene() const =0
Retrieves the scene which this actor belongs to.
PxRigidActor represents a base class shared between dynamic and static rigid bodies in the physics SD...
Definition PxRigidActor.h:53
virtual void lockWrite(const char *file=NULL, PxU32 line=0)=0
Lock the scene for writing from this thread.
virtual void lockRead(const char *file=NULL, PxU32 line=0)=0
Lock the scene for reading from the calling thread.
Definition Animation.hpp:6
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Definition IDebugRenderable.hpp:8
Definition PhysicsBodyComponent.hpp:69
Definition Queryable.hpp:38
Definition Queryable.hpp:21
Definition PhysicsBodyComponent.hpp:334
Definition type_quat.hpp:20
Definition qualifier.hpp:35