Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __SP_COLLISION_MATERIAL_H__
00009 #define __SP_COLLISION_MATERIAL_H__
00010
00011
00012 #include "Base/spStandard.hpp"
00013 #include "Base/spBaseObject.hpp"
00014 #include "SceneGraph/Collision/spCollisionNode.hpp"
00015
00016
00017 namespace sp
00018 {
00019 namespace scene
00020 {
00021
00022
00031 typedef boost::function<bool (CollisionMaterial* Material, CollisionNode* Node, const CollisionNode* Rival, const SCollisionContact &Contact)> CollisionContactCallback;
00032
00033
00038 class SP_EXPORT CollisionMaterial : public BaseObject
00039 {
00040
00041 public:
00042
00043 CollisionMaterial();
00044 ~CollisionMaterial();
00045
00046
00047
00049 void addRivalMaterial(CollisionMaterial* Rival);
00051 void removeRivalMaterial(CollisionMaterial* Rival);
00052
00053
00054
00056 inline void setContactCallback(const CollisionContactCallback &Callback)
00057 {
00058 CollContactCallback_ = Callback;
00059 }
00060 inline CollisionContactCallback getContactCallback() const
00061 {
00062 return CollContactCallback_;
00063 }
00064
00066 inline const std::vector<CollisionNode*>& getNodeList() const
00067 {
00068 return CollNodes_;
00069 }
00071 inline const std::vector<CollisionMaterial*>& getRivalList() const
00072 {
00073 return RivalCollMaterials_;
00074 }
00075
00076 private:
00077
00078 friend class CollisionNode;
00079 friend class CollisionGraph;
00080
00081
00082
00083 void addCollisionNode(CollisionNode* Node);
00084 void removeCollisionNode(CollisionNode* Node);
00085
00086
00087
00088 std::vector<CollisionNode*> CollNodes_;
00089 std::vector<CollisionMaterial*> RivalCollMaterials_;
00090
00091 CollisionContactCallback CollContactCallback_;
00092
00093 };
00094
00095
00096 }
00097
00098 }
00099
00100
00101 #endif
00102
00103
00104
00105