From a1f80e029edff28c3a0464369b5e2c09bc4ba881 Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 23 Mar 2012 16:16:31 +0100 Subject: [PATCH] abstracted some code to be reused for hud --- apps/openmw/mwgui/layouts.cpp | 79 ++++++++++++++++++++--------------- apps/openmw/mwgui/layouts.hpp | 30 ++++++++----- 2 files changed, 65 insertions(+), 44 deletions(-) diff --git a/apps/openmw/mwgui/layouts.cpp b/apps/openmw/mwgui/layouts.cpp index 195297260a..57004906e9 100644 --- a/apps/openmw/mwgui/layouts.cpp +++ b/apps/openmw/mwgui/layouts.cpp @@ -173,6 +173,8 @@ MapWindow::MapWindow() getWidget(eventbox, "EventBox"); eventbox->eventMouseDrag += MyGUI::newDelegate(this, &MapWindow::onMouseDrag); eventbox->eventMouseButtonPressed += MyGUI::newDelegate(this, &MapWindow::onDragStart); + + LocalMapBase::init(mLocalMap, this); } void MapWindow::setVisible(bool b) @@ -189,40 +191,6 @@ void MapWindow::setCellName(const std::string& cellName) static_cast(mMainWidget)->setCaption(cellName); } -void MapWindow::setCellPrefix(const std::string& prefix) -{ - mPrefix = prefix; -} - -void MapWindow::setActiveCell(const int x, const int y, bool interior) -{ - if (x==mCurX && y==mCurY && mInterior==interior) return; // don't do anything if we're still in the same cell - for (int mx=0; mx<3; ++mx) - { - for (int my=0; my<3; ++my) - { - std::string name = "Map_" + boost::lexical_cast(mx) + "_" - + boost::lexical_cast(my); - - std::string image = mPrefix+"_"+ boost::lexical_cast(x + (mx-1)) + "_" - + boost::lexical_cast(y + (interior ? (my-1) : -1*(my-1))); - - if (MyGUI::RenderManager::getInstance().getTexture(image) != 0) - setImage(name, image); - else - setImage(name, "black.png"); - - if (MyGUI::RenderManager::getInstance().getTexture(image+"_fog") != 0) - setImage(name+"_fog", image+"_fog"); - else - setImage(name+"_fog", "black.png"); - } - } - mInterior = interior; - mCurX = x; - mCurY = y; -} - void MapWindow::setPlayerPos(const float x, const float y) { if (mGlobal || mVisible) return; @@ -274,5 +242,48 @@ void MapWindow::onWorldButtonClicked(MyGUI::Widget* _sender) mButton->setCaption( mGlobal ? "Local" : "World" ); } +void LocalMapBase::init(MyGUI::ScrollView* widget, OEngine::GUI::Layout* layout) +{ + mLocalMap = widget; + mLayout = layout; +} +void LocalMapBase::setCellPrefix(const std::string& prefix) +{ + mPrefix = prefix; +} + +void LocalMapBase::setActiveCell(const int x, const int y, bool interior) +{ + if (x==mCurX && y==mCurY && mInterior==interior) return; // don't do anything if we're still in the same cell + for (int mx=0; mx<3; ++mx) + { + for (int my=0; my<3; ++my) + { + std::string name = "Map_" + boost::lexical_cast(mx) + "_" + + boost::lexical_cast(my); + + std::string image = mPrefix+"_"+ boost::lexical_cast(x + (mx-1)) + "_" + + boost::lexical_cast(y + (interior ? (my-1) : -1*(my-1))); + + MyGUI::ImageBox* box; + mLayout->getWidget(box, name); + MyGUI::ImageBox* fog; + mLayout->getWidget(fog, name+"_fog"); + + if (MyGUI::RenderManager::getInstance().getTexture(image) != 0) + box->setImageTexture(image); + else + box->setImageTexture("black.png"); + + if (MyGUI::RenderManager::getInstance().getTexture(image+"_fog") != 0) + fog->setImageTexture(image+"_fog"); + else + fog->setImageTexture("black.png"); + } + } + mInterior = interior; + mCurX = x; + mCurY = y; +} diff --git a/apps/openmw/mwgui/layouts.hpp b/apps/openmw/mwgui/layouts.hpp index 3fa759bf2f..8029dabe7b 100644 --- a/apps/openmw/mwgui/layouts.hpp +++ b/apps/openmw/mwgui/layouts.hpp @@ -31,7 +31,24 @@ namespace MWGui { - class HUD : public OEngine::GUI::Layout + class LocalMapBase + { + public: + void init(MyGUI::ScrollView* widget, OEngine::GUI::Layout* layout); + + void setCellPrefix(const std::string& prefix); + void setActiveCell(const int x, const int y, bool interior=false); + + protected: + int mCurX, mCurY; + bool mInterior; + MyGUI::ScrollView* mLocalMap; + std::string mPrefix; + + OEngine::GUI::Layout* mLayout; + }; + + class HUD : public OEngine::GUI::Layout, public LocalMapBase { public: HUD(int width, int height, int fpsLevel); @@ -45,7 +62,6 @@ namespace MWGui void setFPS(float fps); void setTriangleCount(size_t count); void setBatchCount(size_t count); - void setPlayerDir(const float x, const float y); MyGUI::ProgressPtr health, magicka, stamina; @@ -63,31 +79,25 @@ namespace MWGui MyGUI::TextBox* batchcounter; }; - class MapWindow : public OEngine::GUI::Layout + class MapWindow : public OEngine::GUI::Layout, public LocalMapBase { public: MapWindow(); void setVisible(bool b); - void setCellName(const std::string& cellName); - void setCellPrefix(const std::string& prefix); - void setActiveCell(const int x, const int y, bool interior=false); void setPlayerPos(const float x, const float y); void setPlayerDir(const float x, const float y); + void setCellName(const std::string& cellName); private: void onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id); void onMouseDrag(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id); void onWorldButtonClicked(MyGUI::Widget* _sender); - std::string mPrefix; - MyGUI::ScrollView* mLocalMap; MyGUI::ScrollView* mGlobalMap; MyGUI::ImageBox* mPlayerArrow; MyGUI::Button* mButton; MyGUI::IntPoint mLastDragPos; - int mCurX, mCurY; - bool mInterior; bool mVisible; bool mGlobal; };