From 6bc026f655bcb5ef9ef6693daf2088f97ee7e159 Mon Sep 17 00:00:00 2001 From: Paul Merrill Date: Thu, 5 Apr 2012 22:54:14 -0700 Subject: [PATCH] draw area borders black --- src/world.cpp | 35 +++++++++++++++++++++++++++++++++-- src/world.h | 4 +++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/world.cpp b/src/world.cpp index f2c48c8..9f74265 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -76,7 +76,8 @@ void World::draw() GameWindow& window = GameWindow::getWindow(); Gosu::Graphics& graphics = window.graphics(); - drawLetterbox(); + // drawLetterbox(); // Superceeded by drawAreaBorders + drawAreaBorders(); graphics.pushTransform(getTransform()); area->draw(); graphics.popTransform(); @@ -144,7 +145,7 @@ bool World::processDescriptor() Resourcer* rc = Resourcer::instance(); ASSERT(doc = rc->getXMLDoc("world.conf", "world.dtd")); ASSERT(root = doc->root()); // - + for (XMLNode child = root.childrenNode(); child; child = child.next()) { if (child.is("info")) { ASSERT(processInfo(child)); @@ -251,6 +252,7 @@ bool World::processInput(XMLNode node) return true; } +/* void World::drawLetterbox() { rvec2 sz = view->getPhysRes(); @@ -263,6 +265,35 @@ void World::drawLetterbox() drawRect(0, lb.x, 0, sz.y, black, 1000); drawRect(sz.x - lb.x, sz.x, 0, sz.y, black, 1000); } +*/ + +void World::drawAreaBorders() +{ + Gosu::Color black = Gosu::Color::BLACK; + rvec2 sz = view->getPhysRes(); + rvec2 scale = view->getScale(); + rvec2 virtScroll = view->getMapOffset(); + rvec2 padding = view->getLetterboxOffset(); + + rvec2 physScroll = virtScroll; + physScroll *= scale; + physScroll += padding; + physScroll *= -1; + + bool loopX = area->loopsInX(); + bool loopY = area->loopsInY(); + + if (!loopX && physScroll.x > 0) { + // Boxes on left-right. + drawRect(0, physScroll.x, 0, sz.y, black, 1000); + drawRect(sz.x - physScroll.x, sz.x, 0, sz.y, black, 1000); + } + if (!loopY && physScroll.y > 0) { + // Boxes on top-bottom. + drawRect(0, sz.x, 0, physScroll.y, black, 1000); + drawRect(0, sz.x, sz.y - physScroll.y, sz.y, black, 1000); + } +} void World::drawRect(double x1, double x2, double y1, double y2, Gosu::Color c, double z) diff --git a/src/world.h b/src/world.h index 462e203..611d03c 100644 --- a/src/world.h +++ b/src/world.h @@ -83,7 +83,9 @@ private: bool processInput(XMLNode node); //! Draws black borders around the screen to correct the aspect ratio. - void drawLetterbox(); +// void drawLetterbox(); // Superceeded by drawAreaBorders + //! Draws black borders around the Area if the Area doesn't fit in the Viewport. + void drawAreaBorders(); //! Draws a rectangle on the screen of the specified color. Coordinates //! are in pixels. -- 2.11.4.GIT