From 0601506f2b678f36bf64fd553efe6f545ffc5aa9 Mon Sep 17 00:00:00 2001 From: Paul Merrill Date: Sat, 28 Apr 2012 22:05:44 -0700 Subject: [PATCH] shuffle world --- src/vec.cpp | 2 + src/world.cpp | 130 +++++++++++++++++++++++++++++----------------------------- src/world.h | 12 +++--- 3 files changed, 73 insertions(+), 71 deletions(-) diff --git a/src/vec.cpp b/src/vec.cpp index de131af..31076f1 100644 --- a/src/vec.cpp +++ b/src/vec.cpp @@ -44,6 +44,8 @@ void exportVecs() // typedef'd to ivec3 and rvec3, already registered /* to_python_converter >(); */ /* to_python_converter >(); */ + + // Not really a vec3, but we just need ::x, ::y, ::z members. to_python_converter >(); } diff --git a/src/world.cpp b/src/world.cpp index 3ffebe8..74734d5 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -132,6 +132,71 @@ std::string World::getAreaLoadScript() return onAreaLoadScript; } +void World::drawLetterbox() +{ + rvec2 sz = view->getPhysRes(); + rvec2 lb = rvec2(0.0, 0.0) - view->getLetterboxOffset(); + Gosu::Color black = Gosu::Color::BLACK; + + drawRect(0, sz.x, 0, lb.y, black, 1000); + drawRect(0, sz.x, sz.y - lb.y, sz.y, black, 1000); + 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 = -1 * virtScroll * scale + padding; + + 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, 500); + drawRect(sz.x - physScroll.x, sz.x, 0, sz.y, black, 500); + } + if (!loopY && physScroll.y > 0) { + // Boxes on top-bottom. + drawRect(0, sz.x, 0, physScroll.y, black, 500); + drawRect(0, sz.x, sz.y - physScroll.y, sz.y, black, 500); + } +} + +void World::drawRect(double x1, double x2, double y1, double y2, + Gosu::Color c, double z) +{ + GameWindow& window = GameWindow::instance(); + window.graphics().drawQuad( + x1, y1, c, + x2, y1, c, + x2, y2, c, + x1, y2, c, + z + ); +} + +Gosu::Transform World::getTransform() +{ + rvec2 scale = view->getScale(); + rvec2 scroll = view->getMapOffset(); + rvec2 padding = view->getLetterboxOffset(); + Gosu::Transform t = { { + scale.x, 0, 0, 0, + 0, scale.y, 0, 0, + 0, 0, 1, 0, + scale.x * -scroll.x - padding.x, + scale.y * -scroll.y - padding.y, 0, 1 + } }; + return t; +} + bool World::processDescriptor() { XMLRef doc; @@ -253,71 +318,6 @@ bool World::processInput(XMLNode node) return true; } -void World::drawLetterbox() -{ - rvec2 sz = view->getPhysRes(); - rvec2 lb = rvec2(0.0, 0.0) - view->getLetterboxOffset(); - Gosu::Color black = Gosu::Color::BLACK; - - drawRect(0, sz.x, 0, lb.y, black, 1000); - drawRect(0, sz.x, sz.y - lb.y, sz.y, black, 1000); - 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 = -1 * virtScroll * scale + padding; - - 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, 500); - drawRect(sz.x - physScroll.x, sz.x, 0, sz.y, black, 500); - } - if (!loopY && physScroll.y > 0) { - // Boxes on top-bottom. - drawRect(0, sz.x, 0, physScroll.y, black, 500); - drawRect(0, sz.x, sz.y - physScroll.y, sz.y, black, 500); - } -} - -void World::drawRect(double x1, double x2, double y1, double y2, - Gosu::Color c, double z) -{ - GameWindow& window = GameWindow::instance(); - window.graphics().drawQuad( - x1, y1, c, - x2, y1, c, - x2, y2, c, - x1, y2, c, - z - ); -} - -Gosu::Transform World::getTransform() -{ - rvec2 scale = view->getScale(); - rvec2 scroll = view->getMapOffset(); - rvec2 padding = view->getLetterboxOffset(); - Gosu::Transform t = { { - scale.x, 0, 0, 0, - 0, scale.y, 0, 0, - 0, 0, 1, 0, - scale.x * -scroll.x - padding.x, - scale.y * -scroll.y - padding.y, 0, 1 - } }; - return t; -} - void exportWorld() { using namespace boost::python; diff --git a/src/world.h b/src/world.h index 47e124e..2b51e9b 100644 --- a/src/world.h +++ b/src/world.h @@ -72,12 +72,6 @@ public: std::string getAreaLoadScript(); private: - bool processDescriptor(); - bool processInfo(XMLNode node); - bool processInit(XMLNode node); - bool processScript(XMLNode node); - bool processInput(XMLNode node); - //! Draws black borders around the screen to correct the aspect ratio. void drawLetterbox(); //! Draws black borders around the Area if the Area doesn't fit in the @@ -93,6 +87,12 @@ private: //! fit on-screen. Gosu::Transform getTransform(); + bool processDescriptor(); + bool processInfo(XMLNode node); + bool processInit(XMLNode node); + bool processScript(XMLNode node); + bool processInput(XMLNode node); + boost::shared_ptr view; Area* area; boost::shared_ptr music; -- 2.11.4.GIT