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

CollisionObjectCombo.h

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------------
00002 // File Name: CollisionObjectCombo.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_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.