Havok: Add hkpBroadPhaseBorder

This commit is contained in:
Léo Lam 2022-01-20 23:53:13 +01:00
parent 7c3bf4a382
commit 3379577a1e
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
3 changed files with 81 additions and 0 deletions

View File

@ -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

View File

@ -0,0 +1,38 @@
#pragma once
#include <Havok/Common/Base/hkBase.h>
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;
};

View File

@ -0,0 +1,41 @@
#pragma once
#include <Havok/Common/Base/hkBase.h>
#include <Havok/Physics2012/Dynamics/Phantom/hkpPhantomOverlapListener.h>
#include <Havok/Physics2012/Dynamics/World/Listener/hkpWorldDeletionListener.h>
#include <Havok/Physics2012/Dynamics/World/Listener/hkpWorldPostSimulationListener.h>
#include <Havok/Physics2012/Dynamics/World/hkpWorldCinfo.h>
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<hkpEntity*> m_entitiesExitingBroadPhase;
};