Cafu Engine
CollisionModel_static_BulletAdapter.hpp
1 /*
2 Cafu Engine, http://www.cafu.de/
3 Copyright (c) Carsten Fuchs and other contributors.
4 This project is licensed under the terms of the MIT license.
5 */
6 
7 #ifndef CAFU_CLIPSYS_COLLISION_MODEL_STATIC_BULLET_ADAPTER_HPP_INCLUDED
8 #define CAFU_CLIPSYS_COLLISION_MODEL_STATIC_BULLET_ADAPTER_HPP_INCLUDED
9 
10 #include "CollisionModel_static.hpp"
11 #include "BulletCollision/CollisionShapes/btConcaveShape.h"
12 
13 
14 namespace cf
15 {
16  namespace ClipSys
17  {
18  /// This class provides an adapter for CollisionModelStaticT instances to be used as btConcaveShape instances.
19  ///
20  /// Design notes:
21  /// Its implementation must know and be able to access the private implementation details of class CollisionModelStaticT,
22  /// so it is a friend class of CollisionModelStaticT.
23  /// It is self-suggesting and logical to have each CollisionModelStaticT instance keep its related CollisionModelStaticT::BulletAdapterT
24  /// instance, as everything else is burdening and confusing to the user (though possible).
25  class CollisionModelStaticT::BulletAdapterT : public btConcaveShape
26  {
27  public:
28 
29  /// Constructor.
30  BulletAdapterT(const CollisionModelStaticT& CollMdl);
31 
32 
33  // The btCollisionShape interface.
34  void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const override;
35  void setLocalScaling(const btVector3& scaling) override { m_LocalScale = scaling; }
36  const btVector3& getLocalScaling() const override { return m_LocalScale; }
37  void calculateLocalInertia(btScalar mass, btVector3& inertia) const override;
38  const char* getName() const override { return "CollisionModelStaticT::BulletAdapterT"; }
39 
40  // The btConcaveShape interface.
41  void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const override;
42 
43 
44  private:
45 
46  btVector3 conv(const Vector3dT& v) const { return btVector3(btScalar(v.x), btScalar(v.y), btScalar(v.z)); } ///< Inline conversion from Vector3dT to btVector3.
47  btVector3 conv(const Vector3fT& v) const { return btVector3(btScalar(v.x), btScalar(v.y), btScalar(v.z)); } ///< Inline conversion from Vector3fT to btVector3.
48  void ProcessTriangles(NodeT* Node, btTriangleCallback* callback, const BoundingBox3dT& BB) const;
49 
50  const CollisionModelStaticT& m_CollMdl; ///< The static collision model (our "parent") we provide an adapter for.
51  btVector3 m_LocalScale; ///< A member required in order to implement the btCollisionShape interface (this class does not actually support local scaling).
52  };
53  }
54 }
55 
56 #endif
BulletAdapterT(const CollisionModelStaticT &CollMdl)
Constructor.
Definition: CollisionModel_static_BulletAdapter.cpp:18
T y
The y-component of this vector.
Definition: Vector3.hpp:41
This class provides an adapter for CollisionModelStaticT instances to be used as btConcaveShape insta...
Definition: CollisionModel_static_BulletAdapter.hpp:25
This class represents a static collision model.
Definition: CollisionModel_static.hpp:25
T z
The z-component of this vector.
Definition: Vector3.hpp:42
T x
The x-component of this vector.
Definition: Vector3.hpp:40
Definition: CollisionModel_static.hpp:136