document.write("
// Fill out your copyright notice in the Description page of Project Settings.
#include "DandelionAbilitySet.h"
#include "AbilitySystemComponent.h"
#include "AbilitySystemLog.h"
#include "GameplayAbilitySpec.h"
#include "Dandelion/Sandbox/Input/InputActionGameplayAbilityMappings.h"
void UDandelionAbilitySet::GiveAbilities(
UAbilitySystemComponent* AbilitySystemComponent,
const UInputActionGameplayAbilityMappings* InputActionGameplayAbilityMappings
) const
{
if (Abilities.IsEmpty())
{
UE_LOG(
LogAbilitySystem,
Warning,
TEXT("%s: Attempted GiveAbilities with an empty ability set."),
*GetFullNameSafe(this)
)
return;
}
if (!ensure(IsValid(AbilitySystemComponent)))
{
UE_LOG(
LogAbilitySystem,
Error,
TEXT("%s: Attempted GiveAbilities without a valid AbilitySystemComponent."),
*GetFullNameSafe(this)
)
return;
}
// Can still proceed without mappings. Possibly just GAs that aren't tied to IAs.
if (!IsValid(InputActionGameplayAbilityMappings))
{
UE_LOG(
LogAbilitySystem,
Warning,
TEXT("%s: Attempted GiveAbilities with invalid InputActionGameplayAbilityMappings."),
*GetFullNameSafe(this)
)
}
for (const TSubclassOf<UGameplayAbility>& Ability : Abilities)
{
if (!ensure(IsValid(Ability.Get())))
{
UE_LOG(
LogAbilitySystem,
Error,
TEXT("%s: Attempted GiveAbilities with an invalid GameplayAbility."),
*GetFullNameSafe(this)
)
continue;
}
GiveAbility(AbilitySystemComponent, InputActionGameplayAbilityMappings, Ability);
}
}
void UDandelionAbilitySet::GiveAbility(
UAbilitySystemComponent* AbilitySystemComponent,
const UInputActionGameplayAbilityMappings* InputActionGameplayAbilityMappings,
const TSubclassOf<UGameplayAbility>& Ability
)
{
if (const FInputActionGameplayAbilityMappingData* AbilityData =
InputActionGameplayAbilityMappings ?
InputActionGameplayAbilityMappings->GetMappingDataByGameplayAbilityClass(Ability) :
nullptr)
{
FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(Ability.Get(), 1, AbilityData->InputID);
AbilitySystemComponent->GiveAbility(AbilitySpec);
return;
}
FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(Ability.Get(), 1);
AbilitySystemComponent->GiveAbility(AbilitySpec);
}
DandelionAbilitySet.cpp - Snippet hosted by \"Cacher\"
");