00001
00002
00003
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef TA_COLLISIONOBJECTCAPSULE_H
00015 #define TA_COLLISIONOBJECTCAPSULE_H
00016
00017 #ifndef TA_COLLISION_H
00018 #include "Collision.h"
00019 #endif // TA_COLLISION_H
00020
00021 #ifndef TA_COLLISIONOBJECTSIMPLE_H
00022 #include "CollisionObjectSimple.h"
00023 #endif // TA_COLLISIONOBJECTSIMPLE_H
00024
00025 TA_OBFUSCATION_SKIP_PASS_2
00026
00027 namespace TA
00028 {
00029
00030 struct MFrame;
00031 class CollisionObjectCachedPolyData;
00032
00033 class TAPHYSICS_CLASS CollisionObjectCapsule : public CollisionObjectSimple
00034 {
00035 public:
00036 TA_OBFUSCATION_RESERVED_ON
00037 void Initialise(
00038 const Vec3& v3PointA,
00039 const Vec3& v3PointB,
00040 float fRadius);
00041 void Finalise();
00043
00044 #ifndef TA_WRAPPER
00045 void Serialise(Serialiser& serialiser, const Version& version);
00046 #endif // TA_WRAPPER
00047
00048 bool Serialisable() const { return true; }
00049
00050 void Render(const MFrame& mFrame);
00051 AABB CalculateBoundingBox() const;
00052 void CalculateMass(float fDensity, float& fMass, Vec3& v3CenterOfMass, Mat33& m33Inertia) const;
00053
00054 const Vec3& GetPointA() const;
00055 const Vec3& GetPointB() const;
00056 float GetRadius() const;
00057
00058 virtual bool TestLineForCollision(
00059 const Vec3& v3Start,
00060 const Vec3& v3Normal,
00061 float fLength,
00062 Collision& collision) const;
00063
00064 static CollisionObjectCapsule* TAC_CALL CreateNew();
00065 TA_OBFUSCATION_RESERVED_OFF
00066
00067 #ifndef DOXYGEN
00068 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestCapsuleAgainstCapsule)
00069 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestCapsuleAgainstConvexObject)
00070 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstCapsule)
00071 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestCapsuleAgainstCylinder)
00072 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestCapsuleAgainstLineList)
00073
00074 TA_DEFINE_FRIEND_SIMPLE_VS_COMPLEX_COLLISION(TestCapsuleAgainstCachedPolyData)
00075 #endif
00076
00077
00078 private:
00079 float m_fRadius;
00080 Vec3 m_v3A;
00081 Vec3 m_v3B;
00082
00083 CollisionObjectCapsule();
00084 ~CollisionObjectCapsule();
00085 virtual const char* GetFileHeaderString() const { return "TAColObjCapsule"; }
00086 };
00087
00088 inline const Vec3& CollisionObjectCapsule::GetPointA() const { return m_v3A; }
00089 inline const Vec3& CollisionObjectCapsule::GetPointB() const { return m_v3B; }
00090 inline float CollisionObjectCapsule::GetRadius() const { return m_fRadius; }
00091
00092 #ifndef DOXYGEN
00093 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestCapsuleAgainstCapsule)
00094 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstCapsule)
00095 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestCapsuleAgainstLineList)
00096
00097 TA_DEFINE_SIMPLE_VS_COMPLEX_COLLISION(TestCapsuleAgainstCachedPolyData)
00098 #endif
00099
00100 };
00101
00102 #endif
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.