68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#include "Room.h"
|
|
#include "LevelEdge.h"
|
|
|
|
|
|
const Room& Room::operator=(const Room &room) {
|
|
vertices.clear();
|
|
edges.clear();
|
|
|
|
name = room.name;
|
|
height = room.height;
|
|
|
|
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) {
|
|
vertices.push_back(SharedPtr<RoomVertex>(new RoomVertexDirect(v)));
|
|
|
|
if(vertices.size() < 2)
|
|
return;
|
|
|
|
if(vertices.size() == 2) {
|
|
LevelVertex v1(this, 0, this), v2(this, 1, this);
|
|
|
|
edges.push_back(Edge(v1, v2));
|
|
edges.push_back(Edge(v2, v1));
|
|
|
|
return;
|
|
}
|
|
|
|
edges.pop_back();
|
|
LevelVertex v1(edges.back().getVertex2());
|
|
LevelVertex v2(this, vertices.size()-1, this);
|
|
LevelVertex v3(edges.front().getVertex1());
|
|
|
|
edges.push_back(Edge(v1, v2));
|
|
edges.push_back(Edge(v2, v3));
|
|
}
|
|
|
|
std::vector<SharedPtr<LevelObject> > Room::getChildren() {
|
|
std::vector<SharedPtr<LevelObject> > children;
|
|
|
|
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++)
|
|
children.push_back(SharedPtr<LevelObject>(new LevelEdge(this, i, this)));
|
|
|
|
return children;
|
|
}
|
|
|
|
void Room::rotate(Vertex m, float a) {
|
|
float s = sinf(a);
|
|
float c = cosf(a);
|
|
|
|
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;
|
|
}
|
|
}
|