From 97fded2abb4cedec89cb59746ba6bd6c27403f40 Mon Sep 17 00:00:00 2001 From: Jonathan Rampersad Date: Mon, 18 Nov 2024 20:20:40 -0400 Subject: [PATCH] Construct Ability System Component and Attribute Set --- Aura.uproject | 7 ++++++- Source/Aura/Aura.Build.cs | 4 ++-- .../AbilitySystem/AuraAbilitySystemComponent.cpp | 4 ++++ .../Private/AbilitySystem/AuraAttributeSet.cpp | 4 ++++ .../Aura/Private/Character/AuraCharacterBase.cpp | 5 +++++ Source/Aura/Private/Character/AuraEnemy.cpp | 8 ++++++++ Source/Aura/Private/Player/AuraPlayerState.cpp | 14 ++++++++++++++ .../AbilitySystem/AuraAbilitySystemComponent.h | 16 ++++++++++++++++ .../Aura/Public/AbilitySystem/AuraAttributeSet.h | 16 ++++++++++++++++ Source/Aura/Public/Character/AuraCharacterBase.h | 13 ++++++++++++- Source/Aura/Public/Player/AuraPlayerState.h | 14 +++++++++++++- 11 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 Source/Aura/Private/AbilitySystem/AuraAbilitySystemComponent.cpp create mode 100644 Source/Aura/Private/AbilitySystem/AuraAttributeSet.cpp create mode 100644 Source/Aura/Public/AbilitySystem/AuraAbilitySystemComponent.h create mode 100644 Source/Aura/Public/AbilitySystem/AuraAttributeSet.h diff --git a/Aura.uproject b/Aura.uproject index 55223af..4e05c12 100644 --- a/Aura.uproject +++ b/Aura.uproject @@ -9,7 +9,8 @@ "Type": "Runtime", "LoadingPhase": "Default", "AdditionalDependencies": [ - "Engine" + "Engine", + "GameplayAbilities" ] } ], @@ -29,6 +30,10 @@ { "Name": "RenderDocPlugin", "Enabled": false + }, + { + "Name": "GameplayAbilities", + "Enabled": true } ], "TargetPlatforms": [ diff --git a/Source/Aura/Aura.Build.cs b/Source/Aura/Aura.Build.cs index 60ef6ed..cb88761 100644 --- a/Source/Aura/Aura.Build.cs +++ b/Source/Aura/Aura.Build.cs @@ -8,9 +8,9 @@ public class Aura : ModuleRules { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" }); + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "GameplayAbilities" }); - PrivateDependencyModuleNames.AddRange(new string[] { }); + PrivateDependencyModuleNames.AddRange(new string[] { "GameplayTags", "GameplayTasks" }); // Uncomment if you are using Slate UI // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); diff --git a/Source/Aura/Private/AbilitySystem/AuraAbilitySystemComponent.cpp b/Source/Aura/Private/AbilitySystem/AuraAbilitySystemComponent.cpp new file mode 100644 index 0000000..de94634 --- /dev/null +++ b/Source/Aura/Private/AbilitySystem/AuraAbilitySystemComponent.cpp @@ -0,0 +1,4 @@ +// Assets provided by DruidMechanics. Copyright Jonathan Rampersad 2024 + + +#include "AbilitySystem/AuraAbilitySystemComponent.h" diff --git a/Source/Aura/Private/AbilitySystem/AuraAttributeSet.cpp b/Source/Aura/Private/AbilitySystem/AuraAttributeSet.cpp new file mode 100644 index 0000000..ea29bd0 --- /dev/null +++ b/Source/Aura/Private/AbilitySystem/AuraAttributeSet.cpp @@ -0,0 +1,4 @@ +// Assets provided by DruidMechanics. Copyright Jonathan Rampersad 2024 + + +#include "AbilitySystem/AuraAttributeSet.h" diff --git a/Source/Aura/Private/Character/AuraCharacterBase.cpp b/Source/Aura/Private/Character/AuraCharacterBase.cpp index 3423ec5..4fdf96d 100644 --- a/Source/Aura/Private/Character/AuraCharacterBase.cpp +++ b/Source/Aura/Private/Character/AuraCharacterBase.cpp @@ -14,6 +14,11 @@ AAuraCharacterBase::AAuraCharacterBase() } +UAbilitySystemComponent* AAuraCharacterBase::GetAbilitySystemComponent() const +{ + return AbilitySystemComponent; +} + // Called when the game starts or when spawned void AAuraCharacterBase::BeginPlay() { diff --git a/Source/Aura/Private/Character/AuraEnemy.cpp b/Source/Aura/Private/Character/AuraEnemy.cpp index 6dafc78..a3624c3 100644 --- a/Source/Aura/Private/Character/AuraEnemy.cpp +++ b/Source/Aura/Private/Character/AuraEnemy.cpp @@ -2,6 +2,9 @@ #include "Character/AuraEnemy.h" + +#include "AbilitySystem/AuraAbilitySystemComponent.h" +#include "AbilitySystem/AuraAttributeSet.h" #include "Aura/Aura.h" AAuraEnemy::AAuraEnemy() @@ -13,6 +16,11 @@ AAuraEnemy::AAuraEnemy() Weapon->SetRenderCustomDepth(false); Weapon->SetCustomDepthStencilValue(CUSTOM_DEPTH_RED); + + AbilitySystemComponent = CreateDefaultSubobject("AbilitySystemComponent"); + AbilitySystemComponent->SetIsReplicated(true); + + AttributeSet = CreateDefaultSubobject("AttributeSet"); } void AAuraEnemy::HighlightActor() diff --git a/Source/Aura/Private/Player/AuraPlayerState.cpp b/Source/Aura/Private/Player/AuraPlayerState.cpp index 1b1d453..15631cf 100644 --- a/Source/Aura/Private/Player/AuraPlayerState.cpp +++ b/Source/Aura/Private/Player/AuraPlayerState.cpp @@ -3,7 +3,21 @@ #include "Player/AuraPlayerState.h" +#include "AbilitySystem/AuraAbilitySystemComponent.h" +#include "AbilitySystem/AuraAttributeSet.h" + AAuraPlayerState::AAuraPlayerState() { + AbilitySystemComponent = CreateDefaultSubobject("AbilitySystemComponent"); + AbilitySystemComponent->SetIsReplicated(true); + + AttributeSet = CreateDefaultSubobject("AttributeSet"); + NetUpdateFrequency = 100.f; } + +UAbilitySystemComponent* AAuraPlayerState::GetAbilitySystemComponent() const +{ + return AbilitySystemComponent; +} + diff --git a/Source/Aura/Public/AbilitySystem/AuraAbilitySystemComponent.h b/Source/Aura/Public/AbilitySystem/AuraAbilitySystemComponent.h new file mode 100644 index 0000000..5374f67 --- /dev/null +++ b/Source/Aura/Public/AbilitySystem/AuraAbilitySystemComponent.h @@ -0,0 +1,16 @@ +// Assets provided by DruidMechanics. Copyright Jonathan Rampersad 2024 + +#pragma once + +#include "CoreMinimal.h" +#include "AbilitySystemComponent.h" +#include "AuraAbilitySystemComponent.generated.h" +/** + * + */ +UCLASS() +class AURA_API UAuraAbilitySystemComponent : public UAbilitySystemComponent +{ + GENERATED_BODY() + +}; \ No newline at end of file diff --git a/Source/Aura/Public/AbilitySystem/AuraAttributeSet.h b/Source/Aura/Public/AbilitySystem/AuraAttributeSet.h new file mode 100644 index 0000000..02e1550 --- /dev/null +++ b/Source/Aura/Public/AbilitySystem/AuraAttributeSet.h @@ -0,0 +1,16 @@ +// Assets provided by DruidMechanics. Copyright Jonathan Rampersad 2024 + +#pragma once + +#include "CoreMinimal.h" +#include "AttributeSet.h" +#include "AuraAttributeSet.generated.h" +/** + * + */ +UCLASS() +class AURA_API UAuraAttributeSet : public UAttributeSet +{ + GENERATED_BODY() + +}; \ No newline at end of file diff --git a/Source/Aura/Public/Character/AuraCharacterBase.h b/Source/Aura/Public/Character/AuraCharacterBase.h index 2b04e13..d776ff6 100644 --- a/Source/Aura/Public/Character/AuraCharacterBase.h +++ b/Source/Aura/Public/Character/AuraCharacterBase.h @@ -3,11 +3,15 @@ #pragma once #include "CoreMinimal.h" +#include "AbilitySystemInterface.h" #include "GameFramework/Character.h" #include "AuraCharacterBase.generated.h" +class UAbilitySystemComponent; +class UAttributeSet; + UCLASS(Abstract) -class AURA_API AAuraCharacterBase : public ACharacter +class AURA_API AAuraCharacterBase : public ACharacter, public IAbilitySystemInterface { GENERATED_BODY() @@ -15,6 +19,8 @@ public: // Sets default values for this character's properties AAuraCharacterBase(); + virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override; + UAttributeSet* GetAttributeSet() const { return AttributeSet; } protected: // Called when the game starts or when spawned virtual void BeginPlay() override; @@ -22,4 +28,9 @@ protected: UPROPERTY(EditAnywhere, Category="Combat") TObjectPtr Weapon; + UPROPERTY() + TObjectPtr AbilitySystemComponent; + + UPROPERTY() + TObjectPtr AttributeSet; }; diff --git a/Source/Aura/Public/Player/AuraPlayerState.h b/Source/Aura/Public/Player/AuraPlayerState.h index 24d2c45..e0eef6d 100644 --- a/Source/Aura/Public/Player/AuraPlayerState.h +++ b/Source/Aura/Public/Player/AuraPlayerState.h @@ -3,17 +3,29 @@ #pragma once #include "CoreMinimal.h" +#include "AbilitySystemInterface.h" #include "GameFramework/PlayerState.h" #include "AuraPlayerState.generated.h" +class UAbilitySystemComponent; +class UAttributeSet; + /** * */ UCLASS() -class AURA_API AAuraPlayerState : public APlayerState +class AURA_API AAuraPlayerState : public APlayerState, public IAbilitySystemInterface { GENERATED_BODY() public: AAuraPlayerState(); + virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override; + UAttributeSet* GetAttributeSet() const { return AttributeSet; } +protected: + UPROPERTY() + TObjectPtr AbilitySystemComponent; + + UPROPERTY() + TObjectPtr AttributeSet; };