00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _POLYGONCOLLISIONSHAPE_
00019 #define _POLYGONCOLLISIONSHAPE_
00020
00021 #include <iostream>
00022 #include <vector>
00023
00024 #include "game/BaseCollisionShape.h"
00025
00026 #include "util/Vector2.h"
00027
00028 class PolygonCollisionShape : public BaseCollisionShape
00029 {
00030 public:
00031 typedef std::vector<Vector2> VertexVector;
00032 private:
00033
00034 VertexVector m_vertices;
00035
00036 public:
00037 PolygonCollisionShape() { }
00038
00039 PolygonCollisionShape(const Material & material)
00040 :BaseCollisionShape(material)
00041 {
00042 }
00043
00044 VertexVector & GetVertices() { return m_vertices; }
00045 const VertexVector & GetVertices() const { return m_vertices; }
00046
00047 virtual void FromStream(std::istream& is);
00048 virtual void ToStream(std::ostream& os) const;
00049
00050 virtual COLLISIONSHAPETYPE GetType() const { return COLLISIONSHAPETYPE_POLYGON; }
00051 };
00052
00053 inline void PolygonCollisionShape::FromStream(std::istream& is)
00054 {
00055 BaseCollisionShape::FromStream(is);
00056
00057 int nNumShapes = 0;
00058 is >> nNumShapes;
00059
00060 for(int i = 0; i < nNumShapes; ++i)
00061 {
00062 Vector2 vertex;
00063 is >> vertex;
00064 m_vertices.push_back(vertex);
00065 }
00066 }
00067
00068 inline void PolygonCollisionShape::ToStream(std::ostream& os) const
00069 {
00070 BaseCollisionShape::ToStream(os);
00071
00072 os << m_vertices.size() << " ";
00073
00074 for(size_t i = 0; i < m_vertices.size(); ++i)
00075 {
00076 os << m_vertices[i] << " ";
00077 }
00078 }
00079
00080 #endif