summaryrefslogtreecommitdiffstats
path: root/ToolAddPolygon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ToolAddPolygon.cpp')
-rw-r--r--ToolAddPolygon.cpp52
1 files changed, 49 insertions, 3 deletions
diff --git a/ToolAddPolygon.cpp b/ToolAddPolygon.cpp
index 37613bf..184d107 100644
--- a/ToolAddPolygon.cpp
+++ b/ToolAddPolygon.cpp
@@ -1,7 +1,8 @@
#include "ToolAddPolygon.h"
+#include <GL/gl.h>
-ToolAddPolygon::ToolAddPolygon(EditManager *editManager) {
+ToolAddPolygon::ToolAddPolygon(EditManager *editManager) : Renderer(editManager), sidebar(editManager) {
this->editManager = editManager;
image = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON);
@@ -13,9 +14,54 @@ ToolAddPolygon::~ToolAddPolygon() {
}
void ToolAddPolygon::activate() {
- editManager->addRoom();
+ newRoom = Room();
+
+ editManager->setSelectedObject(NULL);
}
void ToolAddPolygon::deactivate() {
- editManager->finishRoom();
+ editManager->addRoom(newRoom);
+}
+
+void ToolAddPolygon::render(const Level &level, const Rectangle &rect, float scale) {
+ if(editManager->polygonOk(newRoom))
+ glColor4f(0.0f, 0.7f, 1.0f, 0.2f);
+ else
+ glColor4f(1.0f, 0.3f, 0.3f, 0.2f);
+
+ fillPolygon(newRoom);
+
+ glLineWidth(2.0f);
+ glColor4f(0.0f, 0.7f, 1.0f, 0.7f);
+ drawPolygon(newRoom, false);
+
+ if(!newRoom.empty() && editManager->getHoveredVertex()) {
+ if(!editManager->vertexOk(newRoom, *editManager->getHoveredVertex()))
+ glColor4f(1.0f, 0.3f, 0.3f, 0.7f);
+
+ glBegin(GL_LINES);
+
+ glVertex2f(newRoom.back().getX(), newRoom.back().getY());
+ glVertex2f(editManager->getHoveredVertex()->getX(), editManager->getHoveredVertex()->getY());
+
+ glEnd();
+ }
+}
+
+bool ToolAddPolygon::buttonPress(unsigned int button) {
+ if(button != 1)
+ return false;
+
+ if(!editManager->getHoveredVertex())
+ return false;
+
+ if(!editManager->vertexOk(newRoom, *editManager->getHoveredVertex()))
+ return false;
+
+ newRoom.push_back(*editManager->getHoveredVertex());
+
+ editManager->redraw();
+ sidebar.update();
+
+ return true;
}