summaryrefslogtreecommitdiffstats
path: root/EditManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'EditManager.cpp')
-rw-r--r--EditManager.cpp68
1 files changed, 12 insertions, 56 deletions
diff --git a/EditManager.cpp b/EditManager.cpp
index bae061d..2d743f5 100644
--- a/EditManager.cpp
+++ b/EditManager.cpp
@@ -2,7 +2,7 @@
#include "Window.h"
-bool EditManager::lineOk(const Line& l) const {
+bool EditManager::lineOk(const Room &newRoom, const Line &l) const {
Line l2;
for(size_t i = 0; i+2 < newRoom.size(); i++) {
@@ -30,10 +30,8 @@ bool EditManager::lineOk(const Line& l) const {
EditManager::EditManager(Window *window) {
this->window = window;
- selectedObject = NULL;
- mode = VIEW;
-
hoveredObject = NULL;
+ selectedObject = NULL;
hasHoveredVertex = false;
}
@@ -42,40 +40,18 @@ void EditManager::redraw() {
window->redraw();
}
-void EditManager::addRoom() {
- if(mode == VIEW) {
- newRoom = Room();
- mode = ADD;
+bool EditManager::addRoom(const Room &newRoom) {
+ if(newRoom.size() > 2 && polygonOk(newRoom)) {
+ Room *room = new Room(newRoom);
+ room->setName(idManager.generate("room"));
- selectedObject = &newRoom;
-
- window->update();
- }
-}
-
-void EditManager::finishRoom() {
- if(mode == ADD) {
- mode = VIEW;
-
- if(newRoom.size() > 2 && polygonOk(newRoom)) {
- newRoom.setName(idManager.generate("room"));
- window->getLevel().push_back(SharedPtr<LevelObject>(new Room(newRoom)));
- selectedObject = &*window->getLevel().back();
- }
- else {
- selectedObject = NULL;
- }
+ window->getLevel().push_back(SharedPtr<LevelObject>(room));
+ selectedObject = &*window->getLevel().back();
- window->update();
+ return true;
}
-}
-
-void EditManager::addVertex(const Vertex &v) {
- if(mode != ADD)
- return;
- newRoom.push_back(v);
- window->update();
+ return false;
}
Vertex* EditManager::getHoveredVertex() {
@@ -107,27 +83,7 @@ void EditManager::setHoveredVertex(Vertex *v) {
window->update();
}
-void EditManager::buttonPress(unsigned int button) {
- switch(button) {
- case 1:
- if(!hasHoveredVertex)
- break;
-
- switch(mode) {
- case VIEW:
- selectedObject = hoveredObject;
- break;
-
- case ADD:
- if(vertexOk(hoveredVertex))
- addVertex(hoveredVertex);
- }
-
- window->update();
- }
-}
-
-bool EditManager::vertexOk(const Vertex& v) const {
+bool EditManager::vertexOk(const Room &newRoom, const Vertex &v) const {
Line l;
for(Level::iterator room = window->getLevel().begin(); room != window->getLevel().end(); room++) {
@@ -140,7 +96,7 @@ bool EditManager::vertexOk(const Vertex& v) const {
l.setVertex1(newRoom.back());
l.setVertex2(v);
- return lineOk(l);
+ return lineOk(newRoom, l);
}
bool EditManager::polygonOk(const Polygon& polygon) const {