00001
00002
00003
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef TA_COLLISIONOBJECTCYLINDER_H
00015 #define TA_COLLISIONOBJECTCYLINDER_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 CollisionObjectCylinder : 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 CollisionObjectCylinder* TAC_CALL CreateNew();
00065
00066 TA_OBFUSCATION_RESERVED_OFF
00067
00068 #ifndef DOXYGEN
00069 friend void TAC_CALL TestCylinderAgainstCylinder(
00070 const CollisionObjectSimple& oA,
00071 const MFrame& startFrameA,
00072 const MFrame& endFrameA,
00073 bool bDoSweep,
00074 const CollisionObjectSimple& oB,
00075 CollisionCallData* pCollisionCallData);
00076
00077 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestCylinderAgainstCylinder)
00078 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestCylinderAgainstConvexObject)
00079 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstCylinder)
00080 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestCapsuleAgainstCylinder)
00081
00082 TA_DEFINE_FRIEND_SIMPLE_VS_COMPLEX_COLLISION(TestCylinderAgainstCachedPolyData)
00083
00084 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestCylinderAgainstLineList)
00085
00086 #endif
00087
00088 private:
00089 float m_fRadius;
00090 Vec3 m_v3A;
00091 Vec3 m_v3B;
00092
00093 CollisionObjectCylinder();
00094 ~CollisionObjectCylinder();
00095 virtual const char* GetFileHeaderString() const { return "TAColObjCylinder"; }
00096 };
00097
00098 inline const Vec3& CollisionObjectCylinder::GetPointA() const { return m_v3A; }
00099 inline const Vec3& CollisionObjectCylinder::GetPointB() const { return m_v3B; }
00100 inline float CollisionObjectCylinder::GetRadius() const { return m_fRadius; }
00101
00102 #ifndef DOXYGEN
00103 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestCylinderAgainstCylinder)
00104 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstCylinder)
00105 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestCapsuleAgainstCylinder)
00106
00107 TA_DEFINE_SIMPLE_VS_COMPLEX_COLLISION(TestCylinderAgainstCachedPolyData)
00108
00109 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestCylinderAgainstLineList)
00110 #endif
00111
00112 }
00113
00114
00115 #endif
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.