diff --git a/Source/ComboInput/Private/Components/InputBufferComponent.cpp b/Source/ComboInput/Private/Components/InputBufferComponent.cpp index 5c886fb..2d8cc89 100644 --- a/Source/ComboInput/Private/Components/InputBufferComponent.cpp +++ b/Source/ComboInput/Private/Components/InputBufferComponent.cpp @@ -7,7 +7,7 @@ #include "Kismet/GameplayStatics.h" #include "Components/ComboManagerComponent.h" -#include "GlobalSettings/InputBufferSubsystemGlobalSettings.h" +#include "GlobalSettings/InputBufferGlobalSettings.h" DEFINE_LOG_CATEGORY(LogInputBufferComponent); @@ -24,12 +24,13 @@ void UInputBufferComponent::BeginPlay() this->OnNewComboInput.BindUObject(ComboManager, &UComboManagerComponent::HandleComboInput); // Get all unique EnhancedInput actions bound to combo input actions. - const UInputBufferSubsystemGlobalSettings *Settings = GetDefault(); + const UInputBufferGlobalSettings *Settings = GetDefault(); TSet InputActionsToBind; - for (TSoftObjectPtr ComboInput : Settings->ComboActions) + for (TSoftObjectPtr ComboInput : Settings->ComboInputs) { if (ComboInput.IsValid()) { + this->ComboInputList.Emplace(ComboInput.Get()); for (const UInputAction *InputAction : ComboInput->ActionGroup) { InputActionsToBind.Add(InputAction); @@ -56,24 +57,17 @@ void UInputBufferComponent::AddActionToBuffer(const FInputActionValue &Value, co this->ExpiringActions.Remove(Action); // Find any combo input that matches this action, plus buffered actions. - const UInputBufferSubsystemGlobalSettings *Settings = GetDefault(); - for (TSoftObjectPtr ComboInput : Settings->ComboActions) + for (TObjectPtr ComboInput : this->ComboInputList) { - if (ComboInput.IsValid()) + if (ComboInput->MatchesInputActions(this->MostRecentActions)) { - if (ComboInput->MatchesInputActions(this->MostRecentActions)) - { - this->ActivateComboInput(ComboInput.Get()); + this->ActivateComboInput(ComboInput.Get()); - break; - } - } - else - { - UE_LOG(LogInputBufferComponent, Verbose, TEXT("Invalid combo action found in Combo Actions list in %s"), *Settings->GetClass()->GetName()); + break; } } + const UInputBufferGlobalSettings *Settings = GetDefault(); this->GetWorld()->GetTimerManager().SetTimer(this->MultiPressTimerHandle, this, &UInputBufferComponent::ClearMultiPresses, Settings->MultiPressTimerLength); } void UInputBufferComponent::ClearMultiPresses() @@ -104,10 +98,10 @@ void UInputBufferComponent::ActivateComboInput(const UComboInputAsset *ComboInpu this->InputBufferActive = ComboInput; this->InputBufferHold = nullptr; - const UInputBufferSubsystemGlobalSettings *Settings = GetDefault(); - for (const TSoftObjectPtr &LockedAsset : Settings->ComboActions) + const UInputBufferGlobalSettings *Settings = GetDefault(); + for (const TObjectPtr &LockedAsset : this->ComboInputList) { - this->LockComboInput(LockedAsset.Get()); + this->LockComboInput(LockedAsset); } this->OnNewComboInput.Execute(ComboInput, EComboActionTriggerEvent::Activated); @@ -183,7 +177,7 @@ void UInputBufferComponent::ExpireAction(const FInputActionValue &Value, const c // Prepare to expire any buffered combo inputs this->ExpiringActions.Add(Action); - const UInputBufferSubsystemGlobalSettings *Settings = GetDefault(); + const UInputBufferGlobalSettings *Settings = GetDefault(); this->GetWorld()->GetTimerManager().SetTimer(this->InputReleaseExpirationTimerHandle, this, &UInputBufferComponent::ExpireBufferedActions, Settings->InputReleaseExpirationTimerLength); } void UInputBufferComponent::ExpireBufferedActions() diff --git a/Source/ComboInput/Private/GlobalSettings/InputBufferSubsystemGlobalSettings.cpp b/Source/ComboInput/Private/GlobalSettings/InputBufferGlobalSettings.cpp similarity index 51% rename from Source/ComboInput/Private/GlobalSettings/InputBufferSubsystemGlobalSettings.cpp rename to Source/ComboInput/Private/GlobalSettings/InputBufferGlobalSettings.cpp index b45493d..b5a6bd7 100644 --- a/Source/ComboInput/Private/GlobalSettings/InputBufferSubsystemGlobalSettings.cpp +++ b/Source/ComboInput/Private/GlobalSettings/InputBufferGlobalSettings.cpp @@ -1,6 +1,6 @@ // ©2023 Batty Bovine Productions, LLC. All Rights Reserved. -#include "GlobalSettings/InputBufferSubsystemGlobalSettings.h" +#include "GlobalSettings/InputBufferGlobalSettings.h" diff --git a/Source/ComboInput/Public/Components/InputBufferComponent.h b/Source/ComboInput/Public/Components/InputBufferComponent.h index 4c386dc..3835635 100644 --- a/Source/ComboInput/Public/Components/InputBufferComponent.h +++ b/Source/ComboInput/Public/Components/InputBufferComponent.h @@ -49,6 +49,9 @@ private: // Set of currently locked actions; will not be activated until an unlock signal is received. TSet> LockedComboInputs; + // A local backup of the global setting containing the list of combo inputs to respond to. + TSet> ComboInputList; + TSet MostRecentActions; TSet ExpiringActions; diff --git a/Source/ComboInput/Public/GlobalSettings/InputBufferSubsystemGlobalSettings.h b/Source/ComboInput/Public/GlobalSettings/InputBufferGlobalSettings.h similarity index 78% rename from Source/ComboInput/Public/GlobalSettings/InputBufferSubsystemGlobalSettings.h rename to Source/ComboInput/Public/GlobalSettings/InputBufferGlobalSettings.h index 03448e4..28a1923 100644 --- a/Source/ComboInput/Public/GlobalSettings/InputBufferSubsystemGlobalSettings.h +++ b/Source/ComboInput/Public/GlobalSettings/InputBufferGlobalSettings.h @@ -4,14 +4,14 @@ #include "Engine/DeveloperSettingsBackedByCVars.h" -#include "InputBufferSubsystemGlobalSettings.generated.h" +#include "InputBufferGlobalSettings.generated.h" /** - * Global settings for the input buffer subsystem + * Global settings for the input buffer */ -UCLASS(Config=Game, defaultconfig, meta=(DisplayName="Input Buffer Subsystem")) -class COMBOINPUT_API UInputBufferSubsystemGlobalSettings : public UDeveloperSettingsBackedByCVars +UCLASS(Config=Game, defaultconfig, meta=(DisplayName="Input Buffer")) +class COMBOINPUT_API UInputBufferGlobalSettings : public UDeveloperSettingsBackedByCVars { GENERATED_BODY() @@ -20,7 +20,7 @@ public: // either if an action is made while the current combo is inactive, or when the previous // action expires. UPROPERTY(Config, BlueprintReadOnly, EditDefaultsOnly) - TSet> ComboActions; + TSet> ComboInputs; // Length of time after releasing an input to keep the associated combo action buffered before clearing it. UPROPERTY(Config, BlueprintReadOnly, EditDefaultsOnly, meta=(UIMin="0.0", UIMax="0.5", ClampMin="0.0", ClampMax="0.5"))