void UGameplayAbility_Montage::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo) { if (!CommitAbility(Handle, ActorInfo, ActivationInfo)) { return; } if (MontageToPlay != NULL && ActorInfo->AnimInstance != NULL && ActorInfo->AnimInstance->GetActiveMontageInstance() == NULL) { TArray<FActiveGameplayEffectHandle> AppliedEffects; // Apply GameplayEffects for (const UGameplayEffect* Effect : GameplayEffectsWhileAnimating) { FActiveGameplayEffectHandle Handle = ActorInfo->AbilitySystemComponent->ApplyGameplayEffectToSelf(Effect, 1.f, GetEffectContext(ActorInfo)); if (Handle.IsValid()) { AppliedEffects.Add(Handle); } } float const Duration = ActorInfo->AnimInstance->Montage_Play(MontageToPlay, PlayRate); FOnMontageEnded EndDelegate; EndDelegate.BindUObject(this, &UGameplayAbility_Montage::OnMontageEnded, ActorInfo->AbilitySystemComponent, AppliedEffects); ActorInfo->AnimInstance->Montage_SetEndDelegate(EndDelegate); if (SectionName != NAME_None) { ActorInfo->AnimInstance->Montage_JumpToSection(SectionName); } } }
void UGameplayAbility_CharacterJump::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData) { if (HasAuthorityOrPredictionKey(ActorInfo, &ActivationInfo)) { if (!CommitAbility(Handle, ActorInfo, ActivationInfo)) { return; } ACharacter * Character = CastChecked<ACharacter>(ActorInfo->AvatarActor.Get()); Character->Jump(); } }
void UGameplayAbility_CharacterJump::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo) { if (ActivationInfo.ActivationMode == EGameplayAbilityActivationMode::Authority || ActivationInfo.ActivationMode == EGameplayAbilityActivationMode::Predicting) { if (!CommitAbility(Handle, ActorInfo, ActivationInfo)) { return; } ACharacter * Character = CastChecked<ACharacter>(ActorInfo->AvatarActor.Get()); Character->Jump(); } }
void UGameplayAbility::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo) { SetCurrentInfo(Handle, ActorInfo, ActivationInfo); if (HasBlueprintActivate) { // A Blueprinted ActivateAbility function must call CommitAbility somewhere in its execution chain. K2_ActivateAbility(); } else { // Native child classes may want to override ActivateAbility and do something like this: // Do stuff... if (CommitAbility(Handle, ActorInfo, ActivationInfo)) // ..then commit the ability... { // Then do more stuff... } } }
bool UGameplayAbility::K2_CommitAbility() { check(CurrentActorInfo); return CommitAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo); }