1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /*
- * OPCODE - Optimized Collision Detection
- * Copyright (C) 2001 Pierre Terdiman
- * Homepage: http://www.codercorner.com/Opcode.htm
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**
- * Contains an implementation of the sweep-and-prune algorithm (moved from Z-Collide)
- * \file OPC_SweepAndPrune.h
- * \author Pierre Terdiman
- * \date January, 29, 2000
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Include Guard
- #ifndef __OPC_SWEEPANDPRUNE_H__
- #define __OPC_SWEEPANDPRUNE_H__
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**
- * User-callback, called by OPCODE for each colliding pairs.
- * \param id0 [in] id of colliding object
- * \param id1 [in] id of colliding object
- * \param user_data [in] user-defined data
- * \return TRUE to continue enumeration
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- typedef BOOL (*PairCallback) (udword id0, udword id1, void* user_data);
- class SAP_Element;
- class SAP_EndPoint;
- class SAP_Box;
- class OPCODE_API SAP_PairData
- {
- public:
- SAP_PairData();
- ~SAP_PairData();
- bool Init(udword nb_objects);
- void AddPair(udword id1, udword id2);
- void RemovePair(udword id1, udword id2);
- void DumpPairs(Pairs& pairs) const;
- void DumpPairs(PairCallback callback, void* user_data) const;
- private:
- udword mNbElements; //!< Total number of elements in the pool
- udword mNbUsedElements; //!< Number of used elements
- SAP_Element* mElementPool; //!< Array of mNbElements elements
- SAP_Element* mFirstFree; //!< First free element in the pool
- udword mNbObjects; //!< Max number of objects we can handle
- SAP_Element** mArray; //!< Pointers to pool
- // Internal methods
- SAP_Element* GetFreeElem(udword id, SAP_Element* next, udword* remap=null);
- inline_ void FreeElem(SAP_Element* elem);
- void Release();
- };
- class OPCODE_API SweepAndPrune
- {
- public:
- SweepAndPrune();
- ~SweepAndPrune();
- bool Init(udword nb_objects, const AABB** boxes);
- bool UpdateObject(udword i, const AABB& box);
- void GetPairs(Pairs& pairs) const;
- void GetPairs(PairCallback callback, void* user_data) const;
- private:
- SAP_PairData mPairs;
- udword mNbObjects;
- SAP_Box* mBoxes;
- SAP_EndPoint* mList[3];
- // Internal methods
- bool CheckListsIntegrity();
- };
- #endif //__OPC_SWEEPANDPRUNE_H__
|