From 01e67be301b2185eaad61fd4a2018c3481bde23e Mon Sep 17 00:00:00 2001 From: mlthelama <47679057+mlthelama@users.noreply.github.com> Date: Sun, 5 Feb 2023 01:03:54 +0100 Subject: [PATCH] [cleanup] * cleanup: do not trigger equip for an action that is already equipped --- src/event/key_manager.cpp | 11 +++++------ src/handle/setting/setting_execute.cpp | 7 ++++++- src/handle/setting/setting_execute.h | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/event/key_manager.cpp b/src/event/key_manager.cpp index f0d4f2c..827ef4e 100644 --- a/src/event/key_manager.cpp +++ b/src/event/key_manager.cpp @@ -172,15 +172,14 @@ namespace event { } if (elden && button->IsPressed()) { - handle::position_setting* page_setting = nullptr; if (is_key_valid(key_bottom_execute_or_toggle_) && key_ == key_bottom_execute_or_toggle_) { - page_setting = handle::setting_execute::get_position_setting_for_key(key_bottom_action_); + auto page_setting = handle::setting_execute::get_position_setting_for_key(key_bottom_action_); + handle::setting_execute::execute_settings(page_setting->slot_settings); } if (is_key_valid(key_top_execute_) && key_ == key_top_execute_) { - page_setting = handle::setting_execute::get_position_setting_for_key(key_top_action_); - } - if (page_setting) { - handle::setting_execute::execute_settings(page_setting->slot_settings); + auto page_setting = handle::setting_execute::get_position_setting_for_key(key_top_action_); + //only instant should need work, the default shout will be handled by the game + handle::setting_execute::execute_settings(page_setting->slot_settings, false, true); } } diff --git a/src/handle/setting/setting_execute.cpp b/src/handle/setting/setting_execute.cpp index 747fb16..36a51e4 100644 --- a/src/handle/setting/setting_execute.cpp +++ b/src/handle/setting/setting_execute.cpp @@ -12,7 +12,7 @@ namespace handle { using mcm = config::mcm_setting; - void setting_execute::execute_settings(const std::vector& a_slots, bool a_only_equip) { + void setting_execute::execute_settings(const std::vector& a_slots, bool a_only_equip, bool a_only_instant) { logger::trace("got {} settings execute"sv, a_slots.size()); std::vector un_equip; auto player = RE::PlayerCharacter::GetSingleton(); @@ -41,6 +41,11 @@ namespace handle { continue; } + if (mcm::get_elden_demon_souls() && a_only_instant && slot->action != slot_setting::acton_type::instant) { + logger::trace("form {} does not need any work, skipping"sv, slot->form ? util::string_util::int_to_hex(slot->form->GetFormID()) : "null"); + continue; + } + logger::trace("executing setting for type {}, action {}, form {}, left {} ..."sv, static_cast(slot->type), static_cast(slot->action), diff --git a/src/handle/setting/setting_execute.h b/src/handle/setting/setting_execute.h index e1a103d..72888e1 100644 --- a/src/handle/setting/setting_execute.h +++ b/src/handle/setting/setting_execute.h @@ -5,7 +5,7 @@ namespace handle { class setting_execute { public: - static void execute_settings(const std::vector& a_slots, bool a_only_equip = false); + static void execute_settings(const std::vector& a_slots, bool a_only_equip = false, bool a_only_instant = false); static position_setting* get_position_setting_for_key(uint32_t a_key); static void execute_ammo(const RE::TESForm* a_form);