mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-09-17 16:36:33 -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->setAttributeId(attribute.mId);
|
||||||
widget->eventClicked += MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
|
widget->eventClicked += MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
|
||||||
ToolTips::createAttributeToolTip(widget, attribute.mId);
|
ToolTips::createAttributeToolTip(widget, attribute.mId);
|
||||||
|
mAttributeButtons.emplace_back(widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
attributes->setVisibleVScroll(false);
|
attributes->setVisibleVScroll(false);
|
||||||
@ -954,8 +955,15 @@ namespace MWGui
|
|||||||
getWidget(cancelButton, "CancelButton");
|
getWidget(cancelButton, "CancelButton");
|
||||||
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked);
|
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked);
|
||||||
|
|
||||||
mControllerButtons.a = "#{sSelect}";
|
if (Settings::gui().mControllerMenus)
|
||||||
mControllerButtons.b = "#{sCancel}";
|
{
|
||||||
|
mControllerFocus = 0;
|
||||||
|
if (mAttributeButtons.size() > 0)
|
||||||
|
mAttributeButtons[0]->setStateSelected(true);
|
||||||
|
|
||||||
|
mControllerButtons.a = "#{sSelect}";
|
||||||
|
mControllerButtons.b = "#{sCancel}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// widget controls
|
// widget controls
|
||||||
@ -979,12 +987,29 @@ namespace MWGui
|
|||||||
|
|
||||||
bool SelectAttributeDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg)
|
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);
|
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 */
|
/* SelectSkillDialog */
|
||||||
@ -1016,6 +1041,7 @@ namespace MWGui
|
|||||||
skillWidget->setSkillId(skill.mId);
|
skillWidget->setSkillId(skill.mId);
|
||||||
skillWidget->eventClicked += MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked);
|
skillWidget->eventClicked += MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked);
|
||||||
ToolTips::createSkillToolTip(skillWidget, skill.mId);
|
ToolTips::createSkillToolTip(skillWidget, skill.mId);
|
||||||
|
mSkillButtons.emplace_back(skillWidget);
|
||||||
}
|
}
|
||||||
for (const auto& [widget, coord] : specializations)
|
for (const auto& [widget, coord] : specializations)
|
||||||
{
|
{
|
||||||
@ -1029,8 +1055,15 @@ namespace MWGui
|
|||||||
getWidget(cancelButton, "CancelButton");
|
getWidget(cancelButton, "CancelButton");
|
||||||
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSkillDialog::onCancelClicked);
|
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSkillDialog::onCancelClicked);
|
||||||
|
|
||||||
mControllerButtons.a = "#{sSelect}";
|
if (Settings::gui().mControllerMenus)
|
||||||
mControllerButtons.b = "#{sCancel}";
|
{
|
||||||
|
mControllerFocus = 0;
|
||||||
|
if (mSkillButtons.size() > 0)
|
||||||
|
mSkillButtons[0]->setStateSelected(true);
|
||||||
|
|
||||||
|
mControllerButtons.a = "#{sSelect}";
|
||||||
|
mControllerButtons.b = "#{sCancel}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectSkillDialog::~SelectSkillDialog() {}
|
SelectSkillDialog::~SelectSkillDialog() {}
|
||||||
@ -1056,12 +1089,47 @@ namespace MWGui
|
|||||||
|
|
||||||
bool SelectSkillDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg)
|
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);
|
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 */
|
/* DescriptionDialog */
|
||||||
|
@ -219,6 +219,8 @@ namespace MWGui
|
|||||||
void onAttributeClicked(Widgets::MWAttributePtr _sender);
|
void onAttributeClicked(Widgets::MWAttributePtr _sender);
|
||||||
void onCancelClicked(MyGUI::Widget* _sender);
|
void onCancelClicked(MyGUI::Widget* _sender);
|
||||||
bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override;
|
bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override;
|
||||||
|
int mControllerFocus;
|
||||||
|
std::vector<Widgets::MWAttribute*> mAttributeButtons;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ESM::RefId mAttributeId;
|
ESM::RefId mAttributeId;
|
||||||
@ -251,6 +253,8 @@ namespace MWGui
|
|||||||
void onSkillClicked(Widgets::MWSkillPtr _sender);
|
void onSkillClicked(Widgets::MWSkillPtr _sender);
|
||||||
void onCancelClicked(MyGUI::Widget* _sender);
|
void onCancelClicked(MyGUI::Widget* _sender);
|
||||||
bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override;
|
bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override;
|
||||||
|
int mControllerFocus;
|
||||||
|
std::vector<Widgets::MWSkill*> mSkillButtons;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ESM::RefId mSkillId;
|
ESM::RefId mSkillId;
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
#include <components/misc/resourcehelpers.hpp>
|
#include <components/misc/resourcehelpers.hpp>
|
||||||
#include <components/resource/resourcesystem.hpp>
|
#include <components/resource/resourcesystem.hpp>
|
||||||
|
|
||||||
|
#include "textcolours.hpp"
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/windowmanager.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)
|
void MWSkill::onClicked(MyGUI::Widget* _sender)
|
||||||
{
|
{
|
||||||
eventClicked(this);
|
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()
|
void MWAttribute::initialiseOverride()
|
||||||
{
|
{
|
||||||
Base::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()
|
void MWSpell::initialiseOverride()
|
||||||
{
|
{
|
||||||
Base::initialiseOverride();
|
Base::initialiseOverride();
|
||||||
@ -461,6 +481,12 @@ namespace MWGui::Widgets
|
|||||||
|
|
||||||
MWSpellEffect::~MWSpellEffect() {}
|
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()
|
void MWSpellEffect::initialiseOverride()
|
||||||
{
|
{
|
||||||
Base::initialiseOverride();
|
Base::initialiseOverride();
|
||||||
|
@ -110,6 +110,8 @@ namespace MWGui
|
|||||||
*/
|
*/
|
||||||
EventHandle_SkillVoid eventClicked;
|
EventHandle_SkillVoid eventClicked;
|
||||||
|
|
||||||
|
void setStateSelected(bool selected);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~MWSkill();
|
virtual ~MWSkill();
|
||||||
|
|
||||||
@ -149,6 +151,8 @@ namespace MWGui
|
|||||||
*/
|
*/
|
||||||
EventHandle_AttributeVoid eventClicked;
|
EventHandle_AttributeVoid eventClicked;
|
||||||
|
|
||||||
|
void setStateSelected(bool selected);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
~MWAttribute() override = default;
|
~MWAttribute() override = default;
|
||||||
|
|
||||||
@ -191,6 +195,8 @@ namespace MWGui
|
|||||||
|
|
||||||
const ESM::RefId& getSpellId() const { return mId; }
|
const ESM::RefId& getSpellId() const { return mId; }
|
||||||
|
|
||||||
|
void setStateSelected(bool selected);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~MWSpell();
|
virtual ~MWSpell();
|
||||||
|
|
||||||
@ -256,6 +262,8 @@ namespace MWGui
|
|||||||
|
|
||||||
int getRequestedWidth() const { return mRequestedWidth; }
|
int getRequestedWidth() const { return mRequestedWidth; }
|
||||||
|
|
||||||
|
void setStateSelected(bool selected);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~MWSpellEffect();
|
virtual ~MWSpellEffect();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user