True Axis Physics SDK 1.2.0.1 Beta Documentation
www.trueaxis.com

CollisionObjectCylinder.h

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------------
00002 // File Name: CollisionObjectCylinder.h
00003 // Description:
00006 //
00007 // Copyright (C) 2004 - 2006 True Axis Pty Ltd, Australia. 
00008 // All Rights Reserved.
00009 //
00010 // History:
00011 //      Created File.
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 // DOXYGEN
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 // DOXYGEN
00111 
00112 }
00113 
00114 
00115 #endif // TA_COLLISIONOBJECTCYLINDER_H


© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.