diff --git a/apps/openmw/mwgui/mapwindow.cpp b/apps/openmw/mwgui/mapwindow.cpp index 9c43b44572..ab55d261df 100644 --- a/apps/openmw/mwgui/mapwindow.cpp +++ b/apps/openmw/mwgui/mapwindow.cpp @@ -1384,20 +1384,42 @@ namespace MWGui if (arg.button == SDL_CONTROLLER_BUTTON_B) MWBase::Environment::get().getWindowManager()->exitCurrentGuiMode(); else if (arg.button == SDL_CONTROLLER_BUTTON_X) + { onWorldButtonClicked(mButton); + MWBase::Environment::get().getWindowManager()->playSound(ESM::RefId::stringRefId("Menu Click")); + } else if (arg.button == SDL_CONTROLLER_BUTTON_Y) + { centerView(); + MWBase::Environment::get().getWindowManager()->playSound(ESM::RefId::stringRefId("Menu Click")); + } + else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP) + shiftMap(0, 100); + else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN) + shiftMap(0, -100); + else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT) + shiftMap(100, 0); + else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT) + shiftMap(-100, 0); return true; } bool MapWindow::onControllerThumbstickEvent(const SDL_ControllerAxisEvent& arg) { - int dx = arg.axis == SDL_CONTROLLER_AXIS_RIGHTX ? -10.0f * arg.value / 32767 : 0; - int dy = arg.axis == SDL_CONTROLLER_AXIS_RIGHTY ? -10.0f * arg.value / 32767 : 0; + int dx = arg.axis == SDL_CONTROLLER_AXIS_RIGHTX ? -30.0f * arg.value / 32767 : 0; + int dy = arg.axis == SDL_CONTROLLER_AXIS_RIGHTY ? -30.0f * arg.value / 32767 : 0; + shiftMap(dx, dy); + + return true; + } + + void MapWindow::shiftMap(int dx, int dy) + { if (dx == 0 && dy == 0) - return true; - else if (!Settings::map().mGlobal) + return; + + if (!Settings::map().mGlobal) { mNeedDoorMarkersUpdate = true; mLocalMap->setViewOffset( @@ -1410,7 +1432,6 @@ namespace MWGui MyGUI::IntPoint( mGlobalMap->getViewOffset().left + dx, mGlobalMap->getViewOffset().top + dy)); } - return true; } void MapWindow::setActiveControllerWindow(bool active) diff --git a/apps/openmw/mwgui/mapwindow.hpp b/apps/openmw/mwgui/mapwindow.hpp index 31fe971c60..f7e1fcc52f 100644 --- a/apps/openmw/mwgui/mapwindow.hpp +++ b/apps/openmw/mwgui/mapwindow.hpp @@ -288,6 +288,7 @@ namespace MWGui void setGlobalMapMarkerTooltip(MyGUI::Widget* widget, int x, int y); float getMarkerSize(size_t agregatedWeight) const; void resizeGlobalMap(); + void shiftMap(int dx, int dy); void worldPosToGlobalMapImageSpace(float x, float z, float& imageX, float& imageY) const; MyGUI::IntCoord createMarkerCoords(float x, float y, float agregatedWeight) const; MyGUI::Widget* createMarker(const std::string& name, float x, float y, float agregatedWeight); diff --git a/apps/openmw/mwgui/spellview.cpp b/apps/openmw/mwgui/spellview.cpp index 739699f35c..2ebd1751da 100644 --- a/apps/openmw/mwgui/spellview.cpp +++ b/apps/openmw/mwgui/spellview.cpp @@ -11,6 +11,7 @@ #include "../mwbase/environment.hpp" #include "../mwbase/inputmanager.hpp" +#include "../mwbase/windowmanager.hpp" #include "tooltips.hpp" @@ -337,7 +338,10 @@ namespace MWGui { // Select the focused item, if any. if (mControllerFocus >= 0 && mControllerFocus < mButtons.size()) + { onSpellSelected(mButtons.at(mControllerFocus)); + MWBase::Environment::get().getWindowManager()->playSound(ESM::RefId::stringRefId("Menu Click")); + } } else if (arg.button == SDL_CONTROLLER_BUTTON_RIGHTSTICK) { diff --git a/apps/openmw/mwgui/spellwindow.cpp b/apps/openmw/mwgui/spellwindow.cpp index fbeb6f35c3..e218b9beed 100644 --- a/apps/openmw/mwgui/spellwindow.cpp +++ b/apps/openmw/mwgui/spellwindow.cpp @@ -292,6 +292,9 @@ namespace MWGui MyGUI::Window* window = mMainWidget->castType(); window->setCoord(x, active ? y : viewSize.height + 1, width, height); + if (active) + mSpellView->update(); + WindowBase::setActiveControllerWindow(active); } } diff --git a/apps/openmw/mwgui/statswindow.cpp b/apps/openmw/mwgui/statswindow.cpp index 9971b15799..1d0af185d4 100644 --- a/apps/openmw/mwgui/statswindow.cpp +++ b/apps/openmw/mwgui/statswindow.cpp @@ -83,6 +83,8 @@ namespace MWGui if (Settings::gui().mControllerMenus) { + mControllerButtons.lStick = "#{sInfo}"; + mControllerButtons.rStick = "#{sScrolldown}"; mControllerButtons.b = "#{sBack}"; } @@ -751,7 +753,8 @@ namespace MWGui MyGUI::Window* window = mMainWidget->castType(); window->setCoord(x, active ? y : viewSize.height + 1, width, height); - onWindowResize(window); + if (active) + onWindowResize(window); WindowBase::setActiveControllerWindow(active); } diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index 732ff405d3..96b4303bbb 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -957,6 +957,7 @@ namespace MWGui mGuiModeStates[mode].mWindows[i]->setActiveControllerWindow(i == activeIndex); updateControllerButtonsOverlay(); + setCursorActive(false); if (winCount > 1) playSound(ESM::RefId::stringRefId("Menu Size"));