diff --git a/lib/hkStubs/CMakeLists.txt b/lib/hkStubs/CMakeLists.txt index 158ce5d6..29183b98 100644 --- a/lib/hkStubs/CMakeLists.txt +++ b/lib/hkStubs/CMakeLists.txt @@ -128,12 +128,14 @@ add_library(hkStubs OBJECT Havok/Physics2012/Dynamics/Motion/Rigid/hkpFixedRigidMotion.h Havok/Physics2012/Dynamics/Motion/Rigid/hkpKeyframedRigidMotion.h Havok/Physics2012/Dynamics/Motion/Rigid/hkpSphereMotion.h + Havok/Physics2012/Dynamics/Phantom/hkpPhantomOverlapListener.h Havok/Physics2012/Dynamics/World/hkpPhysicsSystem.h Havok/Physics2012/Dynamics/World/hkpSimulationIsland.h Havok/Physics2012/Dynamics/World/hkpWorld.h Havok/Physics2012/Dynamics/World/hkpWorldCinfo.cpp Havok/Physics2012/Dynamics/World/hkpWorldCinfo.h Havok/Physics2012/Dynamics/World/hkpWorldObject.h + Havok/Physics2012/Dynamics/World/BroadPhaseBorder/hkpBroadPhaseBorder.h Havok/Physics2012/Dynamics/World/Listener/hkpIslandActivationListener.h Havok/Physics2012/Dynamics/World/Listener/hkpIslandPostCollideListener.h Havok/Physics2012/Dynamics/World/Listener/hkpIslandPostIntegrateListener.h diff --git a/lib/hkStubs/Havok/Physics2012/Dynamics/Phantom/hkpPhantomOverlapListener.h b/lib/hkStubs/Havok/Physics2012/Dynamics/Phantom/hkpPhantomOverlapListener.h new file mode 100644 index 00000000..a41235e9 --- /dev/null +++ b/lib/hkStubs/Havok/Physics2012/Dynamics/Phantom/hkpPhantomOverlapListener.h @@ -0,0 +1,38 @@ +#pragma once + +#include + +class hkpPhantom; +class hkpCollidable; + +enum hkpCollidableAccept { + HK_COLLIDABLE_ACCEPT = 0, + HK_COLLIDABLE_REJECT = 1, +}; + +struct hkpCollidableAddedEvent { + HK_DECLARE_CLASS_ALLOCATOR(hkpCollidableAddedEvent) + + const hkpPhantom* m_phantom; + const hkpCollidable* m_collidable; + mutable hkpCollidableAccept m_collidableAccept; +}; + +struct hkpCollidableRemovedEvent { + HK_DECLARE_CLASS_ALLOCATOR(hkpCollidableRemovedEvent) + + const hkpPhantom* m_phantom; + const hkpCollidable* m_collidable; + hkBool m_collidableWasAdded; +}; + +class hkpPhantomOverlapListener { +public: + HK_DECLARE_CLASS_ALLOCATOR(hkpPhantomOverlapListener) + + virtual void collidableAddedCallback(const hkpCollidableAddedEvent& event) = 0; + + virtual void collidableRemovedCallback(const hkpCollidableRemovedEvent& event) = 0; + + virtual ~hkpPhantomOverlapListener() = default; +}; diff --git a/lib/hkStubs/Havok/Physics2012/Dynamics/World/BroadPhaseBorder/hkpBroadPhaseBorder.h b/lib/hkStubs/Havok/Physics2012/Dynamics/World/BroadPhaseBorder/hkpBroadPhaseBorder.h new file mode 100644 index 00000000..38d6db3d --- /dev/null +++ b/lib/hkStubs/Havok/Physics2012/Dynamics/World/BroadPhaseBorder/hkpBroadPhaseBorder.h @@ -0,0 +1,41 @@ +#pragma once + +#include +#include +#include +#include +#include + +class hkpEntity; +class hkpPhantom; +class hkpWorld; + +class hkpBroadPhaseBorder : public hkReferencedObject, + protected hkpWorldDeletionListener, + protected hkpPhantomOverlapListener, + protected hkpWorldPostSimulationListener { +public: + HK_DECLARE_CLASS_ALLOCATOR(hkpBroadPhaseBorder) + + hkpBroadPhaseBorder( + hkpWorld* world, + hkpWorldCinfo::BroadPhaseBorderBehaviour type = hkpWorldCinfo::BROADPHASE_BORDER_ASSERT, + hkBool postponeAndSortCallbacks = false); + + ~hkpBroadPhaseBorder() override; + + virtual void maxPositionExceededCallback(hkpEntity* body); + + virtual void deactivate(); + + void collidableAddedCallback(const hkpCollidableAddedEvent& event) override; + void collidableRemovedCallback(const hkpCollidableRemovedEvent& event) override; + void postSimulationCallback(hkpWorld* world) override; + void worldDeletedCallback(hkpWorld* world) override; + + hkpWorld* m_world; + hkpPhantom* m_phantoms[6]; + hkpWorldCinfo::BroadPhaseBorderBehaviour m_type; + hkBool m_postponeAndSortCallbacks; + hkArray m_entitiesExitingBroadPhase; +};