00001
00002
00003
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef TA_COLLISIONOBJECTAABBMESH_H
00015 #define TA_COLLISIONOBJECTAABBMESH_H
00016
00017 #ifndef TA_COLLISIONCONSTANTS_H
00018 #include "CollisionConstants.h"
00019 #endif // TA_COLLISIONCONSTANTS_H
00020
00021 #ifndef TA_COLLISIONOBJECTCOMPLEX_H
00022 #include "CollisionObjectComplex.h"
00023 #endif // TA_COLLISIONOBJECTCOMPLEX_H
00024
00025 TA_OBFUSCATION_SKIP_PASS_2
00026
00027 namespace TA
00028 {
00029
00030 class CollisionObjectBox;
00031 class CollisionObjectConvex;
00032 class Collision;
00033 struct MFrame;
00034 struct AABB;
00035
00036 class TAPHYSICS_CLASS CollisionObjectAABBMesh : public CollisionObjectComplex
00037 {
00038 public:
00039 struct Polygon
00040 {
00041
00042 float fNormalX;
00043 float fNormalY;
00044 float fNormalZ;
00045 u32 nCollisionID;
00046 int nAttribute;
00047 int nNumVertices;
00048 int pVertexList[k_nMaxNumVerticesInPolygon];
00049 };
00050
00051 struct Data;
00052 friend struct Data;
00053
00054
00055
00056
00057 TA_OBFUSCATION_RESERVED_ON
00058 void Initialise(int nNumVertices, int nNumPolygons, int nNumPolygonIndices);
00059 void Finalise();
00060 TA_OBFUSCATION_RESERVED_OFF
00062
00063 #ifndef TA_WRAPPER
00064 void Serialise(Serialiser& serialiser, const Version& version);
00065 #endif // TA_WRAPPER
00066
00067
00068 TA_OBFUSCATION_RESERVED_ON
00069 virtual bool Serialisable() const { return true; }
00070
00071 void Render();
00072
00073 void AddVertex(const Vec3& v3Pos);
00074 void AddPolygon(int nNumVertices, const int* pnIndexList, u32 nAttribute = 0x0);
00075 void FinishedAddingGeometry();
00076
00077 #ifndef TA_WRAPPER
00078 const Data* GetData() const;
00079 #endif // TA_WRAPPER
00080
00081 bool TestLineForCollision(
00082 const Vec3& v3Start,
00083 const Vec3& v3Normal,
00084 float fLength,
00085 Collision& collision) const;
00086 #ifndef TA_WRAPPER
00087 void CachedLocalPolygons(
00088 CollisionObjectCachedPolyData& cachedPolyData,
00089 const AABB& aabb,
00090 void* pDynamicObjectUserData) const;
00091 #endif // TA_WRAPPER
00092
00093 virtual const AABB& GetAABB() const;
00094
00095 static CollisionObjectAABBMesh* TAC_CALL CreateNew();
00096
00097
00098
00099
00100 protected:
00101 CollisionObjectAABBMesh();
00102 ~CollisionObjectAABBMesh();
00103 TA_OBFUSCATION_RESERVED_OFF
00104
00105 private:
00106 virtual const Char* GetFileHeaderString() const { return "TAColObjAABBMesh"; }
00107
00108 Data* m_pData;
00109
00110 void AddPolygonToAABBTree(Polygon* pPolygon);
00111 };
00112
00113 inline const CollisionObjectAABBMesh::Data* CollisionObjectAABBMesh::GetData() const { return m_pData; }
00114
00115 }
00116
00117 #endif // TA_COLLISIONOBJECTAABBMESH_H
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.