Fixed issues with correctly recognising whether a multi-press input should be locked, or whether it supercedes an active input.
This commit is contained in:
parent
d18e77082e
commit
3e71bb31ae
@ -75,12 +75,12 @@ void UInputBufferLocalPlayerSubsystem::ActivateComboInput(const UComboInputAsset
|
|||||||
{
|
{
|
||||||
checkf(ComboInput, TEXT("Invalid %s."), *UComboInputAsset::StaticClass()->GetName());
|
checkf(ComboInput, TEXT("Invalid %s."), *UComboInputAsset::StaticClass()->GetName());
|
||||||
|
|
||||||
|
const bool bNewInputLocked = this->LockedComboInputs.Contains(ComboInput);
|
||||||
|
const bool bNewSupercedesActive = (this->InputBufferActive && this->InputBufferActive->ContainsOneOf(ComboInput->ActionGroup) && !bNewInputLocked);
|
||||||
|
|
||||||
// Make this combo input active if it isn't being locked, or if we are
|
// Make this combo input active if it isn't being locked, or if we are
|
||||||
// overwriting a previous combo input with a multi-press combo input.
|
// overwriting a previous combo input with a multi-press combo input.
|
||||||
const bool bMultiPressTimerActive = this->GetWorld()->GetTimerManager().IsTimerActive(this->MultiPressTimerHandle);
|
if (bNewSupercedesActive || !bNewInputLocked)
|
||||||
const bool bActiveInputLocked = this->LockedComboInputs.Contains(this->InputBufferActive);
|
|
||||||
const bool bNewInputLocked = this->LockedComboInputs.Contains(ComboInput);
|
|
||||||
if ((bMultiPressTimerActive && !bActiveInputLocked) || !bNewInputLocked)
|
|
||||||
{
|
{
|
||||||
if (!ComboInput->LockedComboInputs.IsEmpty())
|
if (!ComboInput->LockedComboInputs.IsEmpty())
|
||||||
{
|
{
|
||||||
@ -88,11 +88,7 @@ void UInputBufferLocalPlayerSubsystem::ActivateComboInput(const UComboInputAsset
|
|||||||
this->InputBufferActive = ComboInput;
|
this->InputBufferActive = ComboInput;
|
||||||
this->LockedComboInputs = ComboInput->LockedComboInputs;
|
this->LockedComboInputs = ComboInput->LockedComboInputs;
|
||||||
|
|
||||||
// Make sure the hold is clear if we're coming off of a multi-press action.
|
this->InputBufferHold = nullptr;
|
||||||
if (bMultiPressTimerActive)
|
|
||||||
{
|
|
||||||
this->InputBufferHold = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
UE_LOG(LogInputBufferLocalPlayerSubsystem, Verbose, TEXT("%s is active."), *ComboInput->ComboInputName.ToString());
|
UE_LOG(LogInputBufferLocalPlayerSubsystem, Verbose, TEXT("%s is active."), *ComboInput->ComboInputName.ToString());
|
||||||
}
|
}
|
||||||
@ -105,16 +101,16 @@ void UInputBufferLocalPlayerSubsystem::ActivateComboInput(const UComboInputAsset
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->HoldComboInput(ComboInput, bNewInputLocked);
|
this->HoldComboInput(ComboInput);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UInputBufferLocalPlayerSubsystem::HoldComboInput(const UComboInputAsset *ComboInput, const bool &bLocked)
|
void UInputBufferLocalPlayerSubsystem::HoldComboInput(const UComboInputAsset *ComboInput)
|
||||||
{
|
{
|
||||||
this->InputBufferHold = ComboInput;
|
this->InputBufferHold = ComboInput;
|
||||||
UE_SUPPRESS(LogInputBufferLocalPlayerSubsystem, Verbose,
|
UE_SUPPRESS(LogInputBufferLocalPlayerSubsystem, Verbose,
|
||||||
{
|
{
|
||||||
if (bLocked)
|
if (this->LockedComboInputs.Contains(ComboInput))
|
||||||
{
|
{
|
||||||
UE_LOG(LogInputBufferLocalPlayerSubsystem, Verbose, TEXT("%s is locked and won't be activated yet."), *ComboInput->ComboInputName.ToString());
|
UE_LOG(LogInputBufferLocalPlayerSubsystem, Verbose, TEXT("%s is locked and won't be activated yet."), *ComboInput->ComboInputName.ToString());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -119,7 +119,7 @@ public:
|
|||||||
// within a short time of one another. If only one is present, then
|
// within a short time of one another. If only one is present, then
|
||||||
// this combo input asset will simply represent that action.
|
// this combo input asset will simply represent that action.
|
||||||
UPROPERTY(BlueprintReadWrite, EditAnywhere)
|
UPROPERTY(BlueprintReadWrite, EditAnywhere)
|
||||||
TSet<TObjectPtr<const class UInputAction>> ActionGroup;
|
TSet<const class UInputAction*> ActionGroup;
|
||||||
|
|
||||||
// Combo inputs that should be prevented from occurring during this
|
// Combo inputs that should be prevented from occurring during this
|
||||||
// action. These will be locked when the action is broadcast, and
|
// action. These will be locked when the action is broadcast, and
|
||||||
|
|||||||
@ -33,7 +33,7 @@ private:
|
|||||||
void ExpireAction(const FInputActionValue &Value, const class UInputAction *Action);
|
void ExpireAction(const FInputActionValue &Value, const class UInputAction *Action);
|
||||||
|
|
||||||
void ActivateComboInput(const class UComboInputAsset *ComboInput);
|
void ActivateComboInput(const class UComboInputAsset *ComboInput);
|
||||||
void HoldComboInput(const class UComboInputAsset *ComboInput, const bool &bLocked);
|
void HoldComboInput(const class UComboInputAsset *ComboInput);
|
||||||
|
|
||||||
void ClearMultiPresses();
|
void ClearMultiPresses();
|
||||||
void ExpireBufferedActions();
|
void ExpireBufferedActions();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user