/** The TargetActor we spawned locally has called back with valid target data */ void UAbilityTask_WaitTargetData::OnTargetDataReadyCallback(FGameplayAbilityTargetDataHandle Data) { check(AbilitySystemComponent); if (!Ability) { return; } FScopedPredictionWindow ScopedPrediction(AbilitySystemComponent, ShouldReplicateDataToServer()); const FGameplayAbilityActorInfo* Info = Ability->GetCurrentActorInfo(); if (IsPredictingClient()) { if (!TargetActor->ShouldProduceTargetDataOnServer) { FGameplayTag ApplicationTag; // Fixme: where would this be useful? AbilitySystemComponent->ServerSetReplicatedTargetData(GetAbilitySpecHandle(), GetActivationPredictionKey(), Data, ApplicationTag, AbilitySystemComponent->ScopedPredictionKey); } else if (ConfirmationType == EGameplayTargetingConfirmation::UserConfirmed) { // We aren't going to send the target data, but we will send a generic confirmed message. AbilitySystemComponent->ServerSetReplicatedEvent(EAbilityGenericReplicatedEvent::GenericConfirm, GetAbilitySpecHandle(), GetActivationPredictionKey(), AbilitySystemComponent->ScopedPredictionKey); } } ValidData.Broadcast(Data); if (ConfirmationType != EGameplayTargetingConfirmation::CustomMulti) { EndTask(); } }
/** The TargetActor we spawned locally has called back with valid target data */ void UAbilityTask_WaitTargetData::OnTargetDataReadyCallback(FGameplayAbilityTargetDataHandle Data) { check(AbilitySystemComponent.IsValid()); FScopedPredictionWindow ScopedPrediction(AbilitySystemComponent.Get(), ShouldReplicateDataToServer()); if (ShouldReplicateDataToServer()) { AbilitySystemComponent->ServerSetReplicatedTargetData(Data, AbilitySystemComponent->ScopedPredictionKey); } ValidData.Broadcast(Data); if (ConfirmationType != EGameplayTargetingConfirmation::CustomMulti) { EndTask(); } }