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

CollisionGrid.h

00001 //---------------------------------------------------------------------------------
00002 // File Name: CollisionGrid.h
00003 // Description: 
00004 //
00005 // Copyright (C) 2004 - 2006 True Axis Pty Ltd, Australia. 
00006 // All Rights Reserved.
00007 //
00008 // History:
00009 //      Created File.
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.