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

DynamicObjectCollisionIterator.h

00001 //---------------------------------------------------------------------------------
00002 // File Name: DynamicObjectCollisionIterator.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_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.