More control over playing a montage

This commit is contained in:
Kevin Poretti 2023-10-28 14:09:02 -04:00
parent 28963c78e9
commit d9ec367b82
2 changed files with 30 additions and 9 deletions

View File

@ -63,15 +63,8 @@ bool UFFState::CanTransition(const FFFStateContext& InStateContext)
void UFFState::Enter(const FFFStateContext& InStateContext) void UFFState::Enter(const FFFStateContext& InStateContext)
{ {
if(InStateContext.Avatar) PlayMontage(InStateContext);
{
USkeletalMeshComponent* SMC = InStateContext.Avatar->GetComponentByClass<USkeletalMeshComponent>();
if(SMC && MontageToPlay)
{
SMC->GetAnimInstance()->Montage_Play(MontageToPlay);
}
}
OnEnter(InStateContext); OnEnter(InStateContext);
} }
@ -180,6 +173,11 @@ void UFFState::RegisterInputHandler(const FFFInputSequence& InRequiredSequence,
InputHandlers.Add(TempHandler); InputHandlers.Add(TempHandler);
} }
void UFFState::PlayMontage(const FFFStateContext& InStateContext)
{
OnPlayMontage(InStateContext);
}
void UFFState::OnInit_Implementation(const FFFStateContext& InStateContext) void UFFState::OnInit_Implementation(const FFFStateContext& InStateContext)
{ {
@ -192,6 +190,19 @@ bool UFFState::OnCanTransition_Implementation(const FFFStateContext& InStateCont
} }
void UFFState::OnPlayMontage_Implementation(const FFFStateContext& InStateContext)
{
if(InStateContext.Avatar)
{
USkeletalMeshComponent* SMC = InStateContext.Avatar->GetComponentByClass<USkeletalMeshComponent>();
if(SMC && MontageToPlay)
{
SMC->GetAnimInstance()->Montage_Play(MontageToPlay);
}
}
}
UWorld* UFFState::GetWorld() const UWorld* UFFState::GetWorld() const
{ {
UFFStateMachineComponent* SMC = Cast<UFFStateMachineComponent>(GetOuter()); UFFStateMachineComponent* SMC = Cast<UFFStateMachineComponent>(GetOuter());

View File

@ -228,6 +228,16 @@ public:
UFUNCTION(BlueprintImplementableEvent, Category="UFF|State|Events") UFUNCTION(BlueprintImplementableEvent, Category="UFF|State|Events")
void OnUpdate(float OneFrame, const FFFStateContext& InStateContext); void OnUpdate(float OneFrame, const FFFStateContext& InStateContext);
UFUNCTION(BlueprintCallable, Category="UFF|State|Animations")
void PlayMontage(const FFFStateContext& InStateContext);
/**
* Blueprint hook for overriding the logic for when a anim montage plays at the start of a state
* @param InStateContext
*/
UFUNCTION(BlueprintNativeEvent, Category="UFF|State|Events")
void OnPlayMontage(const FFFStateContext& InStateContext);
// TODO: document // TODO: document
UFUNCTION(BlueprintImplementableEvent, Category="UFF|State|Events") UFUNCTION(BlueprintImplementableEvent, Category="UFF|State|Events")
void OnLanded(const FHitResult& Hit, const FFFStateContext& InStateContext); void OnLanded(const FHitResult& Hit, const FFFStateContext& InStateContext);