Fixed various crashes and infinite loops when encountering unhandled or null combo input assets.
This commit is contained in:
parent
a4913db597
commit
aa81438bc7
@ -77,12 +77,10 @@ void UComboManagerComponent::ActivateComboAction(const UComboInputAsset *Input)
|
|||||||
this->BroadcastDelegates(*ComboAction, EComboActionTriggerEvent::Activated);
|
this->BroadcastDelegates(*ComboAction, EComboActionTriggerEvent::Activated);
|
||||||
UE_LOG(LogComboManagerComponent, Verbose, TEXT("Fallback action %s activated"), *(*ComboAction)->ActionName.ToString());
|
UE_LOG(LogComboManagerComponent, Verbose, TEXT("Fallback action %s activated"), *(*ComboAction)->ActionName.ToString());
|
||||||
}
|
}
|
||||||
// If we haven't found an action to perform, reset the combo and activate using the default start node.
|
// If we haven't found an action to perform, end here.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->ActiveNode = nullptr;
|
UE_LOG(LogComboManagerComponent, Verbose, TEXT("No action found for %s"), *Input->ComboInputName.ToString());
|
||||||
this->ActivateComboAction(Input);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void UComboManagerComponent::DEBUG__UnlockAction(TObjectPtr<const UComboInputAsset> Unlock)
|
void UComboManagerComponent::DEBUG__UnlockAction(TObjectPtr<const UComboInputAsset> Unlock)
|
||||||
|
|||||||
@ -27,12 +27,19 @@ void UInputBufferComponent::BeginPlay()
|
|||||||
const UInputBufferSubsystemGlobalSettings *Settings = GetDefault<UInputBufferSubsystemGlobalSettings>();
|
const UInputBufferSubsystemGlobalSettings *Settings = GetDefault<UInputBufferSubsystemGlobalSettings>();
|
||||||
TSet<const UInputAction *> InputActionsToBind;
|
TSet<const UInputAction *> InputActionsToBind;
|
||||||
for (TSoftObjectPtr<const UComboInputAsset> ComboInput : Settings->ComboActions)
|
for (TSoftObjectPtr<const UComboInputAsset> ComboInput : Settings->ComboActions)
|
||||||
|
{
|
||||||
|
if (ComboInput.IsValid())
|
||||||
{
|
{
|
||||||
for (const UInputAction *InputAction : ComboInput->ActionGroup)
|
for (const UInputAction *InputAction : ComboInput->ActionGroup)
|
||||||
{
|
{
|
||||||
InputActionsToBind.Add(InputAction);
|
InputActionsToBind.Add(InputAction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LogInputBufferComponent, Verbose, TEXT("Invalid combo action found in Combo Actions list in %s"), *Settings->GetClass()->GetName());
|
||||||
|
}
|
||||||
|
}
|
||||||
for (const UInputAction *InputAction : InputActionsToBind)
|
for (const UInputAction *InputAction : InputActionsToBind)
|
||||||
{
|
{
|
||||||
this->BindAction(InputAction, ETriggerEvent::Started, this, &UInputBufferComponent::AddActionToBuffer, InputAction);
|
this->BindAction(InputAction, ETriggerEvent::Started, this, &UInputBufferComponent::AddActionToBuffer, InputAction);
|
||||||
@ -51,6 +58,8 @@ void UInputBufferComponent::AddActionToBuffer(const FInputActionValue &Value, co
|
|||||||
// Find any combo input that matches this action, plus buffered actions.
|
// Find any combo input that matches this action, plus buffered actions.
|
||||||
const UInputBufferSubsystemGlobalSettings *Settings = GetDefault<UInputBufferSubsystemGlobalSettings>();
|
const UInputBufferSubsystemGlobalSettings *Settings = GetDefault<UInputBufferSubsystemGlobalSettings>();
|
||||||
for (TSoftObjectPtr<const UComboInputAsset> ComboInput : Settings->ComboActions)
|
for (TSoftObjectPtr<const UComboInputAsset> ComboInput : Settings->ComboActions)
|
||||||
|
{
|
||||||
|
if (ComboInput.IsValid())
|
||||||
{
|
{
|
||||||
if (ComboInput->MatchesInputActions(this->MostRecentActions))
|
if (ComboInput->MatchesInputActions(this->MostRecentActions))
|
||||||
{
|
{
|
||||||
@ -59,6 +68,11 @@ void UInputBufferComponent::AddActionToBuffer(const FInputActionValue &Value, co
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LogInputBufferComponent, Verbose, TEXT("Invalid combo action found in Combo Actions list in %s"), *Settings->GetClass()->GetName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this->GetWorld()->GetTimerManager().SetTimer(this->MultiPressTimerHandle, this, &UInputBufferComponent::ClearMultiPresses, Settings->MultiPressTimerLength);
|
this->GetWorld()->GetTimerManager().SetTimer(this->MultiPressTimerHandle, this, &UInputBufferComponent::ClearMultiPresses, Settings->MultiPressTimerLength);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user