Browse Source

Ensure that padmapper actions are in the correct order after initialization

pull/5453/head
staphen 3 years ago committed by Anders Jenbo
parent
commit
4579324726
  1. 1
      Source/diablo.cpp
  2. 25
      Source/options.cpp
  3. 5
      Source/options.h

1
Source/diablo.cpp

@ -2203,6 +2203,7 @@ void InitPadmapActions()
[] {
ToggleChatLog();
});
sgOptions.Padmapper.CommitActions();
}
void FreeGameMem()

25
Source/options.cpp

@ -1444,19 +1444,10 @@ PadmapperOptions::PadmapperOptions()
}
}
std::forward_list<PadmapperOptions::Action> &PadmapperOptions::GetActions()
{
if (!reversed) {
actions.reverse();
reversed = true;
}
return actions;
}
std::vector<OptionEntryBase *> PadmapperOptions::GetEntries()
{
std::vector<OptionEntryBase *> entries;
for (Action &action : GetActions()) {
for (Action &action : actions) {
entries.push_back(&action);
}
return entries;
@ -1591,14 +1582,24 @@ bool PadmapperOptions::Action::SetValue(ControllerButtonCombo value)
void PadmapperOptions::AddAction(string_view key, const char *name, const char *description, ControllerButtonCombo defaultInput, std::function<void()> actionPressed, std::function<void()> actionReleased, std::function<bool()> enable, unsigned index)
{
if (committed)
return;
actions.emplace_front(key, name, description, defaultInput, std::move(actionPressed), std::move(actionReleased), std::move(enable), index);
}
void PadmapperOptions::CommitActions()
{
if (committed)
return;
actions.reverse();
committed = true;
}
void PadmapperOptions::ButtonPressed(ControllerButton button)
{
// To give preference to button combinations,
// first pass ignores mappings where no modifier is bound
for (Action &action : GetActions()) {
for (Action &action : actions) {
ControllerButtonCombo combo = action.boundInput;
if (combo.modifier == ControllerButton_NONE)
continue;
@ -1615,7 +1616,7 @@ void PadmapperOptions::ButtonPressed(ControllerButton button)
return;
}
for (Action &action : GetActions()) {
for (Action &action : actions) {
ControllerButtonCombo combo = action.boundInput;
if (combo.modifier != ControllerButton_NONE)
continue;

5
Source/options.h

@ -735,6 +735,7 @@ struct PadmapperOptions : OptionCategoryBase {
std::function<void()> actionReleased = nullptr,
std::function<bool()> enable = nullptr,
unsigned index = 0);
void CommitActions();
void ButtonPressed(ControllerButton button);
void ButtonReleased(ControllerButton button);
string_view InputNameForAction(string_view actionName) const;
@ -745,9 +746,7 @@ private:
std::unordered_map<ControllerButton, std::reference_wrapper<Action>> buttonToReleaseAction;
std::unordered_map<ControllerButton, std::string> buttonToButtonName;
std::unordered_map<std::string, ControllerButton> buttonNameToButton;
bool reversed = false;
std::forward_list<Action> &GetActions();
bool committed = false;
};
struct Options {

Loading…
Cancel
Save