00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _PHYSICALCOMPONENT_
00019 #define _PHYSICALCOMPONENT_
00020
00021 #include <vector>
00022
00023 #include "game/AbstractCollisionListener.h"
00024 #include "game/BaseComponent.h"
00025
00026 #include "util/Macros.h"
00027
00028 class PhysicalComponent : public BaseComponent
00029 {
00030 private:
00031
00032 DEFINE_STL_TYPE(std::vector<AbstractCollisionListenerPtr>, CollisionListenerVector);
00033
00034 CollisionListenerVector m_collisionListeners;
00035
00036 public:
00037 DEFAULT_COMPONENT_CONSTRUCTOR(BaseComponent, PhysicalComponent, , , );
00038
00039 void HandleCollision(const CollisionInfo & collision);
00040
00041 void AddCollisionListener(AbstractCollisionListenerPtr collisionListener);
00042 void RemoveCollisionListener(AbstractCollisionListenerPtr collisionListener);
00043 };
00044
00045 inline void PhysicalComponent::AddCollisionListener(AbstractCollisionListenerPtr collisionListener)
00046 {
00047 m_collisionListeners.push_back(collisionListener);
00048 }
00049
00050 inline void PhysicalComponent::RemoveCollisionListener(AbstractCollisionListenerPtr collisionListener)
00051 {
00052 FOREACH(CollisionListenerVector, i, m_collisionListeners)
00053 {
00054 if((*i) == collisionListener)
00055 {
00056 m_collisionListeners.erase(i);
00057 break;
00058 }
00059 }
00060 }
00061
00062 inline void PhysicalComponent::HandleCollision(const CollisionInfo & collision)
00063 {
00064 FOREACH(CollisionListenerVector, i, m_collisionListeners)
00065 {
00066 (*i)->OnCollision(collision);
00067 }
00068 }
00069
00070 #endif