Bomberman-OverlordEngine-x64 / OverlordEngine / PhysX / PhysxProxy.h
PhysxProxy.h
Raw
#pragma once
#include "Base/Structs.h"
class GameScene;

class PhysxProxy final: public PxSimulationEventCallback
{
public:
	PhysxProxy() = default;
	~PhysxProxy() override;

	PhysxProxy(const PhysxProxy& other) = delete;
	PhysxProxy(PhysxProxy&& other) noexcept = delete;
	PhysxProxy& operator=(const PhysxProxy& other) = delete;
	PhysxProxy& operator=(PhysxProxy&& other) noexcept = delete;

	PxScene* GetPhysxScene() const { return m_pPhysxScene; }

	void AddActor(PxActor& actor) const { if(m_pPhysxScene)m_pPhysxScene->addActor(actor); }

	PxControllerManager* GetControllerManager() const { return m_pControllerManager; }

	void EnablePhysxDebugRendering(bool enable) { m_DrawPhysx = enable; }

	static void EnablePhysXFrameStepping(bool enable) { m_PhysXFrameStepping = enable; }
	static void NextPhysXFrame(float time = 0.03f) { m_PhysXStepTime = time; }
	void Initialize(GameScene* pParent);
	void Update(const SceneContext& sceneContext) const;
	void Draw(const SceneContext& sceneContext) const;
	bool Raycast(const PxVec3& origin, const PxVec3& unitDir, PxReal distance,
	             PxRaycastCallback& hitCall,
	             PxHitFlags hitFlags = PxHitFlags(PxHitFlag::eDEFAULT),
	             const PxQueryFilterData& filterData = PxQueryFilterData(),
	             PxQueryFilterCallback* filterCall = nullptr,
	             const PxQueryCache* cache = nullptr) const;

private:
	void onConstraintBreak(PxConstraintInfo* /*constraints*/, PxU32 /*count*/) override {};
	void onWake(PxActor** /*actors*/, PxU32 /*count*/) override {};
	void onSleep(PxActor** /*actors*/, PxU32 /*count*/) override {};
	void onContact(const PxContactPairHeader& /*pairHeader*/, const PxContactPair* /*pairs*/, PxU32 /*nbPairs*/) override {};
	void onAdvance(const PxRigidBody* const* /*bodyBuffer*/, const PxTransform* /*poseBuffer*/, const PxU32 /*count*/) override {};
	void onTrigger(PxTriggerPair* pairs, PxU32 count) override;

	PxScene* m_pPhysxScene{};
	PxControllerManager* m_pControllerManager{};
	bool m_DrawPhysx{};
	bool m_IsInitialized{};

	//Static debug variables
	static bool m_PhysXFrameStepping;
	static float m_PhysXStepTime;
};