mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-09-17 08:26:50 -04:00
Add controller support to skill and attribute menus
This commit is contained in:
parent
f67aae086a
commit
451d68461c
@ -943,6 +943,7 @@ namespace MWGui
|
||||
widget->setAttributeId(attribute.mId);
|
||||
widget->eventClicked += MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
|
||||
ToolTips::createAttributeToolTip(widget, attribute.mId);
|
||||
mAttributeButtons.emplace_back(widget);
|
||||
}
|
||||
|
||||
attributes->setVisibleVScroll(false);
|
||||
@ -954,8 +955,15 @@ namespace MWGui
|
||||
getWidget(cancelButton, "CancelButton");
|
||||
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked);
|
||||
|
||||
mControllerButtons.a = "#{sSelect}";
|
||||
mControllerButtons.b = "#{sCancel}";
|
||||
if (Settings::gui().mControllerMenus)
|
||||
{
|
||||
mControllerFocus = 0;
|
||||
if (mAttributeButtons.size() > 0)
|
||||
mAttributeButtons[0]->setStateSelected(true);
|
||||
|
||||
mControllerButtons.a = "#{sSelect}";
|
||||
mControllerButtons.b = "#{sCancel}";
|
||||
}
|
||||
}
|
||||
|
||||
// widget controls
|
||||
@ -979,12 +987,29 @@ namespace MWGui
|
||||
|
||||
bool SelectAttributeDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg)
|
||||
{
|
||||
if (arg.button == SDL_CONTROLLER_BUTTON_B)
|
||||
if (arg.button == SDL_CONTROLLER_BUTTON_A)
|
||||
{
|
||||
if (mControllerFocus >= 0 && mControllerFocus < mAttributeButtons.size())
|
||||
onAttributeClicked(mAttributeButtons[mControllerFocus]);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_B)
|
||||
{
|
||||
onCancelClicked(nullptr);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
|
||||
{
|
||||
mAttributeButtons[mControllerFocus]->setStateSelected(false);
|
||||
mControllerFocus = wrap(mControllerFocus - 1, mAttributeButtons.size());
|
||||
mAttributeButtons[mControllerFocus]->setStateSelected(true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||
{
|
||||
mAttributeButtons[mControllerFocus]->setStateSelected(false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mAttributeButtons.size());
|
||||
mAttributeButtons[mControllerFocus]->setStateSelected(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* SelectSkillDialog */
|
||||
@ -1016,6 +1041,7 @@ namespace MWGui
|
||||
skillWidget->setSkillId(skill.mId);
|
||||
skillWidget->eventClicked += MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked);
|
||||
ToolTips::createSkillToolTip(skillWidget, skill.mId);
|
||||
mSkillButtons.emplace_back(skillWidget);
|
||||
}
|
||||
for (const auto& [widget, coord] : specializations)
|
||||
{
|
||||
@ -1029,8 +1055,15 @@ namespace MWGui
|
||||
getWidget(cancelButton, "CancelButton");
|
||||
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSkillDialog::onCancelClicked);
|
||||
|
||||
mControllerButtons.a = "#{sSelect}";
|
||||
mControllerButtons.b = "#{sCancel}";
|
||||
if (Settings::gui().mControllerMenus)
|
||||
{
|
||||
mControllerFocus = 0;
|
||||
if (mSkillButtons.size() > 0)
|
||||
mSkillButtons[0]->setStateSelected(true);
|
||||
|
||||
mControllerButtons.a = "#{sSelect}";
|
||||
mControllerButtons.b = "#{sCancel}";
|
||||
}
|
||||
}
|
||||
|
||||
SelectSkillDialog::~SelectSkillDialog() {}
|
||||
@ -1056,12 +1089,47 @@ namespace MWGui
|
||||
|
||||
bool SelectSkillDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg)
|
||||
{
|
||||
if (arg.button == SDL_CONTROLLER_BUTTON_B)
|
||||
if (arg.button == SDL_CONTROLLER_BUTTON_A)
|
||||
{
|
||||
if (mControllerFocus >= 0 && mControllerFocus < mSkillButtons.size())
|
||||
onSkillClicked(mSkillButtons[mControllerFocus]);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_B)
|
||||
{
|
||||
onCancelClicked(nullptr);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
|
||||
{
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(false);
|
||||
mControllerFocus = wrap(mControllerFocus - 1, mSkillButtons.size());
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||
{
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mSkillButtons.size());
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT)
|
||||
{
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(false);
|
||||
if (mControllerFocus < 9)
|
||||
mControllerFocus += 18;
|
||||
else
|
||||
mControllerFocus -= 9;
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
|
||||
{
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(false);
|
||||
if (mControllerFocus >= 18)
|
||||
mControllerFocus -= 18;
|
||||
else
|
||||
mControllerFocus += 9;
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* DescriptionDialog */
|
||||
|
@ -219,6 +219,8 @@ namespace MWGui
|
||||
void onAttributeClicked(Widgets::MWAttributePtr _sender);
|
||||
void onCancelClicked(MyGUI::Widget* _sender);
|
||||
bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override;
|
||||
int mControllerFocus;
|
||||
std::vector<Widgets::MWAttribute*> mAttributeButtons;
|
||||
|
||||
private:
|
||||
ESM::RefId mAttributeId;
|
||||
@ -251,6 +253,8 @@ namespace MWGui
|
||||
void onSkillClicked(Widgets::MWSkillPtr _sender);
|
||||
void onCancelClicked(MyGUI::Widget* _sender);
|
||||
bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override;
|
||||
int mControllerFocus;
|
||||
std::vector<Widgets::MWSkill*> mSkillButtons;
|
||||
|
||||
private:
|
||||
ESM::RefId mSkillId;
|
||||
|
@ -14,6 +14,8 @@
|
||||
#include <components/misc/resourcehelpers.hpp>
|
||||
#include <components/resource/resourcesystem.hpp>
|
||||
|
||||
#include "textcolours.hpp"
|
||||
|
||||
#include "../mwbase/environment.hpp"
|
||||
#include "../mwbase/windowmanager.hpp"
|
||||
|
||||
@ -66,6 +68,12 @@ namespace MWGui::Widgets
|
||||
}
|
||||
}
|
||||
|
||||
void MWSkill::setStateSelected(bool selected)
|
||||
{
|
||||
const TextColours& textColours{ MWBase::Environment::get().getWindowManager()->getTextColours() };
|
||||
mSkillNameWidget->setTextColour(selected ? textColours.link : textColours.normal);
|
||||
}
|
||||
|
||||
void MWSkill::onClicked(MyGUI::Widget* _sender)
|
||||
{
|
||||
eventClicked(this);
|
||||
@ -150,6 +158,12 @@ namespace MWGui::Widgets
|
||||
}
|
||||
}
|
||||
|
||||
void MWAttribute::setStateSelected(bool selected)
|
||||
{
|
||||
const TextColours& textColours{ MWBase::Environment::get().getWindowManager()->getTextColours() };
|
||||
mAttributeNameWidget->setTextColour(selected ? textColours.link : textColours.normal);
|
||||
}
|
||||
|
||||
void MWAttribute::initialiseOverride()
|
||||
{
|
||||
Base::initialiseOverride();
|
||||
@ -231,6 +245,12 @@ namespace MWGui::Widgets
|
||||
}
|
||||
}
|
||||
|
||||
void MWSpell::setStateSelected(bool selected)
|
||||
{
|
||||
const TextColours& textColours{ MWBase::Environment::get().getWindowManager()->getTextColours() };
|
||||
mSpellNameWidget->setTextColour(selected ? textColours.link : textColours.normal);
|
||||
}
|
||||
|
||||
void MWSpell::initialiseOverride()
|
||||
{
|
||||
Base::initialiseOverride();
|
||||
@ -461,6 +481,12 @@ namespace MWGui::Widgets
|
||||
|
||||
MWSpellEffect::~MWSpellEffect() {}
|
||||
|
||||
void MWSpellEffect::setStateSelected(bool selected)
|
||||
{
|
||||
const TextColours& textColours{ MWBase::Environment::get().getWindowManager()->getTextColours() };
|
||||
mTextWidget->setTextColour(selected ? textColours.link : textColours.normal);
|
||||
}
|
||||
|
||||
void MWSpellEffect::initialiseOverride()
|
||||
{
|
||||
Base::initialiseOverride();
|
||||
|
@ -110,6 +110,8 @@ namespace MWGui
|
||||
*/
|
||||
EventHandle_SkillVoid eventClicked;
|
||||
|
||||
void setStateSelected(bool selected);
|
||||
|
||||
protected:
|
||||
virtual ~MWSkill();
|
||||
|
||||
@ -149,6 +151,8 @@ namespace MWGui
|
||||
*/
|
||||
EventHandle_AttributeVoid eventClicked;
|
||||
|
||||
void setStateSelected(bool selected);
|
||||
|
||||
protected:
|
||||
~MWAttribute() override = default;
|
||||
|
||||
@ -191,6 +195,8 @@ namespace MWGui
|
||||
|
||||
const ESM::RefId& getSpellId() const { return mId; }
|
||||
|
||||
void setStateSelected(bool selected);
|
||||
|
||||
protected:
|
||||
virtual ~MWSpell();
|
||||
|
||||
@ -256,6 +262,8 @@ namespace MWGui
|
||||
|
||||
int getRequestedWidth() const { return mRequestedWidth; }
|
||||
|
||||
void setStateSelected(bool selected);
|
||||
|
||||
protected:
|
||||
virtual ~MWSpellEffect();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user