From 5bb27d2b6d7915f03fd7e39444a2ff0fac537672 Mon Sep 17 00:00:00 2001 From: neoraider Date: Tue, 20 May 2008 09:55:04 +0000 Subject: zoomedit: * Added 2D vector maths * Made rooms selectable --- src/View/TopView.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) (limited to 'src/View/TopView.cpp') diff --git a/src/View/TopView.cpp b/src/View/TopView.cpp index 9ce6039..6ab00d9 100644 --- a/src/View/TopView.cpp +++ b/src/View/TopView.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -94,11 +95,14 @@ void TopView::drawGrid() { glEnd(); } -void TopView::renderRoom(Data::Room *room) { +void TopView::renderRoom(Data::Room *room, bool selected) { const std::list &floor = room->getFloorTriangles(); std::multiset edges; - glColor4f(0.0f, 0.7f, 1.0f, 0.3f); + if(selected) + glColor4f(0.0f, 0.7f, 1.0f, 0.2f); + else + glColor4f(0.0f, 0.7f, 1.0f, 0.3f); glBegin(GL_TRIANGLES); @@ -127,8 +131,14 @@ void TopView::renderRoom(Data::Room *room) { } } - glColor4f(0.0f, 0.7f, 1.0f, 0.7f); - glLineWidth(1.0f); + if(selected) { + glColor4f(1.0f, 1.0f, 1.0f, 0.9f); + glLineWidth(2.0f); + } + else { + glColor4f(0.0f, 0.7f, 1.0f, 0.7f); + glLineWidth(1.0f); + } glBegin(GL_LINES); @@ -206,8 +216,39 @@ void TopView::render() { const std::list &rooms = level->getRooms(); for(std::list::const_iterator room = rooms.begin(); room != rooms.end(); ++room) - renderRoom(*room); + renderRoom(*room, *room == selectedRoom); } +void TopView::click(float x, float y, unsigned int button) { + if(button != 1) + return; + + Math::Vertex2D v(xCenter + x/scale, yCenter + y/scale); + + selectedRoom = 0; + + const std::list& rooms = level->getRooms(); + + for(std::list::const_iterator room = rooms.begin(); room != rooms.end(); ++room) { + const std::list& triangles = (*room)->getFloorTriangles(); + + for(std::list::const_iterator t = triangles.begin(); t != triangles.end(); ++t) { + Math::Vertex2D v1((*t)->getVertex(0).getX(), (*t)->getVertex(0).getZ()); + Math::Vertex2D v2((*t)->getVertex(1).getX(), (*t)->getVertex(1).getZ()); + Math::Vertex2D v3((*t)->getVertex(2).getX(), (*t)->getVertex(2).getZ()); + + if(Math::Triangle2D(v1, v2, v3).contains(v)) { + selectedRoom = *room; + break; + } + } + + if(selectedRoom) + break; + } + + signalUpdate().emit(); +} + } } -- cgit v1.2.3