mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-02 19:34:34 +00:00
Remove hardcoded row/column values in some controller menus
This commit is contained in:
parent
8e76a0ab06
commit
c293c76bd7
4 changed files with 52 additions and 28 deletions
|
|
@ -1047,6 +1047,7 @@ namespace MWGui
|
||||||
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);
|
mSkillButtons.emplace_back(skillWidget);
|
||||||
|
mNumSkillsPerSpecialization[skill.mData.mSpecialization]++;
|
||||||
}
|
}
|
||||||
for (const auto& [widget, coord] : specializations)
|
for (const auto& [widget, coord] : specializations)
|
||||||
{
|
{
|
||||||
|
|
@ -1115,28 +1116,52 @@ namespace MWGui
|
||||||
mControllerFocus = wrap(mControllerFocus + 1, mSkillButtons.size());
|
mControllerFocus = wrap(mControllerFocus + 1, mSkillButtons.size());
|
||||||
mSkillButtons[mControllerFocus]->setStateSelected(true);
|
mSkillButtons[mControllerFocus]->setStateSelected(true);
|
||||||
}
|
}
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT || arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
|
||||||
{
|
{
|
||||||
mSkillButtons[mControllerFocus]->setStateSelected(false);
|
mSkillButtons[mControllerFocus]->setStateSelected(false);
|
||||||
if (mControllerFocus < 9)
|
selectNextColumn(arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT ? -1 : 1);
|
||||||
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);
|
mSkillButtons[mControllerFocus]->setStateSelected(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SelectSkillDialog::selectNextColumn(int direction)
|
||||||
|
{
|
||||||
|
// Find which column (specialization) the current index is in.
|
||||||
|
size_t specialization = 0;
|
||||||
|
size_t nextSpecializationIndex = 0;
|
||||||
|
for (; specialization < mNumSkillsPerSpecialization.size(); ++specialization)
|
||||||
|
{
|
||||||
|
nextSpecializationIndex += mNumSkillsPerSpecialization[specialization];
|
||||||
|
if (mControllerFocus < nextSpecializationIndex)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (direction < 0)
|
||||||
|
{
|
||||||
|
if (mControllerFocus < mNumSkillsPerSpecialization[0])
|
||||||
|
{
|
||||||
|
// Wrap around to the right column
|
||||||
|
for (size_t i = 0; i < mNumSkillsPerSpecialization.size() - 1; ++i)
|
||||||
|
mControllerFocus += mNumSkillsPerSpecialization[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mControllerFocus -= mNumSkillsPerSpecialization[specialization];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (mControllerFocus + mNumSkillsPerSpecialization.back() >= mSkillButtons.size())
|
||||||
|
{
|
||||||
|
// Wrap around to the left column
|
||||||
|
for (size_t i = 0; i < mNumSkillsPerSpecialization.size() - 1; ++i)
|
||||||
|
mControllerFocus -= mNumSkillsPerSpecialization[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mControllerFocus += mNumSkillsPerSpecialization[specialization];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* DescriptionDialog */
|
/* DescriptionDialog */
|
||||||
|
|
||||||
DescriptionDialog::DescriptionDialog()
|
DescriptionDialog::DescriptionDialog()
|
||||||
|
|
|
||||||
|
|
@ -257,6 +257,9 @@ namespace MWGui
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ESM::RefId mSkillId;
|
ESM::RefId mSkillId;
|
||||||
|
std::array<size_t, 3> mNumSkillsPerSpecialization;
|
||||||
|
|
||||||
|
void selectNextColumn(int direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DescriptionDialog : public WindowModal
|
class DescriptionDialog : public WindowModal
|
||||||
|
|
|
||||||
|
|
@ -49,13 +49,12 @@ namespace MWGui
|
||||||
|
|
||||||
{
|
{
|
||||||
const auto& store = MWBase::Environment::get().getESMStore()->get<ESM::Attribute>();
|
const auto& store = MWBase::Environment::get().getESMStore()->get<ESM::Attribute>();
|
||||||
const size_t perCol
|
mPerCol = static_cast<size_t>(std::ceil(store.getSize() / static_cast<float>(std::size(sColumnOffsets))));
|
||||||
= static_cast<size_t>(std::ceil(store.getSize() / static_cast<float>(std::size(sColumnOffsets))));
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
for (const ESM::Attribute& attribute : store)
|
for (const ESM::Attribute& attribute : store)
|
||||||
{
|
{
|
||||||
const int offset = sColumnOffsets[i / perCol];
|
const int offset = sColumnOffsets[i / mPerCol];
|
||||||
const int row = static_cast<int>(i % perCol);
|
const int row = static_cast<int>(i % mPerCol);
|
||||||
Widgets widgets;
|
Widgets widgets;
|
||||||
widgets.mMultiplier = mAssignWidget->createWidget<MyGUI::TextBox>(
|
widgets.mMultiplier = mAssignWidget->createWidget<MyGUI::TextBox>(
|
||||||
"SandTextVCenter", { offset, 20 * row, 100, 20 }, MyGUI::Align::Default);
|
"SandTextVCenter", { offset, 20 * row, 100, 20 }, MyGUI::Align::Default);
|
||||||
|
|
@ -79,7 +78,7 @@ namespace MWGui
|
||||||
|
|
||||||
mAssignWidget->setVisibleVScroll(false);
|
mAssignWidget->setVisibleVScroll(false);
|
||||||
mAssignWidget->setCanvasSize(MyGUI::IntSize(
|
mAssignWidget->setCanvasSize(MyGUI::IntSize(
|
||||||
mAssignWidget->getWidth(), std::max(mAssignWidget->getHeight(), static_cast<int>(20 * perCol))));
|
mAssignWidget->getWidth(), std::max(mAssignWidget->getHeight(), static_cast<int>(20 * mPerCol))));
|
||||||
mAssignWidget->setVisibleVScroll(true);
|
mAssignWidget->setVisibleVScroll(true);
|
||||||
mAssignWidget->setViewOffset(MyGUI::IntPoint());
|
mAssignWidget->setViewOffset(MyGUI::IntPoint());
|
||||||
}
|
}
|
||||||
|
|
@ -397,10 +396,8 @@ namespace MWGui
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
|
||||||
{
|
{
|
||||||
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
||||||
if (mControllerFocus == 0)
|
if (mControllerFocus % mPerCol == 0)
|
||||||
mControllerFocus = 3;
|
mControllerFocus += mPerCol - 1;
|
||||||
else if (mControllerFocus == 4)
|
|
||||||
mControllerFocus = 7;
|
|
||||||
else
|
else
|
||||||
mControllerFocus--;
|
mControllerFocus--;
|
||||||
setControllerFocus(mAttributeButtons, mControllerFocus, true);
|
setControllerFocus(mAttributeButtons, mControllerFocus, true);
|
||||||
|
|
@ -408,10 +405,8 @@ namespace MWGui
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||||
{
|
{
|
||||||
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
||||||
if (mControllerFocus == 3)
|
if (mControllerFocus % mPerCol == mPerCol - 1)
|
||||||
mControllerFocus = 0;
|
mControllerFocus -= mPerCol - 1;
|
||||||
else if (mControllerFocus == 7)
|
|
||||||
mControllerFocus = 4;
|
|
||||||
else
|
else
|
||||||
mControllerFocus++;
|
mControllerFocus++;
|
||||||
setControllerFocus(mAttributeButtons, mControllerFocus, true);
|
setControllerFocus(mAttributeButtons, mControllerFocus, true);
|
||||||
|
|
@ -419,7 +414,7 @@ namespace MWGui
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT || arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT || arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
|
||||||
{
|
{
|
||||||
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
||||||
mControllerFocus = (mControllerFocus + 4) % mAttributeButtons.size();
|
mControllerFocus = (mControllerFocus + mPerCol) % mAttributeButtons.size();
|
||||||
setControllerFocus(mAttributeButtons, mControllerFocus, true);
|
setControllerFocus(mAttributeButtons, mControllerFocus, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ namespace MWGui
|
||||||
|
|
||||||
std::vector<ESM::Attribute::AttributeID> mSpentAttributes;
|
std::vector<ESM::Attribute::AttributeID> mSpentAttributes;
|
||||||
|
|
||||||
|
size_t mPerCol;
|
||||||
unsigned int mCoinCount;
|
unsigned int mCoinCount;
|
||||||
|
|
||||||
void onOkButtonClicked(MyGUI::Widget* sender);
|
void onOkButtonClicked(MyGUI::Widget* sender);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue