/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #pragma once #include #include namespace PhysX { //! Helper class that receives the collision events reported from PhysX. //! This will convert physx collision and trigger events in TriggerEvent and CollisionEvent to be forwarded to the Scene. class SceneSimulationEventCallback : public physx::PxSimulationEventCallback { public: SceneSimulationEventCallback() = default; ~SceneSimulationEventCallback() = default; //! Accessor to the queued Collision / trigger Events. AzPhysics::CollisionEventList& GetQueuedCollisionEvents(); AzPhysics::TriggerEventList& GetQueuedTriggerEvents(); //! Clear all queued collision / trigger events. void FlushQueuedCollisionEvents(); void FlushQueuedTriggerEvents(); // physx::PxSimulationEventCallback Interface void onConstraintBreak(physx::PxConstraintInfo* constraints, physx::PxU32 count) override; void onWake(physx::PxActor** actors, physx::PxU32 count) override; void onSleep(physx::PxActor** actors, physx::PxU32 count) override; void onContact(const physx::PxContactPairHeader& pairHeader, const physx::PxContactPair* pairs, physx::PxU32 nbPairs) override; void onTrigger(physx::PxTriggerPair* pairs, physx::PxU32 count) override; void onAdvance(const physx::PxRigidBody* const* bodyBuffer, const physx::PxTransform* poseBuffer, const physx::PxU32 count) override; private: AzPhysics::CollisionEventList m_queuedCollisionEvents; //!< Holds all the collision events the happened until the next call to FlushCollisionEvents; AzPhysics::TriggerEventList m_queuedTriggerEvents; //!< Holds all the trigger events the happened until the next call to FlushTriggerEvents; }; }