00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef TA_DYNAMICOBJECTCOLLISIONITERATOR_H
00013 #define TA_DYNAMICOBJECTCOLLISIONITERATOR_H
00014
00015 #ifndef TA_DYNAMICOBJECTPAIR_H
00016 #include "DynamicObjectPair.h"
00017 #endif // TA_DYNAMICOBJECTPAIR_H
00018
00019 TA_OBFUSCATION_SKIP_PASS_2
00020
00021 namespace TA
00022 {
00023
00024 class DynamicObject;
00025
00026 class DynamicObjectCollisionIterator
00027 {
00028 public:
00029 TA_OBFUSCATION_RESERVED_ON
00030 DynamicObjectCollisionIterator();
00031 ~DynamicObjectCollisionIterator();
00032 DynamicObjectCollisionIterator(const DynamicObjectCollisionIterator& that);
00033 void Finalise() ;
00034 void operator ++();
00035 DynamicObjectCollisionIterator& operator = (const DynamicObjectCollisionIterator& that);
00036 bool operator == (const DynamicObjectCollisionIterator& that) const ;
00037 Collision& operator *();
00038 bool AtEnd();
00039 TA_OBFUSCATION_RESERVED_OFF
00040
00041 private:
00042
00043 friend class DynamicObject;
00044
00045 DynamicObject* m_pDynamicObject;
00046 DynamicObjectPairListItem* m_pPairItem;
00047 DynamicObjectPair::CollisionIterator itCollision;
00048
00049 DynamicObjectCollisionIterator(DynamicObject* pDynamicObject, DynamicObjectPairListItem* pPairItem)
00050 {
00051 m_pDynamicObject = pDynamicObject;
00052 m_pPairItem = pPairItem;
00053 GoToNextPairContainingACollision();
00054 }
00055
00056 void GoToNextPairContainingACollision()
00057 {
00058 for (; m_pPairItem; m_pPairItem = m_pPairItem->m_pNext)
00059 {
00060 if (!m_pPairItem->pPair->collisionList.IsEmpty())
00061 {
00062 itCollision = m_pPairItem->pPair->collisionList.GetIterator();
00063 break;
00064 }
00065 }
00066 }
00067 };
00068
00069 inline DynamicObjectCollisionIterator::DynamicObjectCollisionIterator()
00070 {
00071 m_pDynamicObject = 0;
00072 m_pPairItem = 0;
00073 }
00074 inline DynamicObjectCollisionIterator::~DynamicObjectCollisionIterator()
00075 {
00076 }
00077 inline DynamicObjectCollisionIterator::DynamicObjectCollisionIterator(const DynamicObjectCollisionIterator& that)
00078 {
00079 m_pDynamicObject = that.m_pDynamicObject;
00080 m_pPairItem = that.m_pPairItem;
00081 itCollision = that.itCollision;
00082 }
00083 inline void DynamicObjectCollisionIterator::Finalise()
00084 {
00085 m_pDynamicObject = 0;
00086 m_pPairItem = 0;
00087 itCollision.Finalise();
00088 }
00089 inline void DynamicObjectCollisionIterator::operator ++()
00090 {
00091 if (m_pPairItem)
00092 {
00093 ++itCollision;
00094 if (itCollision.AtEnd())
00095 {
00096 m_pPairItem = m_pPairItem->m_pNext;
00097 GoToNextPairContainingACollision();
00098 }
00099 }
00100 }
00101 inline DynamicObjectCollisionIterator& DynamicObjectCollisionIterator::operator = (const DynamicObjectCollisionIterator& that)
00102 {
00103 m_pDynamicObject = that.m_pDynamicObject;
00104 m_pPairItem = that.m_pPairItem;
00105 itCollision = that.itCollision;
00106 return *this;
00107 }
00108 inline bool DynamicObjectCollisionIterator::operator == (const DynamicObjectCollisionIterator& that) const
00109 {
00110 return
00111 (m_pDynamicObject == that.m_pDynamicObject &&
00112 m_pPairItem == that.m_pPairItem &&
00113 itCollision == that.itCollision);
00114 }
00115 inline Collision& DynamicObjectCollisionIterator::operator *()
00116 {
00117 return *itCollision;
00118 }
00119 inline bool DynamicObjectCollisionIterator::AtEnd()
00120 {
00121 return m_pPairItem == 0;
00122 }
00123
00124 }
00125
00126 #endif // TA_DYNAMICOBJECTCOLLISIONITERATOR_H
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.