From bcc233b1e9db90d4b5ddd863f03dc3fedc6d8a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Vilas-B=C3=B4as?= Date: Fri, 11 Nov 2022 23:01:34 -0300 Subject: [PATCH] v0.6.2a (#34) * Update Modular Features plugin + Create new settings class + Start adapting the project to MF Extra Features next changes * Modular Features update: Add comments and adjust some shared functions to avoid repetitions * Adjustments to enable multiple bindings mode * Fix typo * Fix typo + Adjust settings + update submodules + Add redirects * Reset weak ptr * Update submodules * Add empty FilterPlugin.ini * Update submodules * Update version * Update MF-EA submodule * Update MF-EA settings * Optimize includes + Update submodules * Set internal log as Verbose by default * Adjusting log: Set default verbosity as Log --- Config/DefaultEngine.ini | 3 ++ Config/DefaultGame.ini | 14 +++++++- .../Swinging/Source/Private/PEHookAbility.cpp | 11 +++--- .../Source/Private/PEHookAbility_Task.cpp | 6 ++-- .../Source/Public/PEHookAbility_Task.h | 4 +-- .../Source/Private/PETelekinesisAbility.cpp | 3 +- .../Source/Private/PEThrowableActor.cpp | 1 + .../Source/Public/PEThrowableActor.h | 2 +- .../Source/Private/PECrouchAbility.cpp | 4 +-- .../Source/Private/PEDoubleJumpAbility.cpp | 6 ++-- .../Source/Private/PEInteractAbility.cpp | 1 - .../Source/Private/PESprintAbility.cpp | 1 - .../Source/Public/PEInteractAbility.h | 2 +- .../Example_Pistol/BP_WeaponPackage.uasset | Bin 25317 -> 24352 bytes .../Weapons/Content/Data/DA_Pistol.uasset | Bin 4247 -> 4247 bytes Plugins/UEEOSSDKHandler | 2 +- Plugins/UEElementusInventory | 2 +- Plugins/UEFSR | 2 +- Plugins/UEModularFeatures_ExtraActions | 2 +- ProjectElementus.uproject | 5 +-- .../Private/Actors/Character/PECharacter.cpp | 1 - .../Actors/Character/PEPlayerController.cpp | 32 ++++++++---------- .../Actors/Character/PEPlayerState.cpp | 2 -- .../Private/Actors/Interfaces/PEEquipment.cpp | 3 +- .../Actors/World/PEConsumableActor.cpp | 3 +- .../Private/Actors/World/PEExplosiveActor.cpp | 3 +- .../Actors/World/PEInventoryPackage.cpp | 4 --- .../Actors/World/PEProjectileActor.cpp | 1 + .../Components/PEInventoryComponent.cpp | 11 +++--- .../GAS/Attributes/PEAttributeBase.cpp | 4 +-- .../GAS/Attributes/PECustomStatusAS.cpp | 1 - .../Private/GAS/Attributes/PELevelingAS.cpp | 1 + .../GAS/System/PEAbilitySystemComponent.cpp | 10 +++--- .../Private/GAS/System/PEEffectData.cpp | 5 +++ .../Private/GAS/System/PEGameplayAbility.cpp | 4 ++- .../Private/GAS/Tasks/PEMoveCamera_Task.cpp | 2 +- .../GAS/Tasks/PESpawnProjectile_Task.cpp | 1 + .../Management/Functions/PEPlayerLibrary.cpp | 2 +- .../Private/Management/PECustomSettings.cpp | 26 +++++++------- .../Private/Management/PEDevSettings.cpp | 9 +++++ .../Private/Management/PEGameInstance.cpp | 3 +- .../Public/Actors/Character/PECharacter.h | 1 - .../Actors/Character/PEPlayerController.h | 2 +- .../Public/Actors/Interfaces/PEEquipment.h | 4 +-- .../Public/Actors/World/PEConsumableActor.h | 6 ++-- .../Public/Actors/World/PEExplosiveActor.h | 3 +- .../Public/Actors/World/PEInventoryPackage.h | 2 +- .../Public/Actors/World/PEProjectileActor.h | 2 +- .../Public/Components/PEInventoryComponent.h | 2 +- .../Public/GAS/Attributes/PEAttributeBase.h | 6 +--- .../Public/GAS/System/PEAbilityData.h | 19 ----------- .../Public/GAS/System/PEAbilityFunctions.h | 2 +- .../GAS/System/PEAbilitySystemComponent.h | 11 +++--- .../Public/GAS/System/PEEffectData.h | 28 +++++++++++++++ .../Public/GAS/System/PEGameplayAbility.h | 6 ++-- .../Public/GAS/System/PETrace.h | 8 ++--- .../Public/GAS/Tasks/PEMoveCamera_Task.h | 8 +++-- .../Public/GAS/Tasks/PESpawnProjectile_Task.h | 2 +- .../Public/Management/Data/PEConsumableData.h | 4 +-- .../Public/Management/Data/PEEnemyData.h | 1 - .../Public/Management/Data/PEGlobalTags.h | 2 -- .../Management/Functions/PEEOSLibrary.h | 2 +- .../Management/Functions/PEPlayerLibrary.h | 5 +-- .../Public/Management/PEDevSettings.h | 21 ++++++++++++ .../Public/Management/PEGameInstance.h | 3 +- 65 files changed, 199 insertions(+), 150 deletions(-) create mode 100644 Source/ProjectElementus/Private/GAS/System/PEEffectData.cpp create mode 100644 Source/ProjectElementus/Private/Management/PEDevSettings.cpp create mode 100644 Source/ProjectElementus/Public/GAS/System/PEEffectData.h create mode 100644 Source/ProjectElementus/Public/Management/PEDevSettings.h diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 93b67b3a..7d218857 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -226,6 +226,9 @@ AssetManagerClassName=/Script/ProjectElementus.PEAssetManager +FunctionRedirects=(OldName="PECharacter.EquipItem", NewName="PEInventoryComponent.EquipItem") +FunctionRedirects=(OldName="PECharacter.UnnequipItem", NewName="PEInventoryComponent.UnnequipItem") ++FunctionRedirects=(OldName="PEInventoryComponent.UnnequipItem", NewName="PEInventoryComponent.UnequipItem") + ++StructRedirects=(OldName="/Script/ProjectElementus.TargetActorSpawnParams", NewName="/Script/ProjectElementus.PETargetActorSpawnParams") [/Script/WorldPartitionEditor.WorldPartitionEditorSettings] bEnableWorldPartition=True diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini index 552b78f9..c7e36fc6 100644 --- a/Config/DefaultGame.ini +++ b/Config/DefaultGame.ini @@ -7,7 +7,7 @@ ProjectDebugTitleInfo=NSLOCTEXT("[/Script/EngineSettings]", "BE87C6DA4FF84CEDD63 ProjectDisplayedTitle=NSLOCTEXT("[/Script/EngineSettings]", "63DFDD624C6C2FDA67C19598742EFFE9", "Project Elementus:") SupportContact=contatolukevboas@gmail.com CopyrightNotice= -ProjectVersion=0.6.1a +ProjectVersion=0.6.2a CompanyName=Lucas Vilas-Boas CompanyDistinguishedName=Lucoiso Description=Project Elementus is a third person template that can be used to start projects that will use some new features that came with Unreal Engine 5 as well as powerful existing features like the Gameplay Ability System and others. @@ -123,3 +123,15 @@ MetaDataTagsForAssetRegistry=() [/Script/GameFeatures.GameFeaturesSubsystemSettings] GameFeaturesManagerClassName=/Script/GameFeatures.DefaultGameFeaturesProjectPolicies +[/Script/ModularFeatures_ExtraActions.MFEA_Settings] +bEnableAbilityAutoBinding=False +InputIDEnumeration=/Game/Main/Data/GAS/EN_AbilityInputID.EN_AbilityInputID +AbilityBindingMode=InputID + +[Staging] ++AllowedConfigFiles=ProjectElementus/Config/Tags/CharacterEquipmentSlots.ini ++AllowedConfigFiles=ProjectElementus/Config/Tags/GameplayAbilities.ini ++AllowedConfigFiles=ProjectElementus/Config/Tags/GameplayCues.ini ++AllowedConfigFiles=ProjectElementus/Config/Tags/GameplayData.ini ++AllowedConfigFiles=ProjectElementus/Config/Tags/GameplayEffects.ini ++AllowedConfigFiles=ProjectElementus/Config/Tags/GameplayStates.ini \ No newline at end of file diff --git a/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Private/PEHookAbility.cpp b/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Private/PEHookAbility.cpp index 309293e0..4d91a899 100644 --- a/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Private/PEHookAbility.cpp +++ b/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Private/PEHookAbility.cpp @@ -4,8 +4,9 @@ #include "PEHookAbility.h" #include "PEHookAbility_Task.h" -#include "Actors/Character/PECharacter.h" +#include "GameFramework/Character.h" #include "GAS/Targeting/PELineTargeting.h" +#include "GAS/System/PETrace.h" #include "GeometryCollection/GeometryCollectionComponent.h" #include "Management/Data/PEGlobalTags.h" @@ -45,7 +46,7 @@ void UPEHookAbility::InputReleased(const FGameplayAbilitySpecHandle Handle, cons void UPEHookAbility::WaitGameplayEvent_Callback_Implementation(FGameplayEventData Payload) { // Will start a targeting task when the animation notify is triggered (will try to start the hook) - FTargetActorSpawnParams TargetingParams; + FPETargetActorSpawnParams TargetingParams; TargetingParams.StartLocation = MakeTargetLocationInfoFromOwnerSkeletalMeshComponent("hand_l"); ActivateWaitTargetDataTask(EGameplayTargetingConfirmation::Instant, APELineTargeting::StaticClass(), TargetingParams); @@ -84,7 +85,7 @@ void UPEHookAbility::WaitTargetData_Callback_Implementation(const FGameplayAbili ActivateGameplayCues(FGameplayTag::RequestGameplayTag("GameplayCue.Swinging"), Params); // If the target is a character, will finish this ability after AbilityActiveTime seconds - if (TargetHit->GetActor()->GetClass()->IsChildOf() && TargetHit->GetActor() != GetAvatarActorFromActorInfo() || TargetHit->GetComponent()->GetClass()->IsChildOf()) + if (TargetHit->GetActor()->GetClass()->IsChildOf() && TargetHit->GetActor() != GetAvatarActorFromActorInfo() || TargetHit->GetComponent()->GetClass()->IsChildOf()) { FTimerDelegate TimerDelegate; TimerDelegate.BindLambda([=]() -> void @@ -107,7 +108,7 @@ void UPEHookAbility::WaitConfirmInput_Callback_Implementation() // If the confirm input is pressed, will add a impulse to ability owner // and to the target/grabbed actor, if simulates physics - if (APECharacter* const Player = Cast(GetAvatarActorFromActorInfo())) + if (ACharacter* const Player = Cast(GetAvatarActorFromActorInfo())) { PlayAbilitySoundAttached(Player->GetMesh()); @@ -119,7 +120,7 @@ void UPEHookAbility::WaitConfirmInput_Callback_Implementation() { TaskHandle->GetHitResult().GetComponent()->AddImpulse(-1.f * ImpulseVector); } - else if (APECharacter* const TargetPlayer = Cast(TaskHandle->GetHitResult().GetActor())) + else if (ACharacter* const TargetPlayer = Cast(TaskHandle->GetHitResult().GetActor())) { TargetPlayer->LaunchCharacter(-1.f * ImpulseVector, false, true); } diff --git a/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Private/PEHookAbility_Task.cpp b/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Private/PEHookAbility_Task.cpp index a9942d4e..4d71b0c5 100644 --- a/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Private/PEHookAbility_Task.cpp +++ b/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Private/PEHookAbility_Task.cpp @@ -3,7 +3,7 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "PEHookAbility_Task.h" -#include "Actors/Character/PECharacter.h" +#include "GameFramework/Character.h" #include "GameFramework/CharacterMovementComponent.h" #include "GeometryCollection/GeometryCollectionComponent.h" @@ -29,13 +29,13 @@ void UPEHookAbility_Task::Activate() check(Ability); - HookOwner = Cast(GetAvatarActor()); + HookOwner = Cast(GetAvatarActor()); if (ensureAlwaysMsgf(HookOwner.IsValid(), TEXT("%s - Task %s failed to activate because have a invalid owner"), *FString(__func__), *GetName())) { CurrentHookLocation = HitDataHandle.Location; - HitTarget = Cast(HitDataHandle.GetActor()); + HitTarget = Cast(HitDataHandle.GetActor()); if (!HitTarget.IsValid()) { HitTarget.Reset(); diff --git a/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Public/PEHookAbility_Task.h b/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Public/PEHookAbility_Task.h index e8d9aab1..0a46de77 100644 --- a/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Public/PEHookAbility_Task.h +++ b/Plugins/GameFeatures/CustomAbilities/Swinging/Source/Public/PEHookAbility_Task.h @@ -36,8 +36,8 @@ class UPEHookAbility_Task final : public UAbilityTask virtual void OnDestroy(bool AbilityIsEnding) override; private: - TWeakObjectPtr HookOwner; - TWeakObjectPtr HitTarget; + TWeakObjectPtr HookOwner; + TWeakObjectPtr HitTarget; float Intensity; float MaxIntensity; diff --git a/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Private/PETelekinesisAbility.cpp b/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Private/PETelekinesisAbility.cpp index c77352c7..b3a23147 100644 --- a/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Private/PETelekinesisAbility.cpp +++ b/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Private/PETelekinesisAbility.cpp @@ -6,6 +6,7 @@ #include "PETelekinesisAbility_Task.h" #include "PEThrowableActor.h" #include "GAS/Targeting/PELineTargeting.h" +#include "GAS/System/PETrace.h" #include "Management/Data/PEGlobalTags.h" UPETelekinesisAbility::UPETelekinesisAbility(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer), ThrowIntensity(2750.f) @@ -23,7 +24,7 @@ void UPETelekinesisAbility::ActivateAbility(const FGameplayAbilitySpecHandle Han Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData); // Targeting: Params - FTargetActorSpawnParams TargetingParams; + FPETargetActorSpawnParams TargetingParams; TargetingParams.TargetFilter.RequiredActorClass = APEThrowableActor::StaticClass(); TargetingParams.StartLocation = MakeTargetLocationInfoFromOwnerSkeletalMeshComponent("head"); diff --git a/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Private/PEThrowableActor.cpp b/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Private/PEThrowableActor.cpp index 68bf858a..19db3ae9 100644 --- a/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Private/PEThrowableActor.cpp +++ b/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Private/PEThrowableActor.cpp @@ -4,6 +4,7 @@ #include "PEThrowableActor.h" #include "Components/StaticMeshComponent.h" +#include "GAS/System/PEAbilityData.h" #include "Actors/Character/PECharacter.h" #include "GAS/System/PEAbilitySystemComponent.h" diff --git a/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Public/PEThrowableActor.h b/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Public/PEThrowableActor.h index 2684df5f..75d48868 100644 --- a/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Public/PEThrowableActor.h +++ b/Plugins/GameFeatures/CustomAbilities/Telekinesis/Source/Public/PEThrowableActor.h @@ -5,8 +5,8 @@ #pragma once #include "CoreMinimal.h" +#include "GAS/System/PEEffectData.h" #include "Engine/StaticMeshActor.h" -#include "GAS/System/PEAbilityData.h" #include "PEThrowableActor.generated.h" class UGameplayEffect; diff --git a/Plugins/GameFeatures/DefaultAbilities/Source/Private/PECrouchAbility.cpp b/Plugins/GameFeatures/DefaultAbilities/Source/Private/PECrouchAbility.cpp index 522b8819..00b2bf1c 100644 --- a/Plugins/GameFeatures/DefaultAbilities/Source/Private/PECrouchAbility.cpp +++ b/Plugins/GameFeatures/DefaultAbilities/Source/Private/PECrouchAbility.cpp @@ -3,7 +3,7 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "PECrouchAbility.h" -#include "Actors/Character/PECharacter.h" +#include "GameFramework/Character.h" UPECrouchAbility::UPECrouchAbility(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { @@ -16,7 +16,7 @@ void UPECrouchAbility::ActivateAbility(const FGameplayAbilitySpecHandle Handle, { Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData); - APECharacter* const Player = Cast(ActorInfo->AvatarActor.Get()); + ACharacter* const Player = Cast(ActorInfo->AvatarActor.Get()); // Only characters can activate this ability if (!IsValid(Player)) diff --git a/Plugins/GameFeatures/DefaultAbilities/Source/Private/PEDoubleJumpAbility.cpp b/Plugins/GameFeatures/DefaultAbilities/Source/Private/PEDoubleJumpAbility.cpp index 7657b685..0f9b018c 100644 --- a/Plugins/GameFeatures/DefaultAbilities/Source/Private/PEDoubleJumpAbility.cpp +++ b/Plugins/GameFeatures/DefaultAbilities/Source/Private/PEDoubleJumpAbility.cpp @@ -3,7 +3,7 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "PEDoubleJumpAbility.h" -#include "Actors/Character/PECharacter.h" +#include "GameFramework/Character.h" #include "GameFramework/CharacterMovementComponent.h" #include "Management/Data/PEGlobalTags.h" @@ -21,7 +21,7 @@ void UPEDoubleJumpAbility::ActivateAbility(const FGameplayAbilitySpecHandle Hand { Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData); - APECharacter* const Player = Cast(ActorInfo->AvatarActor.Get()); + ACharacter* const Player = Cast(ActorInfo->AvatarActor.Get()); // Only characters can activate this ability if (!IsValid(Player)) @@ -55,7 +55,7 @@ void UPEDoubleJumpAbility::InputReleased(const FGameplayAbilitySpecHandle Handle Super::InputReleased(Handle, ActorInfo, ActivationInfo); // Send the StopJumping event to the player if valid - if (APECharacter* const Player = Cast(ActorInfo->AvatarActor.Get())) + if (ACharacter* const Player = Cast(ActorInfo->AvatarActor.Get())) { Player->StopJumping(); } diff --git a/Plugins/GameFeatures/DefaultAbilities/Source/Private/PEInteractAbility.cpp b/Plugins/GameFeatures/DefaultAbilities/Source/Private/PEInteractAbility.cpp index 3ae755d6..dc18e42c 100644 --- a/Plugins/GameFeatures/DefaultAbilities/Source/Private/PEInteractAbility.cpp +++ b/Plugins/GameFeatures/DefaultAbilities/Source/Private/PEInteractAbility.cpp @@ -5,7 +5,6 @@ #include "PEInteractAbility.h" #include "Actors/Character/PECharacter.h" #include "Actors/Interfaces/PEInteractable.h" -#include "GAS/System/PEAbilitySystemComponent.h" #include "Tasks/PEInteractAbility_Task.h" UPEInteractAbility::UPEInteractAbility(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) diff --git a/Plugins/GameFeatures/DefaultAbilities/Source/Private/PESprintAbility.cpp b/Plugins/GameFeatures/DefaultAbilities/Source/Private/PESprintAbility.cpp index 042848cd..e96766d6 100644 --- a/Plugins/GameFeatures/DefaultAbilities/Source/Private/PESprintAbility.cpp +++ b/Plugins/GameFeatures/DefaultAbilities/Source/Private/PESprintAbility.cpp @@ -3,7 +3,6 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "PESprintAbility.h" - #include "Management/Data/PEGlobalTags.h" UPESprintAbility::UPESprintAbility(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) diff --git a/Plugins/GameFeatures/DefaultAbilities/Source/Public/PEInteractAbility.h b/Plugins/GameFeatures/DefaultAbilities/Source/Public/PEInteractAbility.h index 88a69934..4d25e1e6 100644 --- a/Plugins/GameFeatures/DefaultAbilities/Source/Public/PEInteractAbility.h +++ b/Plugins/GameFeatures/DefaultAbilities/Source/Public/PEInteractAbility.h @@ -6,9 +6,9 @@ #include "CoreMinimal.h" #include "GAS/System/PEGameplayAbility.h" -#include "Tasks/PEInteractAbility_Task.h" #include "PEInteractAbility.generated.h" +class UPEInteractAbility_Task; /** * */ diff --git a/Plugins/GameFeatures/Weapons/Content/Blueprints/Example_Pistol/BP_WeaponPackage.uasset b/Plugins/GameFeatures/Weapons/Content/Blueprints/Example_Pistol/BP_WeaponPackage.uasset index 4df8a2d47f27902debb3b1d69c59f1bdf901e1be..8d57da4f5fad3fe54a9ef082051f1ec69b48984e 100644 GIT binary patch delta 6904 zcmai(3p`ZY+sF6J#FP_rPK_=@rjuMoS2ZYNM$Wj524hG`6sL|Mxr9Vx^QzPo6N73b z(=bH2bc~av6qQs?ZqboTsN8S48_c^lo%8v>|Nr}bUZ0IMYu2o_pS7R$JiqTVUtXYu zPf+>mQD}8Lz6aWn?}9ptf3gdL+T0HxyeZshllpvl@#)-99KQy2V#E5~5Y+Dq{f{3R z_))imAf$WPwZIKs^dmAC!$pm6u#$@2%Hp@LRO4S;Nmc?MhWOt<+soqr?4rq+t=xs? zI4m^X@Vn3`$AxAoXy!Wdr}3`n4NeO^u<|bS?+3u7n*27<%y(YsrL5Y8ZgS?IS>=lE zUF?y8o{7b#+v;8D=0l6~f##gcLX)^=7dqrH|KJ)|bk<@1!!LxM9z zQpxPJW}HlbnzTg`%HiWC*GofFsd9Mx>K!`TqDVR8@a_y&;~*Du2CrgHmY&zY*}|4A zC9!fe_(_|z;E1J_eN;tJsw9*t3AICOnb~BdCVa9#X(EAU%zGHk9JWPOLxc*=YH@(> z<;iS18(JPKN#^COC(?HMkEb_tJW<+N`aC+gpxAV`N9Hv>jEzx|RGjEW(M&BeRZin@ zM%~lq9cRQ%#-zw~yAA99;L-Q$U*W<_w&1HO8e%FMB2?P~>qw>>KYb&8v=Bo(xZyQD zU?S>r5my_^%xn4E3b9b$z?ptZ$y0$tTJEEx#12lSmwJnOotVpV#-v&9Ck8^=kF)+X zjI^rU@>2AdHQv3D(!TD!4C+=6lR*(f^UCgxWrkl`WzZ(ZjbOOb#Pg@|v6d_I%3IS{ z^`GV4KUe;R{MO0l?6M9tZU#GV&XYmh3>j30?I6xzWzc6&88nrh>SH^7t<}UTc=tUf zw+C*=jNs-lGUyu_o^>P+M@~i0pQS9kP-{vZ-Bz+&<3rbo`KELkbZ+%?;%K`Jic6D0 z9a)riSZ)M6I|VP!YFtS9>J}1Ueg9AQ>*Zhd>cFbYI&jm&#K{@Tyw3Hr*p3ypGms1_ zt&u?^4q;yK+b6@HuX)^fu_i~FD)0SATr{7N7`f~DFP5;z#(6!b`Jbvh<|Ca-r<7z+ zJHs*RuW0rDY1Og3eLUDPB<(;a?H8)D zqd7XV8s+NUZWiMZmNlRF5#ze*NLyjyjM}YLx`9I;N4$5;*vGir(ktW>2&1{uls$3% zC*Ttlv61xX+$I(BL(#WERnQf4^s(HwiSp3>`n@i-U$6O1`0JbJ!jG)yayfDyC)3EM ztcxDsWZb?hRbbu?+YfK;wR?GuER8O>B++Ablgb^Ij44MK)yLh;PrJo=(cj^F`Pr3E zEJk}jg`SRkrCsHm>>2CeY`|-}elnf%!f}*le_}VY>j_0&8mzBy`&NtfkGnk{Ua-xB zaAgl|A3w{@tZ4g2h?;-gD1-KTeYuvyQCmHwyQis5MKP^4CaM)qp#`p0eA!CV938On zE%q`zvUL>MG%FfRIIHfQf9u?e(i&Hw`m35r0uBk zM<>Phto>UK{`C94C=AgKzMb1qviVu~L+xA$zC_d8lOubMRqDN5FO9?jH`or}=Ky(fh?jv)9=}`i9(-BSYpRLx*l~+XCwYX9w5d zlW~RHRcJ;>C(@2i2+cf2T!_>+N!xL&G&o`%Ov5XfZR?IEynj$HgVYa?pP7&Kzx$C0 zcYBw<(=2hRn7Uj&z8%Jl<5`gz7;C|(&HZ|jfJ9rr&YDrRl?_QGH`2%vLE0I$Tt@Wc;cguw&}H7f&YIZ z&Y&Asj?H@a+<_HLE`G~Cd*T?Ld1x*7yMt$-nKV39m025;S({2jua(TOBB3MW;tYdU zGBj7-5L4ce23*|Cvdb}IVhLizwDe_()GE%S{^#SBD)%e0))4=EjM*a?DNr8DGplqhSNuryIXEKk#qNMNE;3eOmi?fe*I;Oy$HhG?AUp{$WD?f(Vj!%G>ri+Z$o?o=( ztTS~)pE5Fzn+tU7 za=n0~k3QOY`64fk*X4SyG>{{AW_Rp}vFhrwiYU4w+5T%uK~abp|C(uuRdDtJUbgsf zdPyWUBoaptDV%f2pBn)lW-&$6*ml(Fm*5>MxO93A>N7mkID2782K9B=&Mkef(KqGT z;yrKXB!k9BwC2xw#gET!>SfPrk93Xb)-!1bHyE_&t+PZN>#4Sgy9CdqLHKd0xr^dK7P(JVE$RM{BaJP9uTV|&l%eLKu zN4a!GloWq2&S{9%b9pjr>^XAxumz3cIhN)*CX@$Rx<(SpvReNsP>8Lq598&i@N%Ht z#f`$Jr+kT0QOWd~&y8W8&vM+$G2c3)T#p}-TDbA$xgLp&2#RaKXbU{#)kskO09TC=m!^- z)KZr3+b=nXEm~qbV{~T_*?_zLY1Fl*Ynhe3k6J>qg?KvwoFhvrMm@*Ce_UwRodL!y zs0*N16g*%~r|rT)0x1PDHgxC-B6}=Thl~}eDI_-e))$iA{WE&r66x=P{3jbqOy8WG zX>iml-fwf>poF0udil6-MMoBOx&zy-^EO=PBJY+e(d&!ny<19`yFKqau4WbRo+q6& z@p&_Tm)W;}hmvMRLy?}eELBkXWvsPIu=&?wIIY^_$shc|Kch#ol78_m?u7}XSDy!N zbhzZN!>L@uQFQ+{Si8l;$sts`E0aQZP3(&6eGoU6!fUwqqGMC{yB#N$`EPo+2*?MD zeNR0?oTTXDtW#iS7wxE1&g{|qk@0QnAGl>9gi6ntRhsbL6pWdCQWzuXFFUe(MdD$pYU2IX zlSg#lQO@fp7T0;d-*sMWBWVf<%J>-^4@jL;w=eTS3;8t!P6u?jqA8}LDSn}mpx7+% zF%BPqR4g8=U>|S6L(K!9?0rq(dLX8t;L!o9Q4tx;Bb00UJCnbxiL)w_+AmB82AGcy zFhmi={4n68f*_5bFG<2`it^A&*V{s>(L*Nnz9#ieq=;dI08cQ3&4r}MWfG9Fd^e;Z z;xzePp$e~10}p*V?Z*!0g?i1k+Y06T)y7~SwXt4pv>_=t)k~k~1<}DtW_;jenLd3c z#4;JJ#@*mTspM$vifQIDqMIUCBpTL8r1p^y_~5|v{U+0!!TW~>1;>nxF34%t4N#ZS zww4cA=g)AVAbfJgW6ky3Y{ z20z(hJjEY4cfbX?m5|1&^}mJLFQj1BXnS}=t3wqGEN&{IS?|Gt-1n3czETEeWnVteGK>De4aB=X^)1|wC*$o$@88@i7W@FE0V|Ica`kxt+ZN=K~ z`sHepUJp(uRq5{m7~b0e5}3dN*d!0uO8c^#-0K}El>2AEr6os#(wjKi$PWFJ7$FNJ zh1j}1+6TnCP!2IDrXfDDxYiCuPhkVzfJ_jf=v&NAm_Tkw4s7HKCIzHc7T8G+*izvV z=&whfXUP$W~_fz&4gaS|oC@uhyP&k@zy9o>LHe_XG)uvG8 z^om(oIkf;;@OJ3D*37!qL#%EH%#1cfB2MUB(=p^6YyrzJ2RNj$DJWftPBg5w&vb@3 zpmQmLAp?_)9T5s({6+*}YKms6F+D)hf`GgWGPiYxj^XFhYGcxBBYp}c1d&rRxeOQ( z3=z0Gz#^U5W;IWggf+29L|${foSzY5YC(n|#FPdCp*s_akKjVB1Glqvk(g>D*8TlH zwFOq7hp1ezC4({0Yll7?Ku);VJG4>tECZr5xS&(uw2PPUqiRzmb{JSYb6{aU==Hyw zsd!S-bSh|8yNSKrXSZR^gQmQu?xvWxd%eScKyWGW{B>lIKWCD%R=9`4sEl!5&UnY6yNW@eVVaTxi%Hk_ZhB$qramPT&9>OgWi3AnKc1q z-3?CXL_q&3iF@(3Dbo^D8Dv77CIF)0O_>(Tpy^>5^y*)T1`IvYam9%ygO-|?{>#|C zdjB~V&`-(>-RQU8Vh~8r5#3}^DsDE02!blZM82_-(*1p*1zc16^Kh&$e*eI`sPQ)k z$}2PJPj9+!*hqgu<3UYE;R_Ab4XEIz0X;;{Q7m4_^P zA?gwKF^Iv2T!<0X$~Ur+GeiO?szho(2m+`!=1}>_GyS`3A6}u~ePuRjwQh$I&uh$b z{NaWej~Mg@C_5Wcz*6PTygcWhWijY~*iWz1BeC}^&lXm=runkFF=I?j7<-aUtZ@y4-H(%Y=z*;%xjq${e?B{h1r=3Kd zUB0UNL3f(vnukg5*v$duTEkGdaurYyjTW80(?6KWAQ$ZXx%X9ht$7(`u)J2{p{Xl} zqY!3Fu{x}2=Kmnhszl041~C)8`piTc>_3r?99Mown%|^Q?w^PsO9KHpxO~98e1J+I zXw9B;H@Q$;;}RR&VKh}g?h!f78_xZs`D z&f1FhbF3KO#H9YfGM%hwxDC>LXCG@zME(3vRsza7dncXsBse3Xj^T`n8cE2~{5?B! zi>l5&-RjS&pJ}JwG!Eya;z=g!iz$O}H~Rj_1HK#U!u~YkFCpV8Un{;RxxQ1|k+^z5bXf1=AFyp!K zyFG$$BX?UZ(xRpgjL;Rg6Z~>9`F>)24V|>yPn?byrDKmLC0h%q2ncGY>w0;bOwH7z zGoyxhIs5*=*nzxD&K%_WoZ5gP*I6^Nsb?lH0WCral7UDIRm*u$=zonE%tjBE0$_sf z{nj(p`2MI2I!~lcs~Nk+z%w!F;`E%iFBUUjX7zd`n1d9fVk=U)Hjs2~~`LFy(IzP_Zu7H0?~ z*wm>T5slw(JK(h6?z=PnRVIZY{m_QJH$%6*rkEb=nT+8$$|0~c;$>7-y1j{mB*1uX zePqOs0qoN_XCyW2{*ywNAYv5{Kq+;>97Jm+!7DFdTOVoc!3lG>C{^2vgDnFt&v(x| zc6IKr2*(|#lT0%d{Pem~%3o+_9KWe(S)ssW0OaFrWlIXxRl&Omd^k+B^{u+gz4dX< zea;JL^k`uQi|6GNaC<2mxR;_crb-VS4Obb|2&y#IF%GU7IlXP)R)JWZ3j>I{O}LZd z-P<#}bVO@JcZ^B%v}^#G))w)rrN~Vpzd(Yp696(n5?}*}sN!H<)#s^$ye}>h71tjX z|9ZUm&8g&&cT)9fC;6Sfo<3^GM+lF=bUo9$hu}wk$~MhHbtJG%0bW#KZ18XE3M{c0 zI!OrEa^qr^jUUXs$nLmz2)?JhuJ zpu5XscZ)M;&u^pj6@c=bd6ofvCL2cYv6|fn0NnXU9gsM6!-q4g5k0gd@b7$zq;C}q zF*#ldO9vVId-V`jE^c)6JoVeMaZ{JyXUjE<8OG%YOfO(RW1?I_3J22)mX05*WAKTm{8M(>RVDd*&NAqpvNQ58M|s7ETJD5Re1 z+ADc28#&AHmuizDGw9b=R!sf|Uk%sO>AiNJH~#U7C>zMxXq#<;&RKc|+-I3y;Q zvBC(O9U8h0sonP0YEHp*vhLM9Xo<7!blH#UMTv>qS~S9=mHE%MUa9ebi4Lcst_)ml zQc+-Wib?;U6xI5X-p2d4w6uCR8T{8ZbLSTo*+%QVstte@iJxVt#ogW8COqy5-f9E6NVP#{0?n&oo{l1RS{^a6gcZ-9HnmkapL* zk#PG1H5LjnZRE_~--)u_x5VPT+yw@|XO| z1WEfJI)WGR2tbjz|jzW`wk7V6P`5NDI|fDRcD zy%=2xr}+T}13Ywj^1Mle3IMJAu(~_KrQP3w1cg-14318Sv7Z0NMn-^ZU{Ga)G<1T} z*uWfLO&}x<{3aJtA#(itL0a)KsfQBm`%UUWet~942E0&4XKTbdr08=R7pnUx4tx!8 z4HW6v6GE&O-PvKpy%&z)~H}XOG=R;tl3+f4X6pWv+!nxX$_|5AVE%WQg+QqgrLpz@ zW<)^?slK5H>@-M@$br`d-`McO_8ga|k|1cMT|w6#?mA321}X@2wnFo_xhfYtbO}He K{Nj3h$$tZb`woBr delta 7892 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 E0fiqDjQ{`u diff --git a/Plugins/GameFeatures/Weapons/Content/Data/DA_Pistol.uasset b/Plugins/GameFeatures/Weapons/Content/Data/DA_Pistol.uasset index 2bef0eabc6fc6efc922ad770c27097c7fb857498..2fa95fd703c97d3aed5937ecd496fd3023016fa7 100644 GIT binary patch delta 27 jcmbQPI9+kVR)I InputIDEnum_ObjRef(TEXT("/Game/Main/Data/GAS/EN_AbilityInputID")); - if (InputIDEnum_ObjRef.Succeeded()) + if (const UMFEA_Settings* MF_Settings = GetDefault(); + !MF_Settings->InputIDEnumeration.IsNull()) { - InputEnumHandle = InputIDEnum_ObjRef.Object; + InputEnumHandle = MF_Settings->InputIDEnumeration.LoadSynchronous(); } static ConstructorHelpers::FClassFinder InventoryWidget_ClassRef(TEXT("/Game/Main/Blueprints/Widgets/Inventory/WB_Inventory_Example")); @@ -83,7 +81,7 @@ void APEPlayerController::RespawnAndPossess_Implementation() { if (const APEPlayerState* const State = GetPlayerState()) { - if (UPEAbilitySystemComponent* AbilitySystemComp_Ref = CastChecked(State->GetAbilitySystemComponent())) + if (UAbilitySystemComponent* const AbilitySystemComp_Ref = State->GetAbilitySystemComponent()) { AbilitySystemComp_Ref->RemoveActiveEffectsWithTags(FGameplayTagContainer(FGameplayTag::RequestGameplayTag(GlobalTag_DeadState))); } @@ -166,7 +164,7 @@ void APEPlayerController::ProcessTrade_Internal(const TArray #pragma region IAbilityInputBinding // Double "_Implementation" because this function is a RPC call version of a virtual function from IAbilityBinding interface -void APEPlayerController::SetupAbilityInputBinding_Implementation_Implementation(UInputAction* Action, const int32 InputID) +void APEPlayerController::SetupAbilityBindingByInput_Implementation_Implementation(UInputAction* Action, const int32 InputID) { if (!IsValid(Action)) { @@ -225,23 +223,23 @@ void APEPlayerController::OnAbilityInputPressed(UInputAction* SourceAction) CONTROLLER_BASE_VLOG(this, Display, TEXT("%s called with Action %s and Input ID Value %u"), *FString(__func__), *SourceAction->GetName(), InputID); // Check if controller owner is valid and owns a ability system component - if (const APECharacter* const ControllerOwner = GetPawn(); - ensureAlwaysMsgf(IsValid(ControllerOwner->GetAbilitySystemComponent()), TEXT("%s owner have a invalid AbilitySystemComponent"), *GetName())) + if (UAbilitySystemComponent* const TargetABSC = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(GetPawn()); + ensureAlwaysMsgf(IsValid(TargetABSC), TEXT("%s owner have a invalid AbilitySystemComponent"), *GetName())) { // Send the input pressed event to the ability system component with the found input ID - ControllerOwner->GetAbilitySystemComponent()->AbilityLocalInputPressed(InputID); + TargetABSC->AbilityLocalInputPressed(InputID); // Verify if the found input ID is equal to Confirm or Cancel input from the specified Enumeration class if (ensureAlwaysMsgf(InputEnumHandle.IsValid(), TEXT("%s have a invalid InputEnumHandle"), *GetName())) { if (InputID == InputEnumHandle->GetValueByName("Confirm", EGetByNameFlags::CheckAuthoredName)) { - ControllerOwner->GetAbilitySystemComponent()->LocalInputConfirm(); + TargetABSC->LocalInputConfirm(); } else if (InputID == InputEnumHandle->GetValueByName("Cancel", EGetByNameFlags::CheckAuthoredName)) { - ControllerOwner->GetAbilitySystemComponent()->LocalInputCancel(); + TargetABSC->LocalInputCancel(); } } } @@ -266,11 +264,11 @@ void APEPlayerController::OnAbilityInputReleased(UInputAction* SourceAction) CONTROLLER_BASE_VLOG(this, Display, TEXT("%s called with Action %s and Input ID Value %u"), *FString(__func__), *SourceAction->GetName(), InputID); // Check if controller owner is valid and owns a ability system component - if (const APECharacter* const ControllerOwner = GetPawn(); - ensureAlwaysMsgf(IsValid(ControllerOwner->GetAbilitySystemComponent()), TEXT("%s owner have a invalid AbilitySystemComponent"), *GetName())) + if (UAbilitySystemComponent* const TargetABSC = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(GetPawn()); + ensureAlwaysMsgf(IsValid(TargetABSC), TEXT("%s owner have a invalid AbilitySystemComponent"), *GetName())) { // Send the input released event to the ability system component with the found input ID - ControllerOwner->GetAbilitySystemComponent()->AbilityLocalInputReleased(InputID); + TargetABSC->AbilityLocalInputReleased(InputID); } } diff --git a/Source/ProjectElementus/Private/Actors/Character/PEPlayerState.cpp b/Source/ProjectElementus/Private/Actors/Character/PEPlayerState.cpp index 1716248e..c3f6613f 100644 --- a/Source/ProjectElementus/Private/Actors/Character/PEPlayerState.cpp +++ b/Source/ProjectElementus/Private/Actors/Character/PEPlayerState.cpp @@ -6,8 +6,6 @@ #include "Actors/Character/PECharacter.h" #include "Actors/Character/PEPlayerController.h" #include "GAS/System/PEAbilitySystemComponent.h" -#include "GameFramework/CharacterMovementComponent.h" -#include "Components/GameFrameworkComponentManager.h" #include "Management/Data/PEGlobalTags.h" DEFINE_LOG_CATEGORY(LogPlayerState); diff --git a/Source/ProjectElementus/Private/Actors/Interfaces/PEEquipment.cpp b/Source/ProjectElementus/Private/Actors/Interfaces/PEEquipment.cpp index 0f215d2b..f21120f3 100644 --- a/Source/ProjectElementus/Private/Actors/Interfaces/PEEquipment.cpp +++ b/Source/ProjectElementus/Private/Actors/Interfaces/PEEquipment.cpp @@ -5,6 +5,5 @@ #include "Actors/Interfaces/PEEquipment.h" UPEEquipment::UPEEquipment(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) -{ - +{ } \ No newline at end of file diff --git a/Source/ProjectElementus/Private/Actors/World/PEConsumableActor.cpp b/Source/ProjectElementus/Private/Actors/World/PEConsumableActor.cpp index 7fd5480d..eda4191c 100644 --- a/Source/ProjectElementus/Private/Actors/World/PEConsumableActor.cpp +++ b/Source/ProjectElementus/Private/Actors/World/PEConsumableActor.cpp @@ -3,8 +3,7 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "Actors/World/PEConsumableActor.h" - -#include "AbilitySystemGlobals.h" +#include "Management/Data/PEConsumableData.h" #include "GAS/System/PEAbilitySystemComponent.h" #include "Components/StaticMeshComponent.h" #include "NiagaraComponent.h" diff --git a/Source/ProjectElementus/Private/Actors/World/PEExplosiveActor.cpp b/Source/ProjectElementus/Private/Actors/World/PEExplosiveActor.cpp index 58509464..d4e81fec 100644 --- a/Source/ProjectElementus/Private/Actors/World/PEExplosiveActor.cpp +++ b/Source/ProjectElementus/Private/Actors/World/PEExplosiveActor.cpp @@ -5,10 +5,9 @@ #include "Actors/World/PEExplosiveActor.h" #include "Actors/Character/PECharacter.h" #include "GAS/System/PEAbilitySystemComponent.h" -#include "Components/PrimitiveComponent.h" +#include "GAS/System/PEAbilityData.h" #include "NiagaraFunctionLibrary.h" #include "NiagaraSystem.h" -#include "NiagaraComponent.h" APEExplosiveActor::APEExplosiveActor(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer), ExplosionRadius(150.f), ExplosionMagnitude(1000.f), bDestroyAfterExplosion(true), bDebug(false) { diff --git a/Source/ProjectElementus/Private/Actors/World/PEInventoryPackage.cpp b/Source/ProjectElementus/Private/Actors/World/PEInventoryPackage.cpp index 0bc26166..dac2e08d 100644 --- a/Source/ProjectElementus/Private/Actors/World/PEInventoryPackage.cpp +++ b/Source/ProjectElementus/Private/Actors/World/PEInventoryPackage.cpp @@ -3,8 +3,6 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "Actors/World/PEInventoryPackage.h" - -#include "ElementusInventoryComponent.h" #include "Actors/Character/PECharacter.h" #include "Blueprint/UserWidget.h" @@ -32,8 +30,6 @@ APEInventoryPackage::APEInventoryPackage(const FObjectInitializer& ObjectInitial { TradeWidgetClass = TradeWidget_ClassRef.Class; } - - PackageInventory->SetIsReplicated(true); } void APEInventoryPackage::Tick(const float DeltaSeconds) diff --git a/Source/ProjectElementus/Private/Actors/World/PEProjectileActor.cpp b/Source/ProjectElementus/Private/Actors/World/PEProjectileActor.cpp index 95775373..be9d0c95 100644 --- a/Source/ProjectElementus/Private/Actors/World/PEProjectileActor.cpp +++ b/Source/ProjectElementus/Private/Actors/World/PEProjectileActor.cpp @@ -5,6 +5,7 @@ #include "Actors/World/PEProjectileActor.h" #include "Actors/Character/PECharacter.h" #include "GAS/System/PEAbilitySystemComponent.h" +#include "GAS/System/PEAbilityData.h" #include "Components/SphereComponent.h" #include "GameFramework/ProjectileMovementComponent.h" diff --git a/Source/ProjectElementus/Private/Components/PEInventoryComponent.cpp b/Source/ProjectElementus/Private/Components/PEInventoryComponent.cpp index 01a0f6cb..75f3299b 100644 --- a/Source/ProjectElementus/Private/Components/PEInventoryComponent.cpp +++ b/Source/ProjectElementus/Private/Components/PEInventoryComponent.cpp @@ -9,16 +9,17 @@ #include "Actors/Character/PECharacter.h" #include "GAS/System/PEAbilitySystemComponent.h" #include "GAS/System/PEAbilityFunctions.h" +#include "MFEA_Settings.h" UPEInventoryComponent::UPEInventoryComponent(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { PrimaryComponentTick.bCanEverTick = false; PrimaryComponentTick.bStartWithTickEnabled = false; - static const ConstructorHelpers::FObjectFinder InputIDEnum_ObjRef(TEXT("/Game/Main/Data/GAS/EN_AbilityInputID")); - if (InputIDEnum_ObjRef.Succeeded()) + if (const UMFEA_Settings* MF_Settings = GetDefault(); + !MF_Settings->InputIDEnumeration.IsNull()) { - InputEnumHandle = InputIDEnum_ObjRef.Object; + InputEnumHandle = MF_Settings->InputIDEnumeration.LoadSynchronous(); } } @@ -59,7 +60,7 @@ bool UPEInventoryComponent::EquipItem(const FElementusItemInfo& InItem) // Already equipped UE_LOG(LogTemp, Display, TEXT("%s - Actor %s has already unequipped item %s"), *FString(__func__), *GetOwner()->GetName(), *InItem.ItemId.ToString()); - UnnequipItem(GetItemReferenceAt(FoundIndex)); + UnequipItem(GetItemReferenceAt(FoundIndex)); return false; } @@ -99,7 +100,7 @@ bool UPEInventoryComponent::EquipItem(const FElementusItemInfo& InItem) return false; } -bool UPEInventoryComponent::UnnequipItem(FElementusItemInfo& InItem) +bool UPEInventoryComponent::UnequipItem(FElementusItemInfo& InItem) { if (!IsValid(GetOwner())) { diff --git a/Source/ProjectElementus/Private/GAS/Attributes/PEAttributeBase.cpp b/Source/ProjectElementus/Private/GAS/Attributes/PEAttributeBase.cpp index 240fdcf6..d68a67dc 100644 --- a/Source/ProjectElementus/Private/GAS/Attributes/PEAttributeBase.cpp +++ b/Source/ProjectElementus/Private/GAS/Attributes/PEAttributeBase.cpp @@ -5,8 +5,7 @@ #include "GAS/Attributes/PEAttributeBase.h" UPEAttributeBase::UPEAttributeBase(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) -{ - +{ } void UPEAttributeBase::AdjustAttributeForMaxChange(const FGameplayAttributeData& AffectedAttribute, const FGameplayAttributeData& MaxAttribute, const float NewMaxValue, const FGameplayAttribute& AffectedAttributeProperty) const @@ -17,7 +16,6 @@ void UPEAttributeBase::AdjustAttributeForMaxChange(const FGameplayAttributeData& !FMath::IsNearlyEqual(CurrentMaxValue, NewMaxValue) && AbilityComp) { const float CurrentValue = AffectedAttribute.GetCurrentValue(); - const float NewDelta = CurrentMaxValue > 0.f ? CurrentValue * NewMaxValue / CurrentMaxValue - CurrentValue : NewMaxValue; AbilityComp->ApplyModToAttributeUnsafe(AffectedAttributeProperty, EGameplayModOp::Additive, NewDelta); diff --git a/Source/ProjectElementus/Private/GAS/Attributes/PECustomStatusAS.cpp b/Source/ProjectElementus/Private/GAS/Attributes/PECustomStatusAS.cpp index e65ba047..4548a6c0 100644 --- a/Source/ProjectElementus/Private/GAS/Attributes/PECustomStatusAS.cpp +++ b/Source/ProjectElementus/Private/GAS/Attributes/PECustomStatusAS.cpp @@ -7,7 +7,6 @@ #include "GameFramework/PlayerState.h" #include "GameFramework/CharacterMovementComponent.h" #include "GameplayEffectExtension.h" -#include "AbilitySystemComponent.h" #include "Runtime/Engine/Public/Net/UnrealNetwork.h" UPECustomStatusAS::UPECustomStatusAS(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer), AttackRate(1.f), DefenseRate(1.f), SpeedRate(1.f), JumpRate(1.f), Gold(0.f) diff --git a/Source/ProjectElementus/Private/GAS/Attributes/PELevelingAS.cpp b/Source/ProjectElementus/Private/GAS/Attributes/PELevelingAS.cpp index 0bf6bc15..e4dfb4fe 100644 --- a/Source/ProjectElementus/Private/GAS/Attributes/PELevelingAS.cpp +++ b/Source/ProjectElementus/Private/GAS/Attributes/PELevelingAS.cpp @@ -5,6 +5,7 @@ #include "GAS/Attributes/PELevelingAS.h" #include "GAS/Attributes/PEBasicStatusAS.h" #include "GAS/Attributes/PECustomStatusAS.h" +#include "GAS/System/PEAttributeData.h" #include "GameplayEffectExtension.h" #include "GameplayEffectTypes.h" #include "AbilitySystemComponent.h" diff --git a/Source/ProjectElementus/Private/GAS/System/PEAbilitySystemComponent.cpp b/Source/ProjectElementus/Private/GAS/System/PEAbilitySystemComponent.cpp index a0c5a332..43b5b486 100644 --- a/Source/ProjectElementus/Private/GAS/System/PEAbilitySystemComponent.cpp +++ b/Source/ProjectElementus/Private/GAS/System/PEAbilitySystemComponent.cpp @@ -3,6 +3,8 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "GAS/System/PEAbilitySystemComponent.h" +#include "GAS/System/PEAbilityData.h" +#include "GAS/System/PEEffectData.h" UPEAbilitySystemComponent::UPEAbilitySystemComponent(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { @@ -10,7 +12,7 @@ UPEAbilitySystemComponent::UPEAbilitySystemComponent(const FObjectInitializer& O ReplicationMode = EGameplayEffectReplicationMode::Minimal; } -void UPEAbilitySystemComponent::ApplyEffectGroupedDataToSelf(FGameplayEffectGroupedData GroupedData) +void UPEAbilitySystemComponent::ApplyEffectGroupedDataToSelf(const FGameplayEffectGroupedData GroupedData) { if (!IsOwnerActorAuthoritative()) { @@ -30,7 +32,7 @@ void UPEAbilitySystemComponent::ApplyEffectGroupedDataToSelf(FGameplayEffectGrou } } -void UPEAbilitySystemComponent::ApplyEffectGroupedDataToTarget(FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* TargetABSC) +void UPEAbilitySystemComponent::ApplyEffectGroupedDataToTarget(const FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* TargetABSC) { if (!IsOwnerActorAuthoritative()) { @@ -50,7 +52,7 @@ void UPEAbilitySystemComponent::ApplyEffectGroupedDataToTarget(FGameplayEffectGr } } -void UPEAbilitySystemComponent::RemoveEffectGroupedDataFromSelf(FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* InstigatorABSC, const int32 StacksToRemove) +void UPEAbilitySystemComponent::RemoveEffectGroupedDataFromSelf(const FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* InstigatorABSC, const int32 StacksToRemove) { if (!IsOwnerActorAuthoritative()) { @@ -87,7 +89,7 @@ void UPEAbilitySystemComponent::RemoveEffectGroupedDataFromSelf(FGameplayEffectG RemoveActiveEffects(Query, StacksToRemove); } -void UPEAbilitySystemComponent::RemoveEffectGroupedDataFromTarget(FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* InstigatorABSC, UAbilitySystemComponent* TargetABSC, const int32 StacksToRemove) +void UPEAbilitySystemComponent::RemoveEffectGroupedDataFromTarget(const FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* InstigatorABSC, UAbilitySystemComponent* TargetABSC, const int32 StacksToRemove) { if (!IsOwnerActorAuthoritative()) { diff --git a/Source/ProjectElementus/Private/GAS/System/PEEffectData.cpp b/Source/ProjectElementus/Private/GAS/System/PEEffectData.cpp new file mode 100644 index 00000000..e4cf096f --- /dev/null +++ b/Source/ProjectElementus/Private/GAS/System/PEEffectData.cpp @@ -0,0 +1,5 @@ +// Author: Lucas Vilas-Boas +// Year: 2022 +// Repo: https://github.com/lucoiso/UEProject_Elementus + +#include "GAS/System/PEEffectData.h" \ No newline at end of file diff --git a/Source/ProjectElementus/Private/GAS/System/PEGameplayAbility.cpp b/Source/ProjectElementus/Private/GAS/System/PEGameplayAbility.cpp index 5c264328..8b90ac2b 100644 --- a/Source/ProjectElementus/Private/GAS/System/PEGameplayAbility.cpp +++ b/Source/ProjectElementus/Private/GAS/System/PEGameplayAbility.cpp @@ -4,6 +4,8 @@ #include "GAS/System/PEGameplayAbility.h" #include "GAS/System/PEAbilitySystemComponent.h" +#include "GAS/System/PEAbilityData.h" +#include "GAS/System/PETrace.h" #include "GAS/Effects/PECooldownEffect.h" #include "GAS/Effects/PECostEffect.h" #include "GAS/Tasks/PESpawnProjectile_Task.h" @@ -525,7 +527,7 @@ void UPEGameplayAbility::ActivateWaitMontageTask(const FName MontageSection, con AbilityTask_PlayMontageAndWait->ReadyForActivation(); } -void UPEGameplayAbility::ActivateWaitTargetDataTask(const TEnumAsByte TargetingConfirmation, const TSubclassOf TargetActorClass, FTargetActorSpawnParams TargetParameters) +void UPEGameplayAbility::ActivateWaitTargetDataTask(const TEnumAsByte TargetingConfirmation, const TSubclassOf TargetActorClass, FPETargetActorSpawnParams TargetParameters) { if constexpr (&TargetParameters.StartLocation == nullptr) { diff --git a/Source/ProjectElementus/Private/GAS/Tasks/PEMoveCamera_Task.cpp b/Source/ProjectElementus/Private/GAS/Tasks/PEMoveCamera_Task.cpp index fa30e540..6b683dd9 100644 --- a/Source/ProjectElementus/Private/GAS/Tasks/PEMoveCamera_Task.cpp +++ b/Source/ProjectElementus/Private/GAS/Tasks/PEMoveCamera_Task.cpp @@ -4,7 +4,7 @@ #include "GAS/Tasks/PEMoveCamera_Task.h" #include "Actors/Character/PECharacter.h" -#include "AbilitySystemComponent.h" +#include "Components/TimelineComponent.h" #include "Camera/CameraComponent.h" UPEMoveCamera_Task::UPEMoveCamera_Task(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) diff --git a/Source/ProjectElementus/Private/GAS/Tasks/PESpawnProjectile_Task.cpp b/Source/ProjectElementus/Private/GAS/Tasks/PESpawnProjectile_Task.cpp index f4793fc2..d1bb6ba3 100644 --- a/Source/ProjectElementus/Private/GAS/Tasks/PESpawnProjectile_Task.cpp +++ b/Source/ProjectElementus/Private/GAS/Tasks/PESpawnProjectile_Task.cpp @@ -3,6 +3,7 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "GAS/Tasks/PESpawnProjectile_Task.h" +#include "GAS/System/PEAbilityData.h" #include "Actors/World/PEProjectileActor.h" UPESpawnProjectile_Task::UPESpawnProjectile_Task(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) diff --git a/Source/ProjectElementus/Private/Management/Functions/PEPlayerLibrary.cpp b/Source/ProjectElementus/Private/Management/Functions/PEPlayerLibrary.cpp index 32e87be7..5d1f1d6b 100644 --- a/Source/ProjectElementus/Private/Management/Functions/PEPlayerLibrary.cpp +++ b/Source/ProjectElementus/Private/Management/Functions/PEPlayerLibrary.cpp @@ -3,8 +3,8 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "Management/Functions/PEPlayerLibrary.h" -#include "Actors/Character/PECharacter.h" #include "EnhancedInputSubsystems.h" +#include "EnhancedInputComponent.h" FPlayerInputBindingHandle UPEPlayerLibrary::BindDynamicInput(APlayerController* Controller, UInputAction* Action, UObject* Object, const FName UFunctionName, const ETriggerEvent TriggerEvent) { diff --git a/Source/ProjectElementus/Private/Management/PECustomSettings.cpp b/Source/ProjectElementus/Private/Management/PECustomSettings.cpp index 7289671b..27f5515b 100644 --- a/Source/ProjectElementus/Private/Management/PECustomSettings.cpp +++ b/Source/ProjectElementus/Private/Management/PECustomSettings.cpp @@ -26,23 +26,23 @@ void UPECustomSettings::ApplyPECustomSettings() { switch (FSRMode) { - case 0: // Performance - ScreenPercentageCVar->Set(50, ECVF_SetByConsole); - break; + case 0: // Performance + ScreenPercentageCVar->Set(50, ECVF_SetByConsole); + break; - case 1: // Balanced - ScreenPercentageCVar->Set(59, ECVF_SetByConsole); - break; + case 1: // Balanced + ScreenPercentageCVar->Set(59, ECVF_SetByConsole); + break; - case 2: // Quality - ScreenPercentageCVar->Set(67, ECVF_SetByConsole); - break; + case 2: // Quality + ScreenPercentageCVar->Set(67, ECVF_SetByConsole); + break; - case 3: // Ultra Quality - ScreenPercentageCVar->Set(77, ECVF_SetByConsole); - break; + case 3: // Ultra Quality + ScreenPercentageCVar->Set(77, ECVF_SetByConsole); + break; - default: break; + default: break; } } diff --git a/Source/ProjectElementus/Private/Management/PEDevSettings.cpp b/Source/ProjectElementus/Private/Management/PEDevSettings.cpp new file mode 100644 index 00000000..e9891587 --- /dev/null +++ b/Source/ProjectElementus/Private/Management/PEDevSettings.cpp @@ -0,0 +1,9 @@ +// Author: Lucas Vilas-Boas +// Year: 2022 +// Repo: https://github.com/lucoiso/UEProject_Elementus + +#include "Management/PEDevSettings.h" + +UPEDevSettings::UPEDevSettings(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) +{ +} diff --git a/Source/ProjectElementus/Private/Management/PEGameInstance.cpp b/Source/ProjectElementus/Private/Management/PEGameInstance.cpp index 275d0c35..53dd3565 100644 --- a/Source/ProjectElementus/Private/Management/PEGameInstance.cpp +++ b/Source/ProjectElementus/Private/Management/PEGameInstance.cpp @@ -3,14 +3,15 @@ // Repo: https://github.com/lucoiso/UEProject_Elementus #include "Management/PEGameInstance.h" +#include "Management/Functions/PEEOSLibrary.h" #include "EOSVoiceChatUser.h" #include "JsonObjectConverter.h" #include "Interfaces/OnlineIdentityInterface.h" #include "Kismet/GameplayStatics.h" +#include "OnlineSubsystemEOS.h" UPEGameInstance::UPEGameInstance(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { - } void UPEGameInstance::InitializeVoiceChatFramework() diff --git a/Source/ProjectElementus/Public/Actors/Character/PECharacter.h b/Source/ProjectElementus/Public/Actors/Character/PECharacter.h index fe060626..de721ba9 100644 --- a/Source/ProjectElementus/Public/Actors/Character/PECharacter.h +++ b/Source/ProjectElementus/Public/Actors/Character/PECharacter.h @@ -6,7 +6,6 @@ #include "CoreMinimal.h" #include "AbilitySystemInterface.h" -#include "ElementusInventoryData.h" #include "GameplayTagContainer.h" #include "GameFramework/Character.h" #include "PECharacter.generated.h" diff --git a/Source/ProjectElementus/Public/Actors/Character/PEPlayerController.h b/Source/ProjectElementus/Public/Actors/Character/PEPlayerController.h index 083b7ce3..bed3644b 100644 --- a/Source/ProjectElementus/Public/Actors/Character/PEPlayerController.h +++ b/Source/ProjectElementus/Public/Actors/Character/PEPlayerController.h @@ -48,7 +48,7 @@ class PROJECTELEMENTUS_API APEPlayerController final : public APlayerController, /* This function came from IAbilityInputBinding interface, * provided by GameFeatures_ExtraActions plugin to manage ability bindings */ UFUNCTION(Client, Reliable) - virtual void SetupAbilityInputBinding_Implementation(UInputAction* Action, const int32 InputID) override; + virtual void SetupAbilityBindingByInput_Implementation(UInputAction* Action, const int32 InputID) override; /* This function came from IAbilityInputBinding interface, * provided by GameFeatures_ExtraActions plugin to manage ability bindings */ diff --git a/Source/ProjectElementus/Public/Actors/Interfaces/PEEquipment.h b/Source/ProjectElementus/Public/Actors/Interfaces/PEEquipment.h index b0cb7007..85ce7b63 100644 --- a/Source/ProjectElementus/Public/Actors/Interfaces/PEEquipment.h +++ b/Source/ProjectElementus/Public/Actors/Interfaces/PEEquipment.h @@ -5,11 +5,11 @@ #pragma once #include "CoreMinimal.h" +#include "GAS/System/PEEffectData.h" #include "UObject/Object.h" -#include "GAS/System/PEAbilityData.h" #include "PEEquipment.generated.h" -class APECharacter; +class UGameplayAbility; /** * diff --git a/Source/ProjectElementus/Public/Actors/World/PEConsumableActor.h b/Source/ProjectElementus/Public/Actors/World/PEConsumableActor.h index 362e60d7..f3b40603 100644 --- a/Source/ProjectElementus/Public/Actors/World/PEConsumableActor.h +++ b/Source/ProjectElementus/Public/Actors/World/PEConsumableActor.h @@ -5,12 +5,12 @@ #pragma once #include "CoreMinimal.h" -#include "GameplayTagContainer.h" #include "Actors/Interfaces/PEInteractable.h" #include "GameFramework/Actor.h" -#include "Management/Data/PEConsumableData.h" #include "PEConsumableActor.generated.h" +class UPEConsumableData; +class UNiagaraComponent; /** * */ @@ -38,7 +38,7 @@ class PROJECTELEMENTUS_API APEConsumableActor : public AActor, public IPEInterac TObjectPtr ObjectMesh; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Project Elementus | Properties") - TObjectPtr ObjectVFX; + TObjectPtr ObjectVFX; private: #if WITH_EDITOR diff --git a/Source/ProjectElementus/Public/Actors/World/PEExplosiveActor.h b/Source/ProjectElementus/Public/Actors/World/PEExplosiveActor.h index 00ea9c06..25b7b74b 100644 --- a/Source/ProjectElementus/Public/Actors/World/PEExplosiveActor.h +++ b/Source/ProjectElementus/Public/Actors/World/PEExplosiveActor.h @@ -5,12 +5,11 @@ #pragma once #include "CoreMinimal.h" +#include "GAS/System/PEEffectData.h" #include "GameFramework/Actor.h" -#include "GAS/System/PEAbilityData.h" #include "PEExplosiveActor.generated.h" class UNiagaraSystem; -class UGameplayEffect; class UAbilitySystemComponent; /** * diff --git a/Source/ProjectElementus/Public/Actors/World/PEInventoryPackage.h b/Source/ProjectElementus/Public/Actors/World/PEInventoryPackage.h index 42583b28..288ec1cc 100644 --- a/Source/ProjectElementus/Public/Actors/World/PEInventoryPackage.h +++ b/Source/ProjectElementus/Public/Actors/World/PEInventoryPackage.h @@ -5,8 +5,8 @@ #pragma once #include "CoreMinimal.h" -#include "ElementusInventoryPackage.h" #include "Actors/Interfaces/PEInteractable.h" +#include "ElementusInventoryPackage.h" #include "PEInventoryPackage.generated.h" /** diff --git a/Source/ProjectElementus/Public/Actors/World/PEProjectileActor.h b/Source/ProjectElementus/Public/Actors/World/PEProjectileActor.h index 912430f7..296145f7 100644 --- a/Source/ProjectElementus/Public/Actors/World/PEProjectileActor.h +++ b/Source/ProjectElementus/Public/Actors/World/PEProjectileActor.h @@ -5,8 +5,8 @@ #pragma once #include "CoreMinimal.h" +#include "GAS/System/PEEffectData.h" #include "GameFramework/Actor.h" -#include "GAS/System/PEAbilityData.h" #include "PEProjectileActor.generated.h" class UAbilitySystemComponent; diff --git a/Source/ProjectElementus/Public/Components/PEInventoryComponent.h b/Source/ProjectElementus/Public/Components/PEInventoryComponent.h index cefe765a..d426f57f 100644 --- a/Source/ProjectElementus/Public/Components/PEInventoryComponent.h +++ b/Source/ProjectElementus/Public/Components/PEInventoryComponent.h @@ -29,7 +29,7 @@ class PROJECTELEMENTUS_API UPEInventoryComponent : public UElementusInventoryCom virtual bool EquipItem(const FElementusItemInfo& InItem); UFUNCTION(BlueprintCallable, Category = "Project Elementus | Functions") - virtual bool UnnequipItem(FElementusItemInfo& InItem); + virtual bool UnequipItem(FElementusItemInfo& InItem); protected: UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Project Elementus | Properties") diff --git a/Source/ProjectElementus/Public/GAS/Attributes/PEAttributeBase.h b/Source/ProjectElementus/Public/GAS/Attributes/PEAttributeBase.h index 2814831a..1af0c423 100644 --- a/Source/ProjectElementus/Public/GAS/Attributes/PEAttributeBase.h +++ b/Source/ProjectElementus/Public/GAS/Attributes/PEAttributeBase.h @@ -4,11 +4,9 @@ #pragma once -#include "AbilitySystemComponent.h" - #include "CoreMinimal.h" +#include "AbilitySystemComponent.h" #include "AttributeSet.h" -#include "GAS/System/PEAttributeData.h" #include "PEAttributeBase.generated.h" #define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \ @@ -17,8 +15,6 @@ GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \ GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName) -class UGameplayEffect; - /** * */ diff --git a/Source/ProjectElementus/Public/GAS/System/PEAbilityData.h b/Source/ProjectElementus/Public/GAS/System/PEAbilityData.h index d402b240..0e4e2eba 100644 --- a/Source/ProjectElementus/Public/GAS/System/PEAbilityData.h +++ b/Source/ProjectElementus/Public/GAS/System/PEAbilityData.h @@ -5,29 +5,10 @@ #pragma once #include "CoreMinimal.h" -#include "GameplayTagContainer.h" #include "PEAbilityData.generated.h" -class UGameplayEffect; class UGameplayAbility; -/** - * - */ -USTRUCT(BlueprintType, Category = "Project Elementus | Structs") -struct FGameplayEffectGroupedData -{ - GENERATED_USTRUCT_BODY() - - FGameplayEffectGroupedData() = default; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Project Elementus | Properties") - TSubclassOf EffectClass; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Project Elementus | Properties") - TMap SetByCallerStackedData; -}; - /** * */ diff --git a/Source/ProjectElementus/Public/GAS/System/PEAbilityFunctions.h b/Source/ProjectElementus/Public/GAS/System/PEAbilityFunctions.h index 0816a513..e7a42cea 100644 --- a/Source/ProjectElementus/Public/GAS/System/PEAbilityFunctions.h +++ b/Source/ProjectElementus/Public/GAS/System/PEAbilityFunctions.h @@ -5,8 +5,8 @@ #pragma once #include "CoreMinimal.h" -#include "Kismet/BlueprintFunctionLibrary.h" #include "GAS/System/PETrace.h" +#include "Kismet/BlueprintFunctionLibrary.h" #include "PEAbilityFunctions.generated.h" /** diff --git a/Source/ProjectElementus/Public/GAS/System/PEAbilitySystemComponent.h b/Source/ProjectElementus/Public/GAS/System/PEAbilitySystemComponent.h index 28559ea3..57871790 100644 --- a/Source/ProjectElementus/Public/GAS/System/PEAbilitySystemComponent.h +++ b/Source/ProjectElementus/Public/GAS/System/PEAbilitySystemComponent.h @@ -6,9 +6,10 @@ #include "CoreMinimal.h" #include "AbilitySystemComponent.h" -#include "GAS/System/PEAbilityData.h" #include "PEAbilitySystemComponent.generated.h" +struct FGameplayEffectGroupedData; + /** * */ @@ -22,17 +23,17 @@ class PROJECTELEMENTUS_API UPEAbilitySystemComponent final : public UAbilitySyst /* Apply a grouped GE data to self Ability System Component */ UFUNCTION(BlueprintCallable, Category = "Project Elementus | Functions") - void ApplyEffectGroupedDataToSelf(FGameplayEffectGroupedData GroupedData); + void ApplyEffectGroupedDataToSelf(const FGameplayEffectGroupedData GroupedData); /* Apply a grouped GE data to target Ability System Component */ UFUNCTION(BlueprintCallable, Category = "Project Elementus | Functions") - void ApplyEffectGroupedDataToTarget(FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* TargetABSC); + void ApplyEffectGroupedDataToTarget(const FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* TargetABSC); UFUNCTION(BlueprintCallable, Category = "Project Elementus | Functions") - void RemoveEffectGroupedDataFromSelf(FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* InstigatorABSC, const int32 StacksToRemove = 1); + void RemoveEffectGroupedDataFromSelf(const FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* InstigatorABSC, const int32 StacksToRemove = 1); UFUNCTION(BlueprintCallable, Category = "Project Elementus | Functions") - void RemoveEffectGroupedDataFromTarget(FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* InstigatorABSC, UAbilitySystemComponent* TargetABSC, const int32 StacksToRemove = 1); + void RemoveEffectGroupedDataFromTarget(const FGameplayEffectGroupedData GroupedData, UAbilitySystemComponent* InstigatorABSC, UAbilitySystemComponent* TargetABSC, const int32 StacksToRemove = 1); template const T* GetCustomAttributeSet() const diff --git a/Source/ProjectElementus/Public/GAS/System/PEEffectData.h b/Source/ProjectElementus/Public/GAS/System/PEEffectData.h new file mode 100644 index 00000000..e66aaec3 --- /dev/null +++ b/Source/ProjectElementus/Public/GAS/System/PEEffectData.h @@ -0,0 +1,28 @@ +// Author: Lucas Vilas-Boas +// Year: 2022 +// Repo: https://github.com/lucoiso/UEProject_Elementus + +#pragma once + +#include "CoreMinimal.h" +#include "GameplayTagContainer.h" +#include "PEEffectData.generated.h" + +class UGameplayEffect; + +/** + * + */ +USTRUCT(BlueprintType, Category = "Project Elementus | Structs") +struct FGameplayEffectGroupedData +{ + GENERATED_USTRUCT_BODY() + + FGameplayEffectGroupedData() = default; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Project Elementus | Properties") + TSubclassOf EffectClass; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Project Elementus | Properties") + TMap SetByCallerStackedData; +}; \ No newline at end of file diff --git a/Source/ProjectElementus/Public/GAS/System/PEGameplayAbility.h b/Source/ProjectElementus/Public/GAS/System/PEGameplayAbility.h index e4175113..637e7763 100644 --- a/Source/ProjectElementus/Public/GAS/System/PEGameplayAbility.h +++ b/Source/ProjectElementus/Public/GAS/System/PEGameplayAbility.h @@ -5,14 +5,14 @@ #pragma once #include "CoreMinimal.h" +#include "GAS/System/PEEffectData.h" #include "Abilities/GameplayAbility.h" -#include "GAS/System/PEAbilityData.h" -#include "GAS/System/PETrace.h" #include "PEGameplayAbility.generated.h" class AGameplayAbilityTargetActor_Trace; class AGameplayAbilityTargetActor; class APEProjectileActor; +struct FPETargetActorSpawnParams; /** * */ @@ -147,7 +147,7 @@ class PROJECTELEMENTUS_API UPEGameplayAbility : public UGameplayAbility /* Performs targeting and call WaitTargetData_Callback function */ UFUNCTION(BlueprintCallable, Category = "Project Elementus | Functions | Delegates") - void ActivateWaitTargetDataTask(const TEnumAsByte TargetingConfirmation, const TSubclassOf TargetActorClass, FTargetActorSpawnParams TargetParameters); + void ActivateWaitTargetDataTask(const TEnumAsByte TargetingConfirmation, const TSubclassOf TargetActorClass, FPETargetActorSpawnParams TargetParameters); /* Start a task to wait for a Gameplay Event and call WaitGameplayEvent_Callback function */ UFUNCTION(BlueprintCallable, Category = "Project Elementus | Functions | Delegates") diff --git a/Source/ProjectElementus/Public/GAS/System/PETrace.h b/Source/ProjectElementus/Public/GAS/System/PETrace.h index 855c125e..5fe002bf 100644 --- a/Source/ProjectElementus/Public/GAS/System/PETrace.h +++ b/Source/ProjectElementus/Public/GAS/System/PETrace.h @@ -4,21 +4,21 @@ #pragma once -#include "Abilities/GameplayAbilityTargetDataFilter.h" +#include "CoreMinimal.h" #include "Abilities/GameplayAbilityWorldReticle.h" +#include "Abilities/GameplayAbilityTargetDataFilter.h" #include "Abilities/GameplayAbilityTargetTypes.h" -#include "CoreMinimal.h" #include "PETrace.generated.h" /** * */ USTRUCT(BlueprintType, Category = "Project Elementus | Structs") -struct PROJECTELEMENTUS_API FTargetActorSpawnParams +struct PROJECTELEMENTUS_API FPETargetActorSpawnParams { GENERATED_USTRUCT_BODY() - FTargetActorSpawnParams() : Range(0.f), Height(0.f), Radius(0.f), StartLocation(FGameplayAbilityTargetingLocationInfo()), ReticleClass(AGameplayAbilityWorldReticle::StaticClass()), ReticleParams(FWorldReticleParameters()), TargetFilter(FGameplayTargetDataFilter()), bDestroyOnConfirmation(false), bTraceAffectsAimPitch(false), bDebug(false) + FPETargetActorSpawnParams() : Range(0.f), Height(0.f), Radius(0.f), StartLocation(FGameplayAbilityTargetingLocationInfo()), ReticleClass(AGameplayAbilityWorldReticle::StaticClass()), ReticleParams(FWorldReticleParameters()), TargetFilter(FGameplayTargetDataFilter()), bDestroyOnConfirmation(false), bTraceAffectsAimPitch(false), bDebug(false) { } diff --git a/Source/ProjectElementus/Public/GAS/Tasks/PEMoveCamera_Task.h b/Source/ProjectElementus/Public/GAS/Tasks/PEMoveCamera_Task.h index 3a11366a..7f20f492 100644 --- a/Source/ProjectElementus/Public/GAS/Tasks/PEMoveCamera_Task.h +++ b/Source/ProjectElementus/Public/GAS/Tasks/PEMoveCamera_Task.h @@ -6,9 +6,11 @@ #include "CoreMinimal.h" #include "Abilities/Tasks/AbilityTask.h" -#include "Components/TimelineComponent.h" #include "PEMoveCamera_Task.generated.h" +class UCameraComponent; +class UTimelineComponent; + DECLARE_DYNAMIC_MULTICAST_DELEGATE(FAimDelegate); /** * @@ -49,8 +51,8 @@ class PROJECTELEMENTUS_API UPEMoveCamera_Task final : public UAbilityTask float CurrentValue = 0.f; - TWeakObjectPtr TargetCamera; - TWeakObjectPtr TaskTimeline; + TWeakObjectPtr TargetCamera; + TWeakObjectPtr TaskTimeline; protected: UFUNCTION() diff --git a/Source/ProjectElementus/Public/GAS/Tasks/PESpawnProjectile_Task.h b/Source/ProjectElementus/Public/GAS/Tasks/PESpawnProjectile_Task.h index 5f6c118b..933102a3 100644 --- a/Source/ProjectElementus/Public/GAS/Tasks/PESpawnProjectile_Task.h +++ b/Source/ProjectElementus/Public/GAS/Tasks/PESpawnProjectile_Task.h @@ -5,8 +5,8 @@ #pragma once #include "CoreMinimal.h" +#include "GAS/System/PEEffectData.h" #include "Abilities/Tasks/AbilityTask.h" -#include "GAS/System/PEAbilityData.h" #include "PESpawnProjectile_Task.generated.h" class APEProjectileActor; diff --git a/Source/ProjectElementus/Public/Management/Data/PEConsumableData.h b/Source/ProjectElementus/Public/Management/Data/PEConsumableData.h index 6470dc42..d4623786 100644 --- a/Source/ProjectElementus/Public/Management/Data/PEConsumableData.h +++ b/Source/ProjectElementus/Public/Management/Data/PEConsumableData.h @@ -6,12 +6,10 @@ #include "CoreMinimal.h" #include "GameplayTagContainer.h" -#include "GAS/System/PEAbilityData.h" +#include "GAS/System/PEEffectData.h" #include "Engine/DataAsset.h" -#include "Engine/DataTable.h" #include "PEConsumableData.generated.h" -class UGameplayEffect; class UNiagaraSystem; /** * diff --git a/Source/ProjectElementus/Public/Management/Data/PEEnemyData.h b/Source/ProjectElementus/Public/Management/Data/PEEnemyData.h index 18c73264..de3a5d26 100644 --- a/Source/ProjectElementus/Public/Management/Data/PEEnemyData.h +++ b/Source/ProjectElementus/Public/Management/Data/PEEnemyData.h @@ -6,7 +6,6 @@ #include "CoreMinimal.h" #include "Engine/DataAsset.h" -#include "Engine/DataTable.h" #include "PEEnemyData.generated.h" /** diff --git a/Source/ProjectElementus/Public/Management/Data/PEGlobalTags.h b/Source/ProjectElementus/Public/Management/Data/PEGlobalTags.h index 02d4d6e0..ff5d1ec9 100644 --- a/Source/ProjectElementus/Public/Management/Data/PEGlobalTags.h +++ b/Source/ProjectElementus/Public/Management/Data/PEGlobalTags.h @@ -4,8 +4,6 @@ #pragma once -#include "GameplayTagContainer.h" - #pragma region Generic constexpr auto GlobalTag_GenericCooldown = "GameplayEffect.Cooldown"; #pragma endregion Generic diff --git a/Source/ProjectElementus/Public/Management/Functions/PEEOSLibrary.h b/Source/ProjectElementus/Public/Management/Functions/PEEOSLibrary.h index a3a2334d..887929a5 100644 --- a/Source/ProjectElementus/Public/Management/Functions/PEEOSLibrary.h +++ b/Source/ProjectElementus/Public/Management/Functions/PEEOSLibrary.h @@ -5,10 +5,10 @@ #pragma once #include "CoreMinimal.h" -#include "Kismet/BlueprintFunctionLibrary.h" #include "EOSVoiceChatUser.h" #include "OnlineSubsystemEOS.h" #include "OnlineSessionSettings.h" +#include "Kismet/BlueprintFunctionLibrary.h" #include "PEEOSLibrary.generated.h" /** diff --git a/Source/ProjectElementus/Public/Management/Functions/PEPlayerLibrary.h b/Source/ProjectElementus/Public/Management/Functions/PEPlayerLibrary.h index 07be8685..495598eb 100644 --- a/Source/ProjectElementus/Public/Management/Functions/PEPlayerLibrary.h +++ b/Source/ProjectElementus/Public/Management/Functions/PEPlayerLibrary.h @@ -5,11 +5,12 @@ #pragma once #include "CoreMinimal.h" -#include "EnhancedInputComponent.h" -#include "GameFeatureAction_AddInputs.h" +#include "InputTriggers.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "PEPlayerLibrary.generated.h" +class UInputAction; + USTRUCT(BlueprintType, Category = "Project Elementus | Structs") struct FPlayerInputBindingHandle { diff --git a/Source/ProjectElementus/Public/Management/PEDevSettings.h b/Source/ProjectElementus/Public/Management/PEDevSettings.h new file mode 100644 index 00000000..11b40b08 --- /dev/null +++ b/Source/ProjectElementus/Public/Management/PEDevSettings.h @@ -0,0 +1,21 @@ +// Author: Lucas Vilas-Boas +// Year: 2022 +// Repo: https://github.com/lucoiso/UEProject_Elementus + +#pragma once + +#include "CoreMinimal.h" +#include "Engine/DeveloperSettings.h" +#include "PEDevSettings.generated.h" + +/** + * + */ +UCLASS(Config = Game, DefaultConfig, Meta = (DisplayName = "Project Elementus")) +class PROJECTELEMENTUS_API UPEDevSettings : public UDeveloperSettings +{ + GENERATED_BODY() + +public: + explicit UPEDevSettings(const FObjectInitializer& ObjectInitializer); +}; diff --git a/Source/ProjectElementus/Public/Management/PEGameInstance.h b/Source/ProjectElementus/Public/Management/PEGameInstance.h index d158f4b0..574f1b10 100644 --- a/Source/ProjectElementus/Public/Management/PEGameInstance.h +++ b/Source/ProjectElementus/Public/Management/PEGameInstance.h @@ -7,10 +7,11 @@ #include "CoreMinimal.h" #include "EOSVoiceChatUser.h" #include "Interfaces/OnlineSessionInterface.h" -#include "Management/Functions/PEEOSLibrary.h" #include "Engine/GameInstance.h" #include "PEGameInstance.generated.h" +class FOnlineAccountCredentials; +struct FSessionDataHandler; /** * */