diff --git a/Plugins/VRGAS/Source/VRGAS/Private/AbilitySystem/StartupData/VRStartupAbilitySystemData.cpp b/Plugins/VRGAS/Source/VRGAS/Private/AbilitySystem/StartupData/VRStartupAbilitySystemData.cpp index 1546278..8a11efd 100644 --- a/Plugins/VRGAS/Source/VRGAS/Private/AbilitySystem/StartupData/VRStartupAbilitySystemData.cpp +++ b/Plugins/VRGAS/Source/VRGAS/Private/AbilitySystem/StartupData/VRStartupAbilitySystemData.cpp @@ -2,3 +2,19 @@ #include "AbilitySystem/StartupData/VRStartupAbilitySystemData.h" + +#include "AbilitySystemComponent.h" +#include "VRGASUtils.h" + +void UVRStartupAbilitySystemData::GiveToAbilitySystemComponent(UAbilitySystemComponent* InAbilitySystemComponent, int32 ApplyLevel) +{ + check(InAbilitySystemComponent) + + AActor* AvatarActor = InAbilitySystemComponent->GetAvatarActor(); + + UVRGASUtils::BatchGrantAbilities(StartupAbilities, InAbilitySystemComponent, ApplyLevel); + UVRGASUtils::BatchGrantAbilitySets(StartupAbilitySets, InAbilitySystemComponent); + + // Should the avatar actor be the source of the attribute set initializer effect? + UVRGASUtils::ApplyEffectToTargetASC(InAbilitySystemComponent, AttributeInitEffect, AvatarActor, AttributeInitLevel); +} diff --git a/Plugins/VRGAS/Source/VRGAS/Public/AbilitySystem/StartupData/VRStartupAbilitySystemData.h b/Plugins/VRGAS/Source/VRGAS/Public/AbilitySystem/StartupData/VRStartupAbilitySystemData.h index 577dd1f..5fcaa9e 100644 --- a/Plugins/VRGAS/Source/VRGAS/Public/AbilitySystem/StartupData/VRStartupAbilitySystemData.h +++ b/Plugins/VRGAS/Source/VRGAS/Public/AbilitySystem/StartupData/VRStartupAbilitySystemData.h @@ -10,8 +10,12 @@ struct FVRAbilitySet; class UGameplayAbility; + /** - * + * @class UVRStartupAbilitySystemData + * + * A data asset that contains information about initial abilities, ability sets, + * and attribute initialization effects that should be given to an ability system component. */ UCLASS() class VRGAS_API UVRStartupAbilitySystemData : public UDataAsset @@ -19,15 +23,19 @@ class VRGAS_API UVRStartupAbilitySystemData : public UDataAsset GENERATED_BODY() public: - + // Gives abilities and ability sets to the target ASC, as well as applies the attribute initializer gameplay effect + virtual void GiveToAbilitySystemComponent(UAbilitySystemComponent* InAbilitySystemComponent, int32 ApplyLevel = 1); + + // Add accessors as needed +protected: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Starup Data|Abilities") - TArray StartupAbilities; + TArray> StartupAbilities; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Starup Data|Abilities") TArray StartupAbilitySets; UPROPERTY(EditDefaultsOnly, Category = "Startup Data|Attributes") - UGameplayEffect AttributeInitEffect; + TSubclassOf AttributeInitEffect; UPROPERTY(EditDefaultsOnly, Category = "Startup Data|Attributes") float AttributeInitLevel = 1.f;