00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef TA_COLLISIONGRID_H
00013 #define TA_COLLISIONGRID_H
00014
00015 #ifndef TA_MATHS_H
00016 #include "../Common/Maths.h"
00017 #endif // TA_MATHS_H
00018
00019 #ifndef TA_ARRAY_H
00020 #include "../Common/Array.h"
00021 #endif // TA_ARRAY_H
00022
00023 #ifndef TA_VECTOR_H
00024 #include "../Common/Vector.h"
00025 #endif // TA_VECTOR_H
00026
00027 #ifndef TA_SPACEDIVISION_H
00028 #include "SpaceDivision.h"
00029 #endif // TA_SPACEDIVISION_H
00030
00031 namespace TA
00032 {
00033
00034 struct AABB;
00035
00036 class TAPHYSICS_CLASS CollisionGrid : public SpaceDivision
00037 {
00038 public:
00039 CollisionGrid();
00040 ~CollisionGrid();
00041
00042 void Initialise(
00043 float fMinElementSize,
00044 int nMaxMemory,
00045 const AABB& aabb,
00046 int nAxisX,
00047 int nAxisY);
00048 void Finalise();
00049
00050 void Add(SpaceDivisionObject& object);
00051 void Remove(SpaceDivisionObject& object);
00052
00053 void ForAllIntersections(
00054 const AABB& aabb,
00055 void (TAC_CALL *callBack)(SpaceDivisionObject& object, void* pData),
00056 void* pCallBackData);
00057
00058 void ForAllIntersectionsWithLineSegment(
00059 const Vec3& v3Start,
00060 const Vec3& v3End,
00061 void (TAC_CALL *callBack)(SpaceDivisionObject& object, void* pData),
00062 void* pCallBackData);
00063 inline int WorldXToGridX(float fWorldX) { return FastFloatToInt((fWorldX + m_fOffsetX) * m_fScaleX); }
00064 inline int WorldYToGridY(float fWorldY) { return FastFloatToInt((fWorldY + m_fOffsetY) * m_fScaleY); }
00065
00066 private:
00067 int m_nAxisX;
00068 int m_nAxisY;
00069 int m_nSizeX;
00070 int m_nSizeY;
00071 float m_fOffsetX;
00072 float m_fOffsetY;
00073 float m_fScaleX;
00074 float m_fScaleY;
00075 Array<SpaceDivisionObject*, false> m_gridDataArray;
00076 SpaceDivisionObject* m_pBigObjectList;
00077
00078 SpaceDivisionObject** GetListAtGridPos(int nX, int nY) { return &m_gridDataArray[nY * m_nSizeX + nX]; }
00079 };
00080
00081 };
00082
00083 #endif // TA_COLLISIONGRID_H
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.