diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 24ac61e16..e9f138081 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -2203,6 +2203,7 @@ void InitPadmapActions() [] { ToggleChatLog(); }); + sgOptions.Padmapper.CommitActions(); } void FreeGameMem() diff --git a/Source/options.cpp b/Source/options.cpp index 594862762..4346ec476 100644 --- a/Source/options.cpp +++ b/Source/options.cpp @@ -1444,19 +1444,10 @@ PadmapperOptions::PadmapperOptions() } } -std::forward_list &PadmapperOptions::GetActions() -{ - if (!reversed) { - actions.reverse(); - reversed = true; - } - return actions; -} - std::vector PadmapperOptions::GetEntries() { std::vector 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 actionPressed, std::function actionReleased, std::function 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; diff --git a/Source/options.h b/Source/options.h index 92e66b511..a312d0c39 100644 --- a/Source/options.h +++ b/Source/options.h @@ -735,6 +735,7 @@ struct PadmapperOptions : OptionCategoryBase { std::function actionReleased = nullptr, std::function 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> buttonToReleaseAction; std::unordered_map buttonToButtonName; std::unordered_map buttonNameToButton; - bool reversed = false; - - std::forward_list &GetActions(); + bool committed = false; }; struct Options {