summaryrefslogtreecommitdiffstats
path: root/Room.cpp
blob: 72a9d2290c434278f3dbdefb508cc21757d1f5b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#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;
  }
}