mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-02 10:04:31 +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);
|
||||
ToolTips::createSkillToolTip(skillWidget, skill.mId);
|
||||
mSkillButtons.emplace_back(skillWidget);
|
||||
mNumSkillsPerSpecialization[skill.mData.mSpecialization]++;
|
||||
}
|
||||
for (const auto& [widget, coord] : specializations)
|
||||
{
|
||||
|
|
@ -1115,28 +1116,52 @@ namespace MWGui
|
|||
mControllerFocus = wrap(mControllerFocus + 1, mSkillButtons.size());
|
||||
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);
|
||||
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;
|
||||
selectNextColumn(arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT ? -1 : 1);
|
||||
mSkillButtons[mControllerFocus]->setStateSelected(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()
|
||||
|
|
|
|||
|
|
@ -257,6 +257,9 @@ namespace MWGui
|
|||
|
||||
private:
|
||||
ESM::RefId mSkillId;
|
||||
std::array<size_t, 3> mNumSkillsPerSpecialization;
|
||||
|
||||
void selectNextColumn(int direction);
|
||||
};
|
||||
|
||||
class DescriptionDialog : public WindowModal
|
||||
|
|
|
|||
|
|
@ -49,13 +49,12 @@ namespace MWGui
|
|||
|
||||
{
|
||||
const auto& store = MWBase::Environment::get().getESMStore()->get<ESM::Attribute>();
|
||||
const size_t perCol
|
||||
= static_cast<size_t>(std::ceil(store.getSize() / static_cast<float>(std::size(sColumnOffsets))));
|
||||
mPerCol = static_cast<size_t>(std::ceil(store.getSize() / static_cast<float>(std::size(sColumnOffsets))));
|
||||
size_t i = 0;
|
||||
for (const ESM::Attribute& attribute : store)
|
||||
{
|
||||
const int offset = sColumnOffsets[i / perCol];
|
||||
const int row = static_cast<int>(i % perCol);
|
||||
const int offset = sColumnOffsets[i / mPerCol];
|
||||
const int row = static_cast<int>(i % mPerCol);
|
||||
Widgets widgets;
|
||||
widgets.mMultiplier = mAssignWidget->createWidget<MyGUI::TextBox>(
|
||||
"SandTextVCenter", { offset, 20 * row, 100, 20 }, MyGUI::Align::Default);
|
||||
|
|
@ -79,7 +78,7 @@ namespace MWGui
|
|||
|
||||
mAssignWidget->setVisibleVScroll(false);
|
||||
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->setViewOffset(MyGUI::IntPoint());
|
||||
}
|
||||
|
|
@ -397,10 +396,8 @@ namespace MWGui
|
|||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
|
||||
{
|
||||
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
||||
if (mControllerFocus == 0)
|
||||
mControllerFocus = 3;
|
||||
else if (mControllerFocus == 4)
|
||||
mControllerFocus = 7;
|
||||
if (mControllerFocus % mPerCol == 0)
|
||||
mControllerFocus += mPerCol - 1;
|
||||
else
|
||||
mControllerFocus--;
|
||||
setControllerFocus(mAttributeButtons, mControllerFocus, true);
|
||||
|
|
@ -408,10 +405,8 @@ namespace MWGui
|
|||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||
{
|
||||
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
||||
if (mControllerFocus == 3)
|
||||
mControllerFocus = 0;
|
||||
else if (mControllerFocus == 7)
|
||||
mControllerFocus = 4;
|
||||
if (mControllerFocus % mPerCol == mPerCol - 1)
|
||||
mControllerFocus -= mPerCol - 1;
|
||||
else
|
||||
mControllerFocus++;
|
||||
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)
|
||||
{
|
||||
setControllerFocus(mAttributeButtons, mControllerFocus, false);
|
||||
mControllerFocus = (mControllerFocus + 4) % mAttributeButtons.size();
|
||||
mControllerFocus = (mControllerFocus + mPerCol) % mAttributeButtons.size();
|
||||
setControllerFocus(mAttributeButtons, mControllerFocus, true);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ namespace MWGui
|
|||
|
||||
std::vector<ESM::Attribute::AttributeID> mSpentAttributes;
|
||||
|
||||
size_t mPerCol;
|
||||
unsigned int mCoinCount;
|
||||
|
||||
void onOkButtonClicked(MyGUI::Widget* sender);
|
||||
|
|
|
|||
Loading…
Reference in a new issue