summaryrefslogtreecommitdiffstats
path: root/Room.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Room.cpp')
-rw-r--r--Room.cpp29
1 files changed, 17 insertions, 12 deletions
diff --git a/Room.cpp b/Room.cpp
index 7608e41..72a9d22 100644
--- a/Room.cpp
+++ b/Room.cpp
@@ -3,25 +3,30 @@
const Room& Room::operator=(const Room &room) {
- polygon.clear();
+ vertices.clear();
edges.clear();
name = room.name;
height = room.height;
- for(Polygon::const_iterator v = room.polygon.begin(); v != room.polygon.end(); v++)
- addVertex(*v);
+ vertices = room.vertices;
+
+ for(std::vector<Edge>::const_iterator edge = room.edges.begin(); edge != room.edges.end(); edge++) {
+ LevelVertex v1(this, edge->getVertex1().getId(), this);
+ LevelVertex v2(this, edge->getVertex2().getId(), this);
+ edges.push_back(Edge(v1, v2));
+ }
return room;
}
void Room::addVertex(Vertex v) {
- polygon.push_back(v);
+ vertices.push_back(SharedPtr<RoomVertex>(new RoomVertexDirect(v)));
- if(polygon.size() < 2)
+ if(vertices.size() < 2)
return;
- if(polygon.size() == 2) {
+ if(vertices.size() == 2) {
LevelVertex v1(this, 0, this), v2(this, 1, this);
edges.push_back(Edge(v1, v2));
@@ -32,7 +37,7 @@ void Room::addVertex(Vertex v) {
edges.pop_back();
LevelVertex v1(edges.back().getVertex2());
- LevelVertex v2(this, polygon.size()-1, this);
+ LevelVertex v2(this, vertices.size()-1, this);
LevelVertex v3(edges.front().getVertex1());
edges.push_back(Edge(v1, v2));
@@ -42,7 +47,7 @@ void Room::addVertex(Vertex v) {
std::vector<SharedPtr<LevelObject> > Room::getChildren() {
std::vector<SharedPtr<LevelObject> > children;
- for(size_t i = 0; i < polygon.size(); i++)
+ for(size_t i = 0; i < vertices.size(); i++)
children.push_back(SharedPtr<LevelObject>(new LevelVertex(this, i, this)));
for(size_t i = 0; i < edges.size(); i++)
@@ -55,9 +60,9 @@ void Room::rotate(Vertex m, float a) {
float s = sinf(a);
float c = cosf(a);
- for(Polygon::iterator v = polygon.begin(); v != polygon.end(); v++) {
- *v -= m;
- v->setLocation(c*v->getX() - s*v->getY(), c*v->getY() + s*v->getX());
- *v += m;
+ for(std::vector<SharedPtr<RoomVertex> >::iterator v = vertices.begin(); v != vertices.end(); v++) {
+ **v -= m;
+ (*v)->setLocation(c*(**v)->getX() - s*(**v)->getY(), c*(**v)->getY() + s*(**v)->getX());
+ **v += m;
}
}