summaryrefslogtreecommitdiffstats
path: root/Renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Renderer.cpp')
-rw-r--r--Renderer.cpp41
1 files changed, 40 insertions, 1 deletions
diff --git a/Renderer.cpp b/Renderer.cpp
index 98859d9..c8ecac2 100644
--- a/Renderer.cpp
+++ b/Renderer.cpp
@@ -86,6 +86,8 @@ void Renderer::renderObject(const LevelObject &object, bool selected, bool highl
renderRoom(*(Room*)&object, selected, highlighted, scale);
else if(object.isOfType("PlayerStart"))
renderPlayerStart(*(PlayerStart*)&object, selected, highlighted, scale);
+ else if(object.isOfType("Portal"))
+ renderPortal(*(Portal*)&object, selected, highlighted, scale);
}
void Renderer::renderRoom(const Room &room, bool selected, bool highlighted, float scale) {
@@ -125,13 +127,50 @@ void Renderer::renderPlayerStart(const PlayerStart &start, bool selected, bool h
glColor4f(0.0f, 0.7f, 0.7f, 0.7f);
glLineWidth(1.0f);
}
- drawCircle(Vertex(start.getX(), start.getZ()), 0.3f, 128);
+ 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 highlighted, float scale) {
+ if(selected) {
+ glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
+ glLineWidth(2.0f);
+ }
+ else if(highlighted) {
+ 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);