00001
00002
00003
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef TA_COLLISIONOBJECTCOMBO_H
00015 #define TA_COLLISIONOBJECTCOMBO_H
00016
00017 #ifndef TA_REFCOUNT_H
00018 #include "../Common/RefCount.h"
00019 #endif // TA_REFCOUNT_H
00020
00021 #ifndef TA_TYPES_H
00022 #include "../Common/Types.h"
00023 #endif // TA_TYPES_H
00024
00025 #ifndef TA_AABB_H
00026 #include "../Common/AABB.h"
00027 #endif // TA_AABB_H
00028
00029 #ifndef TA_COLLISION_H
00030 #include "Collision.h"
00031 #endif // TA_COLLISION_H
00032
00033 #ifndef TA_PHYSICSCOMMON_H
00034 #include "PhysicsCommon.h"
00035 #endif // TA_PHYSICSCOMMON_H
00036
00037 #ifndef TA_COLLISIONOBJECTSIMPLE_H
00038 #include "CollisionObjectSimple.h"
00039 #endif // TA_COLLISIONOBJECTSIMPLE_H
00040
00041 #ifndef TA_COLLISIONOBJECTLINELIST_H
00042 #include "CollisionObjectLineList.h"
00043 #endif // TA_COLLISIONOBJECTLINELIST_H
00044
00045 TA_OBFUSCATION_SKIP_PASS_2
00046
00047 namespace TA
00048 {
00049
00050 struct MFrame;
00051 class CollisionObjectComplex;
00052 class CollisionObject;
00053 struct TemporalCollisionData;
00054 struct Globals;
00055
00056 class TAPHYSICS_CLASS CollisionObjectCombo : public CollisionObject
00057 {
00058 public:
00059 struct Data;
00060 TA_OBFUSCATION_RESERVED_ON
00061
00062 void Initialise();
00063 void InitialiseAsABox(float fSizeX, float fSizeY, float fSizeZ);
00064 void InitialiseAsABox(const AABB& aabb);
00065 void InitialiseAsAnOrientedBox(const AABB& aabb, const MFrame& mFrame);
00066 void InitialiseAsACapsule(const Vec3& v3Start, const Vec3& v3End, float fRadius);
00067 void InitialiseAsASphere(const Vec3& v3Center, float fRadius);
00068 void InitialiseAsACylinder(const Vec3& v3Start, const Vec3& v3End, float fRadius);
00069 bool InitialiseFromPointList(const Vec3* pv3PointList, int nNumPoints);
00070 void Finalise();
00072
00073 #ifndef TA_WRAPPER
00074 void Serialise(Serialiser& serialiser, const Version& version);
00075 #endif // TA_WRAPPER
00076
00077
00078 virtual bool Serialisable() const { return true; }
00079
00080 void AddCollisionObject(CollisionObjectSimple* pCollisionObject);
00081 void RemoveCollisionObject(CollisionObjectSimple* pCollisionObject);
00082 void RemoveCollisionObject(int nIndex);
00083 int GetNumCollisionObjects() const;
00084 CollisionObjectSimple* GetCollisionObject(int nIndex);
00085
00086
00087 void Render(const MFrame& mFrame);
00088
00089 const AABB& GetAABB() const;
00090 void CalculateMass(float fDensity, float& fMass, Vec3& v3CenterOfMass, Mat33& m33Inertia) const;
00091
00092 bool TestLineForCollision(
00093 const Vec3& v3Start,
00094 const Vec3& v3Normal,
00095 float fLength,
00096 Collision& collision) const;
00097 int GetMaxNumLineCollisions() const;
00098
00099 static CollisionObjectCombo* TAC_CALL CreateNew();
00100 TA_OBFUSCATION_RESERVED_OFF
00101
00102 #ifndef DOXYGEN
00103 friend void TAC_CALL TestMovementForCollision(
00104 Globals& globals,
00105 CollisionObjectCombo& objectA,
00106 const MFrame& startFrameA,
00107 const MFrame& endFrameA,
00108 CollisionObjectCombo& objectB,
00109 TemporalCollisionData* pTemporalCollisionData,
00110 OnCollisionCallback pFnOnCollisionCallback,
00111 void* pCallbackData);
00112
00113 friend void TAC_CALL TestMovementForCollision(
00114 Globals& globals,
00115 CollisionObjectCombo& mixed,
00116 const MFrame& startFrameA,
00117 const MFrame& endFrameA,
00118 CollisionObjectComplex& mesh,
00119 OnCollisionCallback pFnOnCollisionCallback,
00120 void* pCallbackData,
00121 void* pDynamicObjectUserData,
00122 bool bReversed);
00123 #endif // DOXYGEN
00124
00125 private:
00126 TA_OBFUSCATION_RESERVED_ON
00127 CollisionObjectCombo();
00128 ~CollisionObjectCombo();
00129 TA_OBFUSCATION_RESERVED_OFF
00130
00131 void UpdateBoundingBox();
00132 virtual const char* GetFileHeaderString() const { return "TAColObjCombo"; }
00133
00134 CollisionObjectLineList* m_pCollisionObjectLineList;
00135 Data* m_pData;
00136 AABB m_aabb;
00137 };
00138
00139 inline const AABB& CollisionObjectCombo::GetAABB() const { return m_aabb; }
00140 inline int CollisionObjectCombo::GetMaxNumLineCollisions() const { return m_pCollisionObjectLineList ? m_pCollisionObjectLineList->GetNumLines() : 0; }
00141
00142 #ifndef DOXYGEN
00143
00144 void TAC_CALL TestMovementForCollision(
00145 Globals& globals,
00146 CollisionObject& objectA,
00147 const MFrame& startFrameA,
00148 const MFrame& endFrameA,
00149 CollisionObject& objectB,
00150 TemporalCollisionData* pTemporalCollisionData,
00151 OnCollisionCallback pFnOnCollisionCallback,
00152 void* pCallbackData);
00153
00154 void TAC_CALL TestMovementForCollision(
00155 Globals& globals,
00156 CollisionObjectCombo& objectA,
00157 const MFrame& startFrameA,
00158 const MFrame& endFrameA,
00159 CollisionObjectCombo& objectB,
00160 TemporalCollisionData* pTemporalCollisionData,
00161 OnCollisionCallback pFnOnCollisionCallback,
00162 void* pCallbackData);
00163
00164 void TAC_CALL TestMovementForCollision(
00165 Globals& globals,
00166 CollisionObjectCombo& mixed,
00167 const MFrame& startFrameA,
00168 const MFrame& endFrameA,
00169 CollisionObjectComplex& complex,
00170 OnCollisionCallback pFnOnCollisionCallback,
00171 void* pCallbackData,
00172 void* pDynamicObjectUserData,
00173 bool bReverse);
00174 #endif // DOXYGEN
00175
00176 }
00177
00178 #endif // TA_COLLISIONOBJECTCOMBO_H
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.