00001
00002
00003
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef TA_COLLISIONOBJECTSPHERE_H
00015 #define TA_COLLISIONOBJECTSPHERE_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 CollisionObjectSphere : public CollisionObjectSimple
00034 {
00035 public:
00036 TA_OBFUSCATION_RESERVED_ON
00037 void Initialise(
00038 const Vec3& v3Center,
00039 float fRadius);
00040 void Finalise();
00042
00043 #ifndef TA_WRAPPER
00044 void Serialise(Serialiser& serialiser, const Version& version);
00045 #endif // TA_WRAPPER
00046
00047 bool Serialisable() const { return true; }
00048
00049 void Render(const MFrame& mFrame);
00050 AABB CalculateBoundingBox() const;
00051 void CalculateMass(float fDensity, float& fMass, Vec3& v3CenterOfMass, Mat33& m33Inertia) const;
00052
00053 const Vec3& GetPoint() const;
00054 float GetRadius() const;
00055
00056 virtual bool TestLineForCollision(
00057 const Vec3& v3Start,
00058 const Vec3& v3Normal,
00059 float fLength,
00060 Collision& collision) const;
00061
00062 static CollisionObjectSphere* TAC_CALL CreateNew();
00063
00064 TA_OBFUSCATION_RESERVED_OFF
00065
00066 #ifndef DOXYGEN
00067 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstSphere)
00068 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstConvexObject)
00069 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstCapsule)
00070 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstCylinder)
00071 TA_DEFINE_FRIEND_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstLineList)
00072
00073 TA_DEFINE_FRIEND_SIMPLE_VS_COMPLEX_COLLISION(TestSphereAgainstCachedPolyData)
00074 #endif
00075
00076 private:
00077 float m_fRadius;
00078 Vec3 m_v3Center;
00079
00080 CollisionObjectSphere();
00081 ~CollisionObjectSphere();
00082
00083 virtual const char* GetFileHeaderString() const { return "TAColObjSphere"; }
00084 };
00085
00086 inline const Vec3& CollisionObjectSphere::GetPoint() const { return m_v3Center; }
00087 inline float CollisionObjectSphere::GetRadius() const { return m_fRadius; }
00088
00089 #ifndef DOXYGEN
00090 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstSphere)
00091 TA_DEFINE_SIMPLE_VS_SIMPLE_COLLISION(TestSphereAgainstLineList)
00092
00093 TA_DEFINE_SIMPLE_VS_COMPLEX_COLLISION(TestSphereAgainstCachedPolyData)
00094 #endif
00095
00096 }
00097
00098
00099 #endif
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.