From 356efaf89afdad141b313767e1a2b89de3c08d0a Mon Sep 17 00:00:00 2001 From: neoraider Date: Sun, 6 Apr 2008 13:29:03 +0000 Subject: zoomedit: Recreated ZoomEdit based on Glademm. --- Renderer.cpp | 255 ----------------------------------------------------------- 1 file changed, 255 deletions(-) delete mode 100644 Renderer.cpp (limited to 'Renderer.cpp') diff --git a/Renderer.cpp b/Renderer.cpp deleted file mode 100644 index 7255a4a..0000000 --- a/Renderer.cpp +++ /dev/null @@ -1,255 +0,0 @@ -#include "Renderer.h" -#include "PlayerStart.h" -#include - - -void Renderer::drawGrid(const Rectangle &rect, float scale) { - float depth = log10f(scale)-0.75f; - float depth2 = floorf(depth); - float step = powf(0.1f, depth2); - float f; - int i; - float x1 = rect.getVertex1().getX(), y1 = rect.getVertex1().getY(); - float x2 = rect.getVertex2().getX(), y2 = rect.getVertex2().getY(); - - - glBegin(GL_LINES); - - for(i = 0; 0.4f*(depth-depth2+i-1) < 0.5f; i++) { - f = fminf(0.4f*(depth-depth2+i), 0.5f); - glColor3f(f, f, f); - - for(f = x1 - fmodf(x1, step) - step; f <= x2; f+=step) { - glVertex2f(f, y1); - glVertex2f(f, y2); - } - - for(f = y1 - fmodf(y1, step) - step; f <= y2; f+=step) { - glVertex2f(x1, f); - glVertex2f(x2, f); - } - - step *= 10; - } - - glEnd(); -} - -void Renderer::fillPolygon(const Polygon &polygon) { - std::vector triangles; - - polygon.triangulate(triangles); - - glBegin(GL_TRIANGLES); - - for(std::vector::iterator t = triangles.begin(); t != triangles.end(); t++) { - glVertex2f(t->getVertexA().getX(), t->getVertexA().getY()); - glVertex2f(t->getVertexB().getX(), t->getVertexB().getY()); - glVertex2f(t->getVertexC().getX(), t->getVertexC().getY()); - } - - glEnd(); -} - -void Renderer::drawPolygon(const Polygon &polygon) { - glBegin(GL_LINE_LOOP); - - for(Polygon::const_iterator vertex = polygon.begin(); vertex != polygon.end(); vertex++) - glVertex2f(vertex->getX(), vertex->getY()); - - glEnd(); -} - -void Renderer::drawCircle(const Vertex &m, float r, int n) { - glBegin(GL_LINE_LOOP); - - for(int i = 0; i < n; i++) - glVertex2f(m.getX()+r*cosf(2*M_PI*i/n), m.getY()+r*sinf(2*M_PI*i/n)); - - glEnd(); -} - -void Renderer::drawCircleDotted(const Vertex &m, float r, int n, int d, float rot) { - glBegin(GL_LINES); - - for(int i = 0; i < n; i++) { - if(2*d*(i%(n/d)) >= n) - continue; - - glVertex2f(m.getX()+r*cosf(rot+2*M_PI*i/n), m.getY()+r*sinf(rot+2*M_PI*i/n)); - glVertex2f(m.getX()+r*cosf(rot+2*M_PI*(i+1)/n), m.getY()+r*sinf(rot+2*M_PI*(i+1)/n)); - } - - glEnd(); -} - -void Renderer::fillCircle(const Vertex &m, float r, int n) { - glBegin(GL_POLYGON); - - for(int i = 0; i < n; i++) - glVertex2f(m.getX()+r*cosf(2*M_PI*i/n), m.getY()+r*sinf(2*M_PI*i/n)); - - glEnd(); -} - -void Renderer::drawCross(const Vertex &m, float r) { - glBegin(GL_LINES); - - glVertex2f(m.getX()-r*M_SQRT1_2, m.getY()-r*M_SQRT1_2); - glVertex2f(m.getX()+r*M_SQRT1_2, m.getY()+r*M_SQRT1_2); - - glVertex2f(m.getX()+r*M_SQRT1_2, m.getY()-r*M_SQRT1_2); - glVertex2f(m.getX()-r*M_SQRT1_2, m.getY()+r*M_SQRT1_2); - - glEnd(); -} - -void Renderer::renderObject(const LevelObject &object, bool selected, bool hovered, float scale) { - if(object.isOfType("LevelVertex")) - renderLevelVertex(*(LevelVertex*)&object, selected, hovered, scale); - else if(object.isOfType("LevelEdge")) - renderLevelEdge(*(LevelEdge*)&object, selected, hovered, scale); - else if(object.isOfType("Room")) - renderRoom(*(Room*)&object, selected, hovered, scale); - else if(object.isOfType("PlayerStart")) - renderPlayerStart(*(PlayerStart*)&object, selected, hovered, scale); - else if(object.isOfType("Portal")) - renderPortal(*(Portal*)&object, selected, hovered, scale); -} - -void Renderer::renderLevelVertex(const LevelVertex &vertex, bool selected, bool hovered, float scale) { - if(!selected && !hovered) return; - - glColor4f(0.0f, 0.0f, 0.0f, 1.0f); - fillCircle(*vertex, 3.5f/scale, 16); - - glLineWidth(1.0f); - if(hovered) - glColor4f(1.0f, 0.9f, 0.0f, 0.9f); - else - glColor4f(1.0f, 0.7f, 0.0f, 0.9f); - drawCircle(*vertex, 3.5f/scale, 16); -} - -void Renderer::renderLevelEdge(const LevelEdge &edge, bool selected, bool hovered, float scale) { - if(selected) { - glColor4f(1.0f, 1.0f, 1.0f, 0.9f); - glLineWidth(2.0f); - } - else if(hovered) { - glColor4f(0.0f, 0.7f, 1.0f, 0.7f); - glLineWidth(2.0f); - } - else - return; - - glBegin(GL_LINES); - - glVertex2f(edge->getVertex1()->getX(), edge->getVertex1()->getY()); - glVertex2f(edge->getVertex2()->getX(), edge->getVertex2()->getY()); - - glEnd(); -} - -void Renderer::renderRoom(const Room &room, bool selected, bool hovered, float scale) { - if(selected) - glColor4f(0.0f, 0.7f, 1.0f, 0.2f); - else - glColor4f(0.0f, 0.7f, 1.0f, 0.3f); - - fillPolygon(room.getPolygon()); - - if(selected) { - glColor4f(1.0f, 1.0f, 1.0f, 0.9f); - glLineWidth(2.0f); - } - else if(hovered) { - glColor4f(0.0f, 0.7f, 1.0f, 0.7f); - glLineWidth(2.0f); - } - else { - glColor4f(0.0f, 0.7f, 1.0f, 0.7f); - glLineWidth(1.0f); - } - - glBegin(GL_LINES); - - for(size_t i = 0; i < room.getEdgeCount(); i++) { - const Edge *edge = room.getEdge(i); - glVertex2f(edge->getVertex1()->getX(), edge->getVertex1()->getY()); - glVertex2f(edge->getVertex2()->getX(), edge->getVertex2()->getY()); - } - - glEnd(); -} - -void Renderer::renderPlayerStart(const PlayerStart &start, bool selected, bool hovered, float scale) { - if(selected) { - glColor4f(1.0f, 1.0f, 1.0f, 0.9f); - glLineWidth(2.0f); - } - else if(hovered) { - glColor4f(0.0f, 0.7f, 0.7f, 0.7f); - glLineWidth(2.0f); - } - else { - glColor4f(0.0f, 0.7f, 0.7f, 0.7f); - glLineWidth(1.0f); - } - drawCircle(Vertex(start.getX(), start.getZ()), 0.3f); - - glLineWidth(2.0f); - glColor4f(1.0f, 1.0f, 1.0f, 0.7f); - drawCross(Vertex(start.getX(), start.getZ()), 0.5f/sqrtf(scale)); -} - -void Renderer::renderPortal(const Portal &portal, bool selected, bool hovered, float scale) { - if(selected) { - glColor4f(1.0f, 1.0f, 1.0f, 0.9f); - glLineWidth(2.0f); - } - else if(hovered) { - glColor4f(0.0f, 0.7f, 0.7f, 0.7f); - glLineWidth(2.0f); - } - else { - glColor4f(0.0f, 0.7f, 0.7f, 0.7f); - glLineWidth(1.0f); - } - - float s = sinf(portal.getOrientation()); - float c = cosf(portal.getOrientation()); - float x = portal.getWidth()/2*c; - float y = portal.getWidth()/2*s; - float ts = portal.getThickness()/2*s; - float tc = portal.getThickness()/2*c; - - glBegin(GL_LINES); - - glVertex2f(portal.getPosition().getX()-x+ts, portal.getPosition().getY()-y-tc); - glVertex2f(portal.getPosition().getX()-x-ts, portal.getPosition().getY()-y+tc); - - glVertex2f(portal.getPosition().getX()+x+ts, portal.getPosition().getY()+y-tc); - glVertex2f(portal.getPosition().getX()+x-ts, portal.getPosition().getY()+y+tc); - - glColor4f(1.0f, 1.0f, 1.0f, 0.9f); - - glVertex2f(portal.getPosition().getX()-x, portal.getPosition().getY()-y); - glVertex2f(portal.getPosition().getX()+x, portal.getPosition().getY()+y); - - glEnd(); -} - -void Renderer::render(const Level &level, const Rectangle &rect, float scale) { - glClear(GL_COLOR_BUFFER_BIT); - - glLineWidth(1.0f); - glPointSize(10.0f); - - drawGrid(rect, scale); - - for(Level::const_iterator object = level.begin(); object != level.end(); object++) { - renderObject(**object, (&**object == editManager->getSelectedObject()), - (&**object == editManager->getHoveredObject()), scale); - } -} -- cgit v1.2.3