diff --git a/apps/openmw/mwgui/map_window.cpp b/apps/openmw/mwgui/map_window.cpp index 631f61c9d..b4e8aa4d6 100644 --- a/apps/openmw/mwgui/map_window.cpp +++ b/apps/openmw/mwgui/map_window.cpp @@ -14,8 +14,11 @@ using namespace MWGui; MapWindow::MapWindow(WindowManager& parWindowManager) : MWGui::WindowPinnableBase("openmw_map_window_layout.xml", parWindowManager), - mGlobal(false), - mVisible(false) + mGlobal(false), + mLastPositionX(0.0f), + mLastPositionY(0.0f), + mLastDirectionX(0.0f), + mLastDirectionY(0.0f) { setCoord(500,0,320,300); setText("WorldButton", "World"); @@ -39,12 +42,6 @@ MapWindow::MapWindow(WindowManager& parWindowManager) : LocalMapBase::init(mLocalMap, this); } -void MapWindow::setVisible(bool b) -{ - WindowPinnableBase::setVisible(b); - mVisible = b; -} - void MapWindow::setCellName(const std::string& cellName) { static_cast(mMainWidget)->setCaption(cellName); @@ -53,7 +50,7 @@ void MapWindow::setCellName(const std::string& cellName) void MapWindow::setPlayerPos(const float x, const float y) { - if (mGlobal || mVisible) return; + if (mGlobal || !mVisible || (x == mLastPositionX && y == mLastPositionY)) return; MyGUI::IntSize size = mLocalMap->getCanvasSize(); MyGUI::IntPoint middle = MyGUI::IntPoint((1/3.f + x/3.f)*size.width,(1/3.f + y/3.f)*size.height); MyGUI::IntCoord viewsize = mLocalMap->getCoord(); @@ -61,16 +58,21 @@ void MapWindow::setPlayerPos(const float x, const float y) mLocalMap->setViewOffset(pos); mPlayerArrow->setPosition(MyGUI::IntPoint(x*512-16, y*512-16)); + mLastPositionX = x; + mLastPositionY = y; } void MapWindow::setPlayerDir(const float x, const float y) { - if (!mVisible) return; + if (!mVisible || (x == mLastDirectionX && y == mLastDirectionY)) return; MyGUI::ISubWidget* main = mPlayerArrow->getSubWidgetMain(); MyGUI::RotatingSkin* rotatingSubskin = main->castType(); rotatingSubskin->setCenter(MyGUI::IntPoint(16,16)); float angle = std::atan2(x,y); rotatingSubskin->setAngle(angle); + + mLastDirectionX = x; + mLastDirectionY = y; } void MapWindow::onDragStart(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) diff --git a/apps/openmw/mwgui/map_window.hpp b/apps/openmw/mwgui/map_window.hpp index 2fdc0d91a..cad652bff 100644 --- a/apps/openmw/mwgui/map_window.hpp +++ b/apps/openmw/mwgui/map_window.hpp @@ -12,7 +12,6 @@ namespace MWGui MapWindow(WindowManager& parWindowManager); virtual ~MapWindow(){} - void setVisible(bool b); void setPlayerPos(const float x, const float y); void setPlayerDir(const float x, const float y); void setCellName(const std::string& cellName); @@ -26,8 +25,11 @@ namespace MWGui MyGUI::ImageBox* mPlayerArrow; MyGUI::Button* mButton; MyGUI::IntPoint mLastDragPos; - bool mVisible; bool mGlobal; + float mLastPositionX; + float mLastPositionY; + float mLastDirectionX; + float mLastDirectionY; }; } #endif diff --git a/apps/openmw/mwgui/window_pinnable_base.cpp b/apps/openmw/mwgui/window_pinnable_base.cpp index cca593c9c..07f0ea278 100644 --- a/apps/openmw/mwgui/window_pinnable_base.cpp +++ b/apps/openmw/mwgui/window_pinnable_base.cpp @@ -4,7 +4,7 @@ using namespace MWGui; WindowPinnableBase::WindowPinnableBase(const std::string& parLayout, WindowManager& parWindowManager) - : WindowBase(parLayout, parWindowManager), mIsPinned(false) + : WindowBase(parLayout, parWindowManager), mPinned(false), mVisible(false) { MyGUI::WindowPtr t = static_cast(mMainWidget); t->eventWindowButtonPressed += MyGUI::newDelegate(this, &WindowPinnableBase::onWindowButtonPressed); @@ -13,17 +13,18 @@ WindowPinnableBase::WindowPinnableBase(const std::string& parLayout, WindowManag void WindowPinnableBase::setVisible(bool b) { // Pinned windows can not be hidden - if (mIsPinned && !b) + if (mPinned && !b) return; WindowBase::setVisible(b); + mVisible = b; } void WindowPinnableBase::onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName) { if ("PinToggle" == eventName) { - mIsPinned = !mIsPinned; + mPinned = !mPinned; } eventDone(this); diff --git a/apps/openmw/mwgui/window_pinnable_base.hpp b/apps/openmw/mwgui/window_pinnable_base.hpp index 0e3c27c86..f3cec847f 100644 --- a/apps/openmw/mwgui/window_pinnable_base.hpp +++ b/apps/openmw/mwgui/window_pinnable_base.hpp @@ -16,7 +16,9 @@ namespace MWGui private: void onWindowButtonPressed(MyGUI::Window* sender, const std::string& eventName); - bool mIsPinned; + protected: + bool mPinned; + bool mVisible; }; }