From 1bbbef18a504c7843c9c50965f7f32c2741590cd Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Fri, 19 Sep 2025 21:23:08 +0300 Subject: [PATCH 01/21] remove UHLDebugSystem dependencies --- Source/UHLCharacter/UHLCharacter.Build.cs | 1 - .../Private/UHLDebugModuleSubsystem.cpp | 49 ++++++++++++++----- .../UHLDebug/Public/UHLDebugModuleSubsystem.h | 13 ++++- Source/UHLDebug/UHLDebug.Build.cs | 1 - .../DebugCategories/DCC_AbilityInputCache.cpp | 30 ++++++++++++ .../Development/UHLDebugSystemSettings.cpp | 2 + .../DebugCategories/DCC_AbilityInputCache.h | 22 +++++++++ Source/UHLGAS/UHLGAS.Build.cs | 3 +- 8 files changed, 104 insertions(+), 17 deletions(-) create mode 100644 Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilityInputCache.cpp create mode 100644 Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilityInputCache.h diff --git a/Source/UHLCharacter/UHLCharacter.Build.cs b/Source/UHLCharacter/UHLCharacter.Build.cs index 512b86c4..18760184 100644 --- a/Source/UHLCharacter/UHLCharacter.Build.cs +++ b/Source/UHLCharacter/UHLCharacter.Build.cs @@ -33,7 +33,6 @@ public UHLCharacter(ReadOnlyTargetRules Target) : base(Target) "EnhancedInput", "UnrealHelperLibrary", - "UHLDebugSystem", "UHLAI", "UHLGAS", } diff --git a/Source/UHLDebug/Private/UHLDebugModuleSubsystem.cpp b/Source/UHLDebug/Private/UHLDebugModuleSubsystem.cpp index e7ad06ad..7cd8b143 100644 --- a/Source/UHLDebug/Private/UHLDebugModuleSubsystem.cpp +++ b/Source/UHLDebug/Private/UHLDebugModuleSubsystem.cpp @@ -5,12 +5,13 @@ #include "GameFramework/Pawn.h" #include "AbilitySystemInterface.h" -#include "UHLGASBlueprintLibrary.h" #include "Blueprint/UserWidget.h" -#include "Core/UHLGameplayTags.h" #include "Kismet/GameplayStatics.h" #include "UI/UHLDebugWidget.h" -#include "AA_WaitDebugCategoryChange.h" +#include "GameFramework/PlayerController.h" +#include "AbilitySystemComponent.h" +#include "HAL/IConsoleManager.h" +#include "Engine/Engine.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugModuleSubsystem) @@ -23,20 +24,26 @@ void UUHLDebugModuleSubsystem::Initialize(FSubsystemCollectionBase& Collection) { Super::Initialize(Collection); - UAA_WaitDebugCategoryChange* WaitEncounterDebugCategoryChangeTask = - UAA_WaitDebugCategoryChange::WaitDebugCategoryChange( - GetWorld(), - UHLGameplayTags::TAG_UHL_DebugCategory_InputSystem_AbilityInputCache - ); - WaitEncounterDebugCategoryChangeTask->OnChange.AddUniqueDynamic( + // Console variable to control ability input cache debug + static TAutoConsoleVariable GUHLAbilityInputCacheCVar( + TEXT("uhl.Debug.AbilityInputCache"), + 0, + TEXT("Toggle UHL ability input cache debug widget (0/1)"), + ECVF_Default); + + // Install a console variable sink to listen to changes + ConsoleVariableSinkHandle = IConsoleManager::Get().RegisterConsoleVariableSink_Handle(FConsoleCommandDelegate::CreateUObject( this, - &UUHLDebugModuleSubsystem::OnAbilityInputDebugCategoryChanged); - WaitEncounterDebugCategoryChangeTask->Activate(); + &UUHLDebugModuleSubsystem::OnCVarUHLAbilityInputCacheChanged)); + + // Apply initial value + OnCVarUHLAbilityInputCacheChanged(); } void UUHLDebugModuleSubsystem::Deinitialize() { Super::Deinitialize(); + IConsoleManager::Get().UnregisterConsoleVariableSink_Handle(ConsoleVariableSinkHandle); } void UUHLDebugModuleSubsystem::OnAbilityInputDebugCategoryChanged(bool bEnabled) @@ -96,3 +103,23 @@ UUHLAbilitySystemComponent* UUHLDebugModuleSubsystem::GetPlayerAbilitySystemComp return UHLASC; } + +void UUHLDebugModuleSubsystem::OnCVarUHLAbilityInputCacheChanged() +{ + IConsoleVariable* Var = IConsoleManager::Get().FindConsoleVariable(TEXT("uhl.Debug.AbilityInputCache")); + const bool bEnabled = Var ? Var->GetInt() != 0 : false; + + if (GEngine) + { + GEngine->AddOnScreenDebugMessage( + -1, + 2.0f, + bEnabled ? FColor::Green : FColor::Silver, + FString::Printf(TEXT("[UHLDebug] AbilityInputCache %s"), bEnabled ? TEXT("ON") : TEXT("OFF")) + ); + } + + UE_LOG(LogTemp, Log, TEXT("[UHLDebug] AbilityInputCache %s"), bEnabled ? TEXT("ON") : TEXT("OFF")); + + OnAbilityInputDebugCategoryChanged(bEnabled); +} diff --git a/Source/UHLDebug/Public/UHLDebugModuleSubsystem.h b/Source/UHLDebug/Public/UHLDebugModuleSubsystem.h index 55885c2e..61cc84ed 100644 --- a/Source/UHLDebug/Public/UHLDebugModuleSubsystem.h +++ b/Source/UHLDebug/Public/UHLDebugModuleSubsystem.h @@ -3,11 +3,14 @@ #pragma once #include "CoreMinimal.h" -#include "Subsystems/GameInstanceSubsystem.h" -#include "UI/UHLDebugWidget.h" +#include "Subsystems/LocalPlayerSubsystem.h" #include "UHLDebugModuleSubsystem.generated.h" // TODO use ULocalPlayer +class UUHLDebugWidget; +class APlayerController; +class UUHLAbilitySystemComponent; + UCLASS() class UHLDEBUG_API UUHLDebugModuleSubsystem : public ULocalPlayerSubsystem { @@ -33,4 +36,10 @@ class UHLDEBUG_API UUHLDebugModuleSubsystem : public ULocalPlayerSubsystem UFUNCTION() void OnAbilityInputDebugCategoryChanged(bool bEnabled); + + // CVar change sink + FConsoleVariableSinkHandle ConsoleVariableSinkHandle; + + // Called when any console variable changes; reads the relevant CVar and toggles + void OnCVarUHLAbilityInputCacheChanged(); }; diff --git a/Source/UHLDebug/UHLDebug.Build.cs b/Source/UHLDebug/UHLDebug.Build.cs index 4a8c61d4..c8b76965 100644 --- a/Source/UHLDebug/UHLDebug.Build.cs +++ b/Source/UHLDebug/UHLDebug.Build.cs @@ -50,7 +50,6 @@ public UHLDebug(ReadOnlyTargetRules Target) : base(Target) "DeveloperSettings", "UnrealHelperLibrary", - "UHLDebugSystem", "UHLGAS", } ); diff --git a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilityInputCache.cpp b/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilityInputCache.cpp new file mode 100644 index 00000000..856c9089 --- /dev/null +++ b/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilityInputCache.cpp @@ -0,0 +1,30 @@ +// Pavel Penkov 2025 All Rights Reserved. + + +#include "DebugCategories/DCC_AbilityInputCache.h" + +#include "HAL/IConsoleManager.h" + +#include UE_INLINE_GENERATED_CPP_BY_NAME(DCC_AbilityInputCache) + +void UDCC_AbilityInputCache::Activate_Implementation(UObject* ContextObject) +{ + IConsoleVariable* Var = IConsoleManager::Get().FindConsoleVariable(TEXT("uhl.Debug.AbilityInputCache")); + if (Var) + { + Var->Set(1); + } + return Super::Activate_Implementation(ContextObject); +} + +void UDCC_AbilityInputCache::Deactivate_Implementation(UObject* ContextObject) +{ + IConsoleVariable* Var = IConsoleManager::Get().FindConsoleVariable(TEXT("uhl.Debug.AbilityInputCache")); + if (Var) + { + Var->Set(0); + } + Super::Deactivate_Implementation(ContextObject); +} + + diff --git a/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp b/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp index 8ef656b7..0642d9f7 100644 --- a/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp +++ b/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp @@ -11,6 +11,7 @@ #include "DebugCategories/DCC_AbilitySystem_Effects.h" #include "DebugCategories/DCC_Collisions.h" #include "DebugCategories/DCC_InputSystem_EnhancedInput.h" +#include "DebugCategories/DCC_AbilityInputCache.h" #include "Utils/UnrealHelperLibraryBPL.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugSystemSettings) @@ -101,6 +102,7 @@ TArray UUHLDebugSystemSettings::GET_DEFAULT_UHL_DEBUG_CATEGOR AbilityInputCacheDebugCategory.Name = "AbilityInputCache"; AbilityInputCacheDebugCategory.Tags = FGameplayTagContainer{ UHLGameplayTags::TAG_UHL_DebugCategory_InputSystem_AbilityInputCache }; AbilityInputCacheDebugCategory.bIsDefaultUHLDebugCategory = true; + AbilityInputCacheDebugCategory.Components = { UDCC_AbilityInputCache::StaticClass() }; DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilityInputCacheDebugCategory); FUHLDebugCategory CollisionsDebugCategory = {}; diff --git a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilityInputCache.h b/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilityInputCache.h new file mode 100644 index 00000000..2cfeaced --- /dev/null +++ b/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilityInputCache.h @@ -0,0 +1,22 @@ +// Pavel Penkov 2025 All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "UHLDebugCategoryComponent.h" +#include "DCC_AbilityInputCache.generated.h" + +/** + * Debug category component that toggles the Ability Input Cache debug via CVar + */ +UCLASS() +class UHLDEBUGSYSTEM_API UDCC_AbilityInputCache : public UUHLDebugCategoryComponent +{ + GENERATED_BODY() + +public: + virtual void Activate_Implementation(UObject* ContextObject) override; + virtual void Deactivate_Implementation(UObject* ContextObject) override; +}; + + diff --git a/Source/UHLGAS/UHLGAS.Build.cs b/Source/UHLGAS/UHLGAS.Build.cs index dfc512ec..e7988eab 100644 --- a/Source/UHLGAS/UHLGAS.Build.cs +++ b/Source/UHLGAS/UHLGAS.Build.cs @@ -44,9 +44,8 @@ public UHLGAS(ReadOnlyTargetRules Target) : base(Target) "Engine", "DeveloperSettings", - + "UnrealHelperLibrary", - "UHLDebugSystem", "UHLAI", } ); From 32d63a2ad596b53150e568c95b6e3f366051e22d Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Fri, 19 Sep 2025 21:57:32 +0300 Subject: [PATCH 02/21] separate UHLDebugSystem 2 --- .../Core/UHLDebugSystemGameplayTags.cpp | 17 ++++++++++ .../Development/UHLDebugSystemSettings.cpp | 32 ++++++++--------- .../UHLDebugSystem/Private/UHLDebugSystem.cpp | 34 ++++++++++++------- .../Private/UHLDebugSystemSubsystem.cpp | 32 ++++++++--------- .../Public/Core/UHLDebugSystemGameplayTags.h | 20 +++++++++++ .../UHLDebugSystem/Public/UHLDebugCategory.h | 4 +-- .../Public/UHLDebugSystemBuildUtils.h | 27 +++++++++++++++ .../Public/UHLDebugSystemTypes.h | 22 ++++++++++++ Source/UHLDebugSystem/UHLDebugSystem.Build.cs | 4 --- 9 files changed, 142 insertions(+), 50 deletions(-) create mode 100644 Source/UHLDebugSystem/Private/Core/UHLDebugSystemGameplayTags.cpp create mode 100644 Source/UHLDebugSystem/Public/Core/UHLDebugSystemGameplayTags.h create mode 100644 Source/UHLDebugSystem/Public/UHLDebugSystemBuildUtils.h create mode 100644 Source/UHLDebugSystem/Public/UHLDebugSystemTypes.h diff --git a/Source/UHLDebugSystem/Private/Core/UHLDebugSystemGameplayTags.cpp b/Source/UHLDebugSystem/Private/Core/UHLDebugSystemGameplayTags.cpp new file mode 100644 index 00000000..1597d1c4 --- /dev/null +++ b/Source/UHLDebugSystem/Private/Core/UHLDebugSystemGameplayTags.cpp @@ -0,0 +1,17 @@ +// Pavel Penkov 2025 All Rights Reserved. + + +#include "Core/UHLDebugSystemGameplayTags.h" + +namespace UHLDebugSystemTags +{ + UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem, "UHL.DebugCategory.AbilitySystem", ""); + UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Attributes, "UHL.DebugCategory.AbilitySystem.Attributes", ""); + UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Effects, "UHL.DebugCategory.AbilitySystem.Effects", ""); + UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Abilities, "UHL.DebugCategory.AbilitySystem.Abilities", ""); + UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem, "UHL.DebugCategory.InputSystem.EnhancedInputSystem", ""); + UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_InputSystem_AbilityInputCache, "UHL.DebugCategory.InputSystem.AbilityInputCache", ""); + UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_Collisions, "UHL.DebugCategory.Collisions", ""); +} + + diff --git a/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp b/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp index 0642d9f7..e20aec89 100644 --- a/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp +++ b/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp @@ -3,7 +3,7 @@ #include "Development/UHLDebugSystemSettings.h" -#include "Core/UHLGameplayTags.h" +#include "Core/UHLDebugSystemGameplayTags.h" #include "UHLDebugCategory.h" #include "UHLDebugSystemSubsystem.h" #include "DebugCategories/DCC_AbilitySystem_Abilities.h" @@ -12,7 +12,7 @@ #include "DebugCategories/DCC_Collisions.h" #include "DebugCategories/DCC_InputSystem_EnhancedInput.h" #include "DebugCategories/DCC_AbilityInputCache.h" -#include "Utils/UnrealHelperLibraryBPL.h" +#include "UHLDebugSystemBuildUtils.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugSystemSettings) @@ -65,49 +65,49 @@ TArray UUHLDebugSystemSettings::GET_DEFAULT_UHL_DEBUG_CATEGOR FUHLDebugCategory AbilitySystemAttributesDebugCategory = {}; AbilitySystemAttributesDebugCategory.Name = "AbilitySystem Attributes"; - AbilitySystemAttributesDebugCategory.Tags = FGameplayTagContainer{ UHLGameplayTags::TAG_UHL_DebugCategory_AbilitySystem_Attributes }; - AbilitySystemAttributesDebugCategory.Blocks.AddTag(UHLGameplayTags::TAG_UHL_DebugCategory_AbilitySystem); - AbilitySystemAttributesDebugCategory.Blocks.AddTag(UHLGameplayTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); + AbilitySystemAttributesDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem_Attributes }; + AbilitySystemAttributesDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem); + AbilitySystemAttributesDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); AbilitySystemAttributesDebugCategory.Components = { UDCC_AbilitySystem_Attributes::StaticClass() }; AbilitySystemAttributesDebugCategory.bIsDefaultUHLDebugCategory = true; DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilitySystemAttributesDebugCategory); FUHLDebugCategory AbilitySystemEffectsDebugCategory = {}; AbilitySystemEffectsDebugCategory.Name = "AbilitySystem Effects"; - AbilitySystemEffectsDebugCategory.Tags = FGameplayTagContainer{ UHLGameplayTags::TAG_UHL_DebugCategory_AbilitySystem_Effects }; - AbilitySystemEffectsDebugCategory.Blocks.AddTag(UHLGameplayTags::TAG_UHL_DebugCategory_AbilitySystem); - AbilitySystemEffectsDebugCategory.Blocks.AddTag(UHLGameplayTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); + AbilitySystemEffectsDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem_Effects }; + AbilitySystemEffectsDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem); + AbilitySystemEffectsDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); AbilitySystemEffectsDebugCategory.Components = { UDCC_AbilitySystem_Effects::StaticClass() }; AbilitySystemEffectsDebugCategory.bIsDefaultUHLDebugCategory = true; DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilitySystemEffectsDebugCategory); FUHLDebugCategory AbilitySystemAbilitiesDebugCategory = {}; AbilitySystemAbilitiesDebugCategory.Name = "AbilitySystem Abilities"; - AbilitySystemAbilitiesDebugCategory.Tags = FGameplayTagContainer{ UHLGameplayTags::TAG_UHL_DebugCategory_AbilitySystem_Abilities }; - AbilitySystemAbilitiesDebugCategory.Blocks.AddTag(UHLGameplayTags::TAG_UHL_DebugCategory_AbilitySystem); - AbilitySystemAbilitiesDebugCategory.Blocks.AddTag(UHLGameplayTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); + AbilitySystemAbilitiesDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem_Abilities }; + AbilitySystemAbilitiesDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem); + AbilitySystemAbilitiesDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); AbilitySystemAbilitiesDebugCategory.Components = { UDCC_AbilitySystem_Abilities::StaticClass() }; AbilitySystemAbilitiesDebugCategory.bIsDefaultUHLDebugCategory = true; DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilitySystemAbilitiesDebugCategory); FUHLDebugCategory EnhancedInputSystemDebugCategory = {}; EnhancedInputSystemDebugCategory.Name = "EnhancedInputSystem"; - EnhancedInputSystemDebugCategory.Tags = FGameplayTagContainer{ UHLGameplayTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem }; - EnhancedInputSystemDebugCategory.Blocks.AddTag(UHLGameplayTags::TAG_UHL_DebugCategory_AbilitySystem); + EnhancedInputSystemDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem }; + EnhancedInputSystemDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem); EnhancedInputSystemDebugCategory.Components = { UDCC_InputSystem_EnhancedInput::StaticClass() }; EnhancedInputSystemDebugCategory.bIsDefaultUHLDebugCategory = true; DEFAULT_UHL_DEBUG_CATEGORIES.Add(EnhancedInputSystemDebugCategory); FUHLDebugCategory AbilityInputCacheDebugCategory = {}; AbilityInputCacheDebugCategory.Name = "AbilityInputCache"; - AbilityInputCacheDebugCategory.Tags = FGameplayTagContainer{ UHLGameplayTags::TAG_UHL_DebugCategory_InputSystem_AbilityInputCache }; + AbilityInputCacheDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_AbilityInputCache }; AbilityInputCacheDebugCategory.bIsDefaultUHLDebugCategory = true; AbilityInputCacheDebugCategory.Components = { UDCC_AbilityInputCache::StaticClass() }; DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilityInputCacheDebugCategory); FUHLDebugCategory CollisionsDebugCategory = {}; CollisionsDebugCategory.Name = "Collisions"; - CollisionsDebugCategory.Tags = FGameplayTagContainer{ UHLGameplayTags::TAG_UHL_DebugCategory_Collisions }; + CollisionsDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_Collisions }; EnhancedInputSystemDebugCategory.Components = { UDCC_Collisions::StaticClass() }; CollisionsDebugCategory.bIsDefaultUHLDebugCategory = true; DEFAULT_UHL_DEBUG_CATEGORIES.Add(CollisionsDebugCategory); @@ -124,7 +124,7 @@ void UUHLDebugSystemSettings::PostInitProperties() for (const FUHLDebugCategory& DebugCategory : DebugCategories) { - if (DebugCategory.ByDefaultEnabledInBuildTypes.Contains(UUnrealHelperLibraryBPL::GetBuildType())) + if (DebugCategory.ByDefaultEnabledInBuildTypes.Contains(GetCurrentUHLBuildType())) { EnabledDebugCategories.Emplace(DebugCategory.Tags.First(), true); } diff --git a/Source/UHLDebugSystem/Private/UHLDebugSystem.cpp b/Source/UHLDebugSystem/Private/UHLDebugSystem.cpp index d484f6db..5664e47e 100644 --- a/Source/UHLDebugSystem/Private/UHLDebugSystem.cpp +++ b/Source/UHLDebugSystem/Private/UHLDebugSystem.cpp @@ -4,17 +4,13 @@ #include "Misc/Paths.h" #include "GameplayTagsManager.h" -#include "UHLConfigMigrationUtils.h" +#include "Misc/ConfigCacheIni.h" #include "Development/UHLDebugSystemSettings.h" #define LOCTEXT_NAMESPACE "FUHLDebugSystemModule" void FUHLDebugSystemModule::StartupModule() { - UGameplayTagsManager& TagsManager = UGameplayTagsManager::Get(); - // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module - TagsManager.AddTagIniSearchPath(FPaths::ProjectPluginsDir() / TEXT("UnrealHelperLibrary/Config/Tags")); - MigrateOldSettingsFromMainModule(); } @@ -26,13 +22,27 @@ void FUHLDebugSystemModule::ShutdownModule() void FUHLDebugSystemModule::MigrateOldSettingsFromMainModule() { - UHLConfigMigrationUtils::MigrateConfigSectionIfNeeded( - TEXT("/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings"), - TEXT("/Script/UHLDebugSystem.UHLDebugSystemSettings"), - TEXT("bMigrationFromOldSettingsDone"), - GGameIni, - GGameIni - ); + bool bMigrationDone = false; + GConfig->GetBool(TEXT("/Script/UHLDebugSystem.UHLDebugSystemSettings"), TEXT("bMigrationFromOldSettingsDone"), bMigrationDone, GGameIni); + if (!bMigrationDone) + { + // Copy all keys from old section if it exists + if (GConfig->DoesSectionExist(TEXT("/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings"), GGameIni)) + { + TArray Keys; + GConfig->GetSection(TEXT("/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings"), Keys, GGameIni); + for (const FString& KeyLine : Keys) + { + FString Key, Value; + if (KeyLine.Split(TEXT("="), &Key, &Value)) + { + GConfig->SetString(TEXT("/Script/UHLDebugSystem.UHLDebugSystemSettings"), *Key, *Value, GGameIni); + } + } + } + GConfig->SetBool(TEXT("/Script/UHLDebugSystem.UHLDebugSystemSettings"), TEXT("bMigrationFromOldSettingsDone"), true, GGameIni); + GConfig->Flush(false, GGameIni); + } UUHLDebugSystemSettings* Settings = GetMutableDefault(); if (Settings) diff --git a/Source/UHLDebugSystem/Private/UHLDebugSystemSubsystem.cpp b/Source/UHLDebugSystem/Private/UHLDebugSystemSubsystem.cpp index df82852b..76c02eaf 100644 --- a/Source/UHLDebugSystem/Private/UHLDebugSystemSubsystem.cpp +++ b/Source/UHLDebugSystem/Private/UHLDebugSystemSubsystem.cpp @@ -3,13 +3,13 @@ #include "UHLDebugSystemSubsystem.h" -#include "UnrealHelperLibrary.h" +#include "Logging/LogMacros.h" #include "GameFramework/Pawn.h" #include "GameFramework/Controller.h" #include "GameFramework/PlayerController.h" #include "Development/UHLDebugSystemSettings.h" -#include "UnrealHelperLibraryTypes.h" -#include "Utils/UnrealHelperLibraryBPL.h" +#include "UHLDebugSystemTypes.h" +#include "UHLDebugSystemBuildUtils.h" #if WITH_EDITOR #include "Framework/Notifications/NotificationManager.h" #include "Widgets/Notifications/SNotificationList.h" @@ -27,7 +27,7 @@ void UUHLDebugSystemSubsystem::Initialize(FSubsystemCollectionBase& Collection) if (bSetupped) return; bSetupped = true; - UE_LOG(LogUnrealHelperLibrary, Warning, TEXT("[UUHLDebugSubsystem::Initialize] Start")); + UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::Initialize] Start")); const UUHLDebugSystemSettings* DeveloperSettings = GetDefault(); DebugCategories = DeveloperSettings->DebugCategories; @@ -44,20 +44,20 @@ void UUHLDebugSystemSubsystem::Initialize(FSubsystemCollectionBase& Collection) } }; - EUHLBuildType BuildType = UUnrealHelperLibraryBPL::GetBuildType(); - if (BuildType != EUHLBuildType::Editor) +EUHLDebugSystemBuildType BuildType = GetCurrentUHLBuildType(); +if (BuildType != EUHLDebugSystemBuildType::Editor) { - UE_LOG(LogUnrealHelperLibrary, Warning, TEXT("[UUHLDebugSubsystem::Initialize] BuildType not editor so check DebugCategories that should be enabled")); + UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::Initialize] BuildType not editor so check DebugCategories that should be enabled")); for (const FUHLDebugCategory& DebugCategory : DebugCategories) { - UE_LOG(LogUnrealHelperLibrary, Warning, TEXT("[UUHLDebugSubsystem::Initialize] EnableDebugCategory %s"), *DebugCategory.Tags.First().ToString()); - if (DebugCategory.ByDefaultEnabledInBuildTypes.Contains(BuildType)) + UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::Initialize] EnableDebugCategory %s"), *DebugCategory.Tags.First().ToString()); + if (DebugCategory.ByDefaultEnabledInBuildTypes.Contains(BuildType)) { EnableDebugCategory(DebugCategory.Tags.First(), true); } } } - UE_LOG(LogUnrealHelperLibrary, Warning, TEXT("[UUHLDebugSubsystem::SetUp] Finish")); + UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUp] Finish")); FWorldDelegates::OnPostWorldInitialization.AddUObject(this, &ThisClass::OnPostWorldInit); FWorldDelegates::OnWorldBeginTearDown.AddUObject(this, &ThisClass::OnWorldBeginTearDown); @@ -113,7 +113,7 @@ void UUHLDebugSystemSubsystem::OnActorSpawned(AActor* SpawnedActor) void UUHLDebugSystemSubsystem::SetUpCategoriesThatRequiresPlayerController() { if (bSetUpCategoriesThatRequiresPlayerController) return; - UE_LOG(LogUnrealHelperLibrary, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] Start")); + UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] Start")); bSetUpCategoriesThatRequiresPlayerController = true; const UUHLDebugSystemSettings* DeveloperSettings = GetDefault(); @@ -131,22 +131,22 @@ void UUHLDebugSystemSubsystem::SetUpCategoriesThatRequiresPlayerController() }; // activate debug categories that "bSetUpCategoriesThatRequiresPlayerController" and should be enabled in BuildType - EUHLBuildType BuildType = UUnrealHelperLibraryBPL::GetBuildType(); - if (BuildType != EUHLBuildType::Editor) +EUHLDebugSystemBuildType BuildType = GetCurrentUHLBuildType(); +if (BuildType != EUHLDebugSystemBuildType::Editor) { - UE_LOG(LogUnrealHelperLibrary, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] BuildType not editor so check DebugCategories that should be enabled")); + UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] BuildType not editor so check DebugCategories that should be enabled")); for (const FUHLDebugCategory& DebugCategory : DebugCategories) { if (DebugCategory.ByDefaultEnabledInBuildTypes.Contains(BuildType)) { - UE_LOG(LogUnrealHelperLibrary, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] EnableDebugCategory %s"), *DebugCategory.Tags.First().ToString()); + UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] EnableDebugCategory %s"), *DebugCategory.Tags.First().ToString()); EnableDebugCategory(DebugCategory.Tags.First(), true); } } } bIsSetuping = false; - UE_LOG(LogUnrealHelperLibrary, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] Finish")); + UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] Finish")); } bool UUHLDebugSystemSubsystem::IsCategoryEnabled(const FGameplayTag DebugCategoryTag) const diff --git a/Source/UHLDebugSystem/Public/Core/UHLDebugSystemGameplayTags.h b/Source/UHLDebugSystem/Public/Core/UHLDebugSystemGameplayTags.h new file mode 100644 index 00000000..93bae22d --- /dev/null +++ b/Source/UHLDebugSystem/Public/Core/UHLDebugSystemGameplayTags.h @@ -0,0 +1,20 @@ +// Pavel Penkov 2025 All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "NativeGameplayTags.h" + +namespace UHLDebugSystemTags +{ + // Debug Categories + UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem); + UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Attributes); + UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Effects); + UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Abilities); + UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); + UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_InputSystem_AbilityInputCache); + UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_Collisions); +} + + diff --git a/Source/UHLDebugSystem/Public/UHLDebugCategory.h b/Source/UHLDebugSystem/Public/UHLDebugCategory.h index c66e2836..ebd5beb4 100644 --- a/Source/UHLDebugSystem/Public/UHLDebugCategory.h +++ b/Source/UHLDebugSystem/Public/UHLDebugCategory.h @@ -5,7 +5,7 @@ #include "CoreMinimal.h" #include "UHLDebugCategoryComponent.h" #include "GameplayTagContainer.h" -#include "UnrealHelperLibraryTypes.h" +#include "UHLDebugSystemTypes.h" #include "UHLDebugCategory.generated.h" @@ -64,7 +64,7 @@ struct FUHLDebugCategory // "Editor" will mean that its will be enabled in "EnabledDebugCategories" by default for all devs on EditorStartup // Others means that DebugCategory will be enabled on start UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory", AdvancedDisplay) - TArray ByDefaultEnabledInBuildTypes = {}; + TArray ByDefaultEnabledInBuildTypes = {}; bool TryEnable(UObject* ContextObj); void TryDisable(UObject* ContextObj); diff --git a/Source/UHLDebugSystem/Public/UHLDebugSystemBuildUtils.h b/Source/UHLDebugSystem/Public/UHLDebugSystemBuildUtils.h new file mode 100644 index 00000000..bd6bddcd --- /dev/null +++ b/Source/UHLDebugSystem/Public/UHLDebugSystemBuildUtils.h @@ -0,0 +1,27 @@ +// Pavel Penkov 2025 All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "UHLDebugSystemTypes.h" + +static FORCEINLINE EUHLDebugSystemBuildType GetCurrentUHLBuildType() +{ +#if WITH_EDITOR + return EUHLDebugSystemBuildType::Editor; +#else + #if UE_BUILD_DEBUG + return EUHLDebugSystemBuildType::Debug; + #elif UE_BUILD_DEVELOPMENT + return EUHLDebugSystemBuildType::Development; + #elif UE_BUILD_SHIPPING + return EUHLDebugSystemBuildType::Shipping; + #elif UE_BUILD_TEST + return EUHLDebugSystemBuildType::Test; + #else + return EUHLDebugSystemBuildType::Development; + #endif +#endif +} + + diff --git a/Source/UHLDebugSystem/Public/UHLDebugSystemTypes.h b/Source/UHLDebugSystem/Public/UHLDebugSystemTypes.h new file mode 100644 index 00000000..cc94f4f9 --- /dev/null +++ b/Source/UHLDebugSystem/Public/UHLDebugSystemTypes.h @@ -0,0 +1,22 @@ +// Pavel Penkov 2025 All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "UHLDebugSystemTypes.generated.h" + +// NOTE: Duplicated from UnrealHelperLibrary to decouple modules. +// Enum values and order must remain consistent for config compatibility. +UENUM(BlueprintType) +enum class EUHLDebugSystemBuildType: uint8 +{ + None UMETA(Hidden), + Editor UMETA(ToolTip="Are you in editor"), + + Debug, + Development, + Shipping, + Test, +}; + + diff --git a/Source/UHLDebugSystem/UHLDebugSystem.Build.cs b/Source/UHLDebugSystem/UHLDebugSystem.Build.cs index 97dfa81c..3979d93f 100644 --- a/Source/UHLDebugSystem/UHLDebugSystem.Build.cs +++ b/Source/UHLDebugSystem/UHLDebugSystem.Build.cs @@ -37,8 +37,6 @@ public UHLDebugSystem(ReadOnlyTargetRules Target) : base(Target) "GameplayTasks", "EnhancedInput", - // TODO remove if possible used only for DebugPrints and EUHLBuildType - "UnrealHelperLibrary", } ); @@ -53,8 +51,6 @@ public UHLDebugSystem(ReadOnlyTargetRules Target) : base(Target) "DeveloperSettings", // Should not use any other UHL modules - - "UHLModulesHelper", // ... add private dependencies that you statically link with here ... } ); From 2cf682ec496e93fef8672049b0eee070127db295 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Fri, 19 Sep 2025 22:00:40 +0300 Subject: [PATCH 03/21] remove UHLModulesHelper --- .../Private/UHLConfigMigrationUtils.cpp | 55 ------------------- .../Private/UHLModulesHelper.cpp | 23 -------- .../Public/UHLConfigMigrationUtils.h | 23 -------- .../Public/UHLModulesHelper.h | 14 ----- .../UHLModulesHelper.Build.cs | 50 ----------------- 5 files changed, 165 deletions(-) delete mode 100644 Source/UHLModulesHelper/Private/UHLConfigMigrationUtils.cpp delete mode 100644 Source/UHLModulesHelper/Private/UHLModulesHelper.cpp delete mode 100644 Source/UHLModulesHelper/Public/UHLConfigMigrationUtils.h delete mode 100644 Source/UHLModulesHelper/Public/UHLModulesHelper.h delete mode 100644 Source/UHLModulesHelper/UHLModulesHelper.Build.cs diff --git a/Source/UHLModulesHelper/Private/UHLConfigMigrationUtils.cpp b/Source/UHLModulesHelper/Private/UHLConfigMigrationUtils.cpp deleted file mode 100644 index 6770131a..00000000 --- a/Source/UHLModulesHelper/Private/UHLConfigMigrationUtils.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once - -#include "UHLConfigMigrationUtils.h" - -namespace UHLConfigMigrationUtils -{ - bool MigrateConfigSectionIfNeeded( - const FString& FromSection, const FString& ToSection, - const FString& MigrationKey, - const FString& FromConfigFile, const FString& ToConfigFile) - { - // Check if migration has already been done. - bool bMigrationDone = false; - GConfig->GetBool(*ToSection, *MigrationKey, bMigrationDone, ToConfigFile); - if (bMigrationDone) - { - UE_LOG(LogTemp, Log, TEXT("Migration already completed.")); - return false; - } - - // Retrieve all lines from the old section. - TArray SectionLines; - if (GConfig->GetSection(*FromSection, SectionLines, FromConfigFile)) - { - UE_LOG(LogTemp, Log, TEXT("Found %d lines in the old section."), SectionLines.Num()); - for (const FString& Line : SectionLines) - { - FString Key, Value; - // Split the line into Key and Value. - if (Line.Split(TEXT("="), &Key, &Value)) - { - Key = Key.TrimStartAndEnd(); - Value = Value.TrimStartAndEnd(); - UE_LOG(LogTemp, Log, TEXT("Migrating key: %s with value: %s"), *Key, *Value); - GConfig->AddToSection(*ToSection, *Key, *Value, ToConfigFile); - } - else - { - UE_LOG(LogTemp, Warning, TEXT("Failed to split line: %s"), *Line); - } - } - - // Mark the migration as done. - GConfig->SetBool(*ToSection, *MigrationKey, true, ToConfigFile); - // Flush all changes to disk. - GConfig->Flush(true, ToConfigFile); - } - else - { - UE_LOG(LogTemp, Warning, TEXT("Old settings section %s not found in %s"), *FromSection, *FromConfigFile); - } - - return true; - } -} diff --git a/Source/UHLModulesHelper/Private/UHLModulesHelper.cpp b/Source/UHLModulesHelper/Private/UHLModulesHelper.cpp deleted file mode 100644 index 773b5550..00000000 --- a/Source/UHLModulesHelper/Private/UHLModulesHelper.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLModulesHelper.h" - -#include "Misc/Paths.h" -#include "GameplayTagsManager.h" - -#define LOCTEXT_NAMESPACE "FUHLModulesHelperModule" - - -void FUHLModulesHelperModule::StartupModule() -{ -} - -void FUHLModulesHelperModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLModulesHelperModule, UHLModulesHelper) diff --git a/Source/UHLModulesHelper/Public/UHLConfigMigrationUtils.h b/Source/UHLModulesHelper/Public/UHLConfigMigrationUtils.h deleted file mode 100644 index 2db9e9ed..00000000 --- a/Source/UHLModulesHelper/Public/UHLConfigMigrationUtils.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -namespace UHLConfigMigrationUtils -{ - /** - * Utility to migrate all config keys from one section to another. - * WARNING migration will be done only when you change your settings - * - * @param FromSection config section from which your config will be migrated e.g. TEXT("/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings") - * @param ToSection config section to which your config will be migrated e.g. TEXT("/Script/UHLDebug.UHLDebugSubsystemSettings") - * @param MigrationKey property in your class that will be used as marker that migration completed, required to create UPROPERTY(config) for this - * @param FromConfigFile config file that will be used to get config section - * @param ToConfigFile config file that will be used to set config section - * @return bool if successfully migrated - */ - UHLMODULESHELPER_API bool MigrateConfigSectionIfNeeded( - const FString& FromSection, - const FString& ToSection, - const FString& MigrationKey, - const FString& FromConfigFile, - const FString& ToConfigFile - ); -} diff --git a/Source/UHLModulesHelper/Public/UHLModulesHelper.h b/Source/UHLModulesHelper/Public/UHLModulesHelper.h deleted file mode 100644 index 793a490a..00000000 --- a/Source/UHLModulesHelper/Public/UHLModulesHelper.h +++ /dev/null @@ -1,14 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Modules/ModuleManager.h" - - -class FUHLModulesHelperModule : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; diff --git a/Source/UHLModulesHelper/UHLModulesHelper.Build.cs b/Source/UHLModulesHelper/UHLModulesHelper.Build.cs deleted file mode 100644 index f97130c8..00000000 --- a/Source/UHLModulesHelper/UHLModulesHelper.Build.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class UHLModulesHelper : ModuleRules -{ - public UHLModulesHelper(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - // ... add other public dependencies that you statically link with here ... - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "CoreUObject", - "Engine", - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} From e2e8d453e241a37a942ec45710f473135c5a41bc Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 13:35:11 +0300 Subject: [PATCH 04/21] move modules to separate plugins --- Config/DefaultUnrealHelperLibrary.ini | 209 --- Config/FilterPlugin.ini | 11 - Config/Tags/UnrealHeaderLibraryTags.ini | 3 - Content/AI/BB_UHL_Base.uasset | Bin 9335 -> 0 bytes Content/AI/BP_UHL_TestBlueprint.uasset | Bin 25475 -> 0 bytes Content/AI/BT_UHL_AI_Nodes.uasset | Bin 57093 -> 0 bytes .../BT_UHL_CheckGASGameplayTagsOnActor.uasset | Bin 17471 -> 0 bytes .../BehaviorTrees/BT_UHL_GameplayFocus.uasset | Bin 15154 -> 0 bytes .../BT_UHL_GameplayFocus_Comparison.uasset | Bin 13280 -> 0 bytes .../AI/BehaviorTrees/BT_UHL_InAngle.uasset | Bin 16984 -> 0 bytes ..._InAngle_OverrideDebugLinesDistance.uasset | Bin 14635 -> 0 bytes ...e_OverrideDebugLinesDistance_Moving.uasset | Bin 23674 -> 0 bytes .../BT_UHL_InAngle_Vector.uasset | Bin 21151 -> 0 bytes .../AI/BehaviorTrees/BT_UHL_InRange.uasset | Bin 15886 -> 0 bytes .../BT_UHL_InRange_CapsuleToCapsule.uasset | Bin 14201 -> 0 bytes ...UHL_InRange_CapsuleToCapsule_Moving.uasset | Bin 22767 -> 0 bytes .../BT_UHL_InRange_Vector.uasset | Bin 26917 -> 0 bytes .../BT_UHL_InvokeGameplayAbility.uasset | Bin 16785 -> 0 bytes ...HL_InvokeGameplayAbility_StressTest.uasset | Bin 14554 -> 0 bytes .../BT_UHL_PlayAnimMontage.uasset | Bin 15879 -> 0 bytes .../BT_UHL_PlayAnimMontage_StressTest.uasset | Bin 12140 -> 0 bytes .../BehaviorTrees/BT_UHL_RandomChance.uasset | Bin 33544 -> 0 bytes .../BT_UHL_RandomChance_Scalable.uasset | Bin 29991 -> 0 bytes .../AI/BehaviorTrees/BT_UHL_RandomLoop.uasset | Bin 16971 -> 0 bytes .../BT_UHL_RandomSelector.uasset | Bin 19885 -> 0 bytes .../BT_UHL_RandomTimelimit.uasset | Bin 15634 -> 0 bytes .../AI/BehaviorTrees/BT_UHL_SetBBValue.uasset | Bin 72043 -> 0 bytes .../AI/Tasks/BTT_TeleportToStartPoint.uasset | Bin 5953 -> 0 bytes .../GA_UHL_InvokeGameplayAbility_Test1.uasset | Bin 33269 -> 0 bytes .../GA_UHL_InvokeGameplayAbility_Test2.uasset | Bin 35021 -> 0 bytes Content/BP_UHL_BlueprintNode.uasset | Bin 154342 -> 0 bytes .../Base/Animations/AM_TH_BS_Attack_1.uasset | Bin 9830 -> 0 bytes .../Base/Animations/AM_TH_BS_Attack_2.uasset | Bin 9383 -> 0 bytes .../Base/Animations/AS_TH_BS_Attack_1.uasset | Bin 3512285 -> 0 bytes .../Base/Animations/AS_TH_BS_Attack_2.uasset | Bin 3319766 -> 0 bytes .../Base/BP_UHL_BaseCharacter.uasset | Bin 30562 -> 0 bytes Content/Characters/Enemy/ABP_UHL_Enemy.uasset | Bin 47676 -> 0 bytes Content/Characters/Enemy/BP_UHL_Enemy.uasset | Bin 149989 -> 0 bytes .../Enemy/BP_UHL_Enemy_BlueprintsOnly.uasset | Bin 62150 -> 0 bytes .../Enemy/BP_UHL_Enemy_GameplayFocus.uasset | Bin 39938 -> 0 bytes .../Enemy/BP_UHL_Enemy_InAngle.uasset | Bin 2716 -> 0 bytes .../Enemy/BP_UHL_Enemy_Sight_360.uasset | Bin 40945 -> 0 bytes .../Characters/Enemy/M_GameplayFocus.uasset | Bin 13031 -> 0 bytes .../Player/AbilitySet_DefaultCharacter.uasset | Bin 1771 -> 0 bytes .../Characters/Player/AbilitySet_Test.uasset | Bin 1546 -> 0 bytes .../AbilitySet_UHL_DefaultCharacter.uasset | Bin 2612 -> 0 bytes .../Characters/Player/BP_UHL_Player.uasset | Bin 165885 -> 0 bytes .../Characters/Player/DA_AbilitySet.uasset | Bin 1685 -> 0 bytes .../Player/DA_AbilitySystem_UHL_Player.uasset | Bin 3106 -> 0 bytes Content/Core/GM_UnrealHelperLibrary.uasset | Bin 21509 -> 0 bytes Content/Core/PC_UnrealHelperLibrary.uasset | Bin 84112 -> 0 bytes Content/Data/CT_RandomChance_Scalable.uasset | Bin 2320 -> 0 bytes Content/Data/DT_Abilities.uasset | Bin 2379 -> 0 bytes Content/Gyms/Angles/BP_Dummy.uasset | Bin 30716 -> 0 bytes .../Angles/BP_GetPointAtRelativeAngle.uasset | Bin 76685 -> 0 bytes ...etPointAtRelativeAngleBetweenActors.uasset | Bin 49235 -> 0 bytes .../BP_GetPointAtRelativeDirection.uasset | Bin 98773 -> 0 bytes ...intAtRelativeDirectionBetweenActors.uasset | Bin 53247 -> 0 bytes .../Gyms/Angles/BP_GetRelativeAngle.uasset | Bin 2718 -> 0 bytes Content/Gyms/Angles/BP_RelativeAngle.uasset | Bin 56347 -> 0 bytes Content/Gyms/Angles/Gym_UHL_Angles.umap | Bin 1535 -> 0 bytes Content/Gyms/Gym_UHL_AI.umap | Bin 215706 -> 0 bytes Content/Gyms/Gym_UHL_Angles.umap | Bin 39147 -> 0 bytes Content/Gyms/Gym_UHL_GAS.umap | Bin 20875 -> 0 bytes .../Gyms/Gym_UHL_InvokeGameplayAbility.umap | Bin 255726 -> 0 bytes .../Gym_UHL_PlayAnimMontage_StressTest.umap | Bin 218626 -> 0 bytes Content/Input/Actions/IA_DebugMenu.uasset | Bin 1492 -> 0 bytes Content/Input/Actions/IA_Jump.uasset | Bin 1360 -> 0 bytes Content/Input/Actions/IA_LookMouse.uasset | Bin 2415 -> 0 bytes Content/Input/Actions/IA_LookStick.uasset | Bin 2136 -> 0 bytes Content/Input/Actions/IA_Move.uasset | Bin 1507 -> 0 bytes .../Configs/IMC_UHL_GamePad_Default.uasset | Bin 4926 -> 0 bytes .../Input/Configs/IMC_UHL_KBM_Default.uasset | Bin 8812 -> 0 bytes .../DCC_AbilitySystem_Default.uasset | Bin 27239 -> 0 bytes .../DebugSubsystem/DCC_ShowDebugReset.uasset | Bin 24419 -> 0 bytes .../ExampleTextures/DefaultMaterial_AO.uasset | Bin 14428 -> 0 bytes .../DefaultMaterial_metallic.uasset | Bin 16253 -> 0 bytes .../DefaultMaterial_roughness.uasset | Bin 16380 -> 0 bytes .../Tools/ConvertToORM/TG_ConvertToORM.uasset | Bin 17888 -> 0 bytes Content/Tools/EUW_UHL_Utils.uasset | Bin 134987 -> 0 bytes Content/UI/SB_DrawDebugBar_Test.uasset | Bin 7430 -> 0 bytes Content/UI/UI_DebugMenu.uasset | Bin 23328 -> 0 bytes Content/UI/UI_UHL_DebugWidget.uasset | Bin 28637 -> 0 bytes Content/UI/WBP_DrawDebugBar_Test.uasset | Bin 58993 -> 0 bytes LICENSE | 21 - Resources/Icon128.png | Bin 1003 -> 0 bytes Resources/PlaceholderButtonIcon.svg | 3 - Source/CommonMaps/CommonMaps.Build.cs | 32 - Source/CommonMaps/Private/CommonMaps.cpp | 301 ---- .../Private/CommonMapsDeveloperSettings.cpp | 4 - Source/CommonMaps/Public/CommonMaps.h | 19 - .../Public/CommonMapsDeveloperSettings.h | 58 - .../Components/UHLAIPerceptionComponent.cpp | 22 - .../Private/Composite/BTC_RandomSelector.cpp | 160 --- .../UHLAI/Private/Core/UHLAIActorSettings.cpp | 7 - .../UHLAI/Private/Core/UHLAIDebugSettings.cpp | 4 - .../Private/Core/UHLBlackboardValueType.cpp | 4 - .../UHLAI/Private/Core/UHLMathOperations.cpp | 211 --- Source/UHLAI/Private/Data/TurnSettings.cpp | 230 --- Source/UHLAI/Private/Decorators/BTD_Base.cpp | 151 -- .../BTD_CheckGASGameplayTagsOnActor.cpp | 120 -- .../Decorators/BTD_GameplayEffectCooldown.cpp | 118 -- .../UHLAI/Private/Decorators/BTD_InAngle.cpp | 180 --- .../UHLAI/Private/Decorators/BTD_InRange.cpp | 178 --- .../Decorators/BTD_LoopRandomCount.cpp | 24 - .../Private/Decorators/BTD_RandomChance.cpp | 157 --- .../Decorators/BTD_TimeLimitRandom.cpp | 121 -- .../Private/Services/BTS_GameplayFocus.cpp | 32 - Source/UHLAI/Private/Tasks/BTT_ClearFocus.cpp | 24 - .../Private/Tasks/BTT_DebugPrintBBValue.cpp | 132 -- .../Private/Tasks/BTT_DebugPrintString.cpp | 38 - .../Private/Tasks/BTT_FireGameplayEvent.cpp | 72 - .../Tasks/BTT_InvokeGameplayAbility.cpp | 186 --- .../Private/Tasks/BTT_PlayAnimMontage.cpp | 175 --- Source/UHLAI/Private/Tasks/BTT_SetBBValue.cpp | 266 ---- Source/UHLAI/Private/Tasks/BTT_TurnTo.cpp | 364 ----- Source/UHLAI/Private/UHLAI.cpp | 22 - .../UHLAI/Private/UHLAIBlueprintLibrary.cpp | 70 - Source/UHLAI/Private/UHLAIBlueprintLibrary.h | 36 - .../Private/UHLValueOrBBKey_GameplayTag.cpp | 82 -- .../Components/UHLAIPerceptionComponent.h | 24 - .../Public/Composite/BTC_RandomSelector.h | 65 - Source/UHLAI/Public/Core/UHLAIActorSettings.h | 31 - Source/UHLAI/Public/Core/UHLAIDebugSettings.h | 20 - .../Public/Core/UHLBlackboardValueType.h | 23 - Source/UHLAI/Public/Core/UHLMathOperations.h | 64 - Source/UHLAI/Public/Data/TurnSettings.h | 110 -- Source/UHLAI/Public/Decorators/BTD_Base.h | 61 - .../BTD_CheckGASGameplayTagsOnActor.h | 48 - .../Decorators/BTD_GameplayEffectCooldown.h | 51 - Source/UHLAI/Public/Decorators/BTD_InAngle.h | 79 -- Source/UHLAI/Public/Decorators/BTD_InRange.h | 67 - .../Public/Decorators/BTD_LoopRandomCount.h | 28 - .../Public/Decorators/BTD_RandomChance.h | 71 - .../Public/Decorators/BTD_TimeLimitRandom.h | 64 - .../UHLAI/Public/Services/BTS_GameplayFocus.h | 33 - Source/UHLAI/Public/Tasks/BTT_ClearFocus.h | 26 - .../Public/Tasks/BTT_DebugPrintBBValue.h | 35 - .../UHLAI/Public/Tasks/BTT_DebugPrintString.h | 42 - .../Public/Tasks/BTT_FireGameplayEvent.h | 52 - .../Public/Tasks/BTT_InvokeGameplayAbility.h | 64 - .../UHLAI/Public/Tasks/BTT_PlayAnimMontage.h | 96 -- Source/UHLAI/Public/Tasks/BTT_SetBBValue.h | 97 -- Source/UHLAI/Public/Tasks/BTT_TurnTo.h | 143 -- Source/UHLAI/Public/UHLAI.h | 14 - .../Public/UHLValueOrBBKey_GameplayTag.h | 47 - Source/UHLAI/UHLAI.Build.cs | 62 - Source/UHLAIEditor/Private/UHLAIEditor.cpp | 43 - .../UHLAIEditorValueOrBBKeyDetails.cpp | 54 - Source/UHLAIEditor/Public/UHLAIEditor.h | 18 - .../Public/UHLAIEditorValueOrBBKeyDetails.h | 23 - Source/UHLAIEditor/UHLAIEditor.Build.cs | 71 - .../UHLBaseCharacterAttributeSet.cpp | 51 - .../Private/Characters/UHLBaseCharacter.cpp | 24 - .../Characters/UHLBaseCharacterWithASC.cpp | 45 - .../UHLCharacterMovementComponent.cpp | 15 - .../Controllers/UHLPlayerController.cpp | 15 - Source/UHLCharacter/Private/UHLCharacter.cpp | 26 - .../UHLBaseCharacterAttributeSet.h | 37 - .../Public/Characters/UHLBaseCharacter.h | 31 - .../Characters/UHLBaseCharacterWithASC.h | 53 - .../UHLCharacterMovementComponent.h | 22 - .../Public/Controllers/UHLPlayerController.h | 19 - Source/UHLCharacter/Public/UHLCharacter.h | 14 - Source/UHLCharacter/UHLCharacter.Build.cs | 58 - Source/UHLDebug/Private/UHLDebug.cpp | 26 - .../Private/UHLDebugModuleSubsystem.cpp | 125 -- Source/UHLDebug/Private/UI/UHLDebugWidget.cpp | 41 - Source/UHLDebug/Public/UHLDebug.h | 14 - .../UHLDebug/Public/UHLDebugModuleSubsystem.h | 45 - Source/UHLDebug/Public/UI/UHLDebugWidget.h | 34 - Source/UHLDebug/UHLDebug.Build.cs | 65 - .../Private/AA_WaitDebugCategoryChange.cpp | 70 - .../Core/UHLDebugSystemGameplayTags.cpp | 17 - .../DebugCategories/DCC_AbilityInputCache.cpp | 30 - .../DCC_AbilitySystem_Abilities.cpp | 22 - .../DCC_AbilitySystem_Attributes.cpp | 22 - .../DCC_AbilitySystem_Effects.cpp | 22 - .../DebugCategories/DCC_Collisions.cpp | 21 - .../DCC_InputSystem_EnhancedInput.cpp | 21 - .../Private/DebugCategoryButtonWidget.cpp | 107 -- .../Development/UHLDebugSystemSettings.cpp | 256 ---- .../Private/UHLDebugBlueprintLibrary.cpp | 31 - .../Private/UHLDebugCategory.cpp | 75 - .../Private/UHLDebugCategoryComponent.cpp | 19 - .../UHLDebugSystem/Private/UHLDebugSystem.cpp | 57 - .../Private/UHLDebugSystemSubsystem.cpp | 284 ---- .../UI/UHLDebugCategoriesListWidget.cpp | 81 -- .../Public/AA_WaitDebugCategoryChange.h | 48 - .../Public/Core/UHLDebugSystemGameplayTags.h | 20 - .../DebugCategories/DCC_AbilityInputCache.h | 22 - .../DCC_AbilitySystem_Abilities.h | 20 - .../DCC_AbilitySystem_Attributes.h | 20 - .../DCC_AbilitySystem_Effects.h | 20 - .../Public/DebugCategories/DCC_Collisions.h | 20 - .../DCC_InputSystem_EnhancedInput.h | 20 - .../Public/DebugCategoryButtonWidget.h | 53 - .../Development/UHLDebugSystemSettings.h | 59 - .../Public/UHLDebugBlueprintLibrary.h | 21 - .../UHLDebugSystem/Public/UHLDebugCategory.h | 88 -- .../Public/UHLDebugCategoryComponent.h | 21 - Source/UHLDebugSystem/Public/UHLDebugSystem.h | 17 - .../Public/UHLDebugSystemBuildUtils.h | 27 - .../Public/UHLDebugSystemSubsystem.h | 72 - .../Public/UHLDebugSystemTypes.h | 22 - .../Public/UI/UHLDebugCategoriesListWidget.h | 32 - Source/UHLDebugSystem/UHLDebugSystem.Build.cs | 66 - .../Private/UHLDebugSystemEditor.cpp | 139 -- .../Public/UHLDebugSystemEditor.h | 17 - .../UHLDebugSystemEditor.Build.cs | 70 - .../Private/Development/UHLEditorSettings.cpp | 6 - Source/UHLEditor/Private/UHLEditor.cpp | 89 -- .../UHLEditorBlueprintThumbnailRenderer.cpp | 110 -- .../UHLEditor/Private/UHLEditorCommands.cpp | 12 - .../Private/UHLEditorCustomThumbnail.cpp | 13 - Source/UHLEditor/Private/UHLEditorStyle.cpp | 94 -- .../UI/EditorUtility/EUW_UHL_Utils.cpp | 6 - .../Public/Development/UHLEditorSettings.h | 35 - Source/UHLEditor/Public/UHLEditor.h | 29 - .../UHLEditorBlueprintThumbnailRenderer.h | 29 - Source/UHLEditor/Public/UHLEditorCommands.h | 23 - .../Public/UHLEditorCustomThumbnail.h | 31 - Source/UHLEditor/Public/UHLEditorStyle.h | 31 - .../Public/UI/EditorUtility/EUW_UHL_Utils.h | 17 - Source/UHLEditor/UHLEditor.Build.cs | 72 - .../Private/Abilities/UHLGameplayAbility.cpp | 276 ---- .../Notifies/ANS_ActivateAbility.cpp | 70 - .../Notifies/ANS_CatchToAbilityInputCache.cpp | 38 - .../Notifies/ANS_CheckAbilityInputCache.cpp | 77 - .../ANS_UHLGAS_GlobalTimeDilation.cpp | 28 - .../ANS_UHLGAS_TimedNiagaraEffect.cpp | 43 - .../Notifies/AN_FireGameplayEvent.cpp | 55 - .../Private/AttributeSets/UHLAttributeSet.cpp | 25 - .../Core/UHLAbilitySystemInterface.cpp | 5 - .../Data/PayloadWithInstancedStructs.cpp | 11 - .../Private/Development/UHLGASSettings.cpp | 6 - .../Private/Input/AbilityInputCache.cpp | 140 -- .../Private/Input/UHLInputComponent.cpp | 10 - .../UHLGAS/Private/Input/UHLInputConfig.cpp | 47 - .../Tasks/AA_TryActivateAbilityAndWait.cpp | 139 -- .../Tasks/AA_UHLGAS_WaitAbilityActivate.cpp | 114 -- .../Tasks/AA_WaitAbilityDeactivate.cpp | 105 -- .../AA_WaitAttributeChangeRatioThreshold.cpp | 148 -- .../Tasks/AT_InterpolateToPosition.cpp | 299 ---- Source/UHLGAS/Private/UHLAbilitySet.cpp | 181 --- .../Private/UHLAbilitySystemComponent.cpp | 527 ------- .../UHLGAS/Private/UHLAbilitySystemConfig.cpp | 14 - Source/UHLGAS/Private/UHLGAS.cpp | 27 - .../UHLGAS/Private/UHLGASBlueprintLibrary.cpp | 256 ---- .../Public/Abilities/UHLGameplayAbility.h | 197 --- .../Animations/Notifies/ANS_ActivateAbility.h | 50 - .../Notifies/ANS_CatchToAbilityInputCache.h | 34 - .../Notifies/ANS_CheckAbilityInputCache.h | 49 - .../Notifies/ANS_UHLGAS_GlobalTimeDilation.h | 23 - .../Notifies/ANS_UHLGAS_TimedNiagaraEffect.h | 34 - .../Notifies/AN_FireGameplayEvent.h | 51 - .../Public/AttributeSets/UHLAttributeSet.h | 54 - .../Public/Core/UHLAbilitySystemInterface.h | 28 - .../Public/Data/PayloadWithInstancedStructs.h | 20 - .../Public/Development/UHLGASSettings.h | 30 - .../UHLGAS/Public/Input/AbilityInputCache.h | 53 - .../UHLGAS/Public/Input/UHLInputComponent.h | 66 - Source/UHLGAS/Public/Input/UHLInputConfig.h | 86 -- .../Tasks/AA_TryActivateAbilityAndWait.h | 63 - .../Tasks/AA_UHLGAS_WaitAbilityActivate.h | 60 - .../Public/Tasks/AA_WaitAbilityDeactivate.h | 57 - .../AA_WaitAttributeChangeRatioThreshold.h | 62 - .../Public/Tasks/AT_InterpolateToPosition.h | 103 -- Source/UHLGAS/Public/UHLAbilitySet.h | 158 --- .../UHLGAS/Public/UHLAbilitySystemComponent.h | 160 --- Source/UHLGAS/Public/UHLAbilitySystemConfig.h | 85 -- Source/UHLGAS/Public/UHLGAS.h | 15 - Source/UHLGAS/Public/UHLGASBlueprintLibrary.h | 91 -- Source/UHLGAS/UHLGAS.Build.cs | 61 - .../Notifies/ANS_ChangeCapsuleBase.cpp | 325 ----- .../Notifies/ANS_ChangeCharacterCapsule.cpp | 27 - .../Notifies/ANS_ChangeNamedCapsule.cpp | 33 - .../Notifies/ANS_ChangeRotationRate.cpp | 76 - .../ANS_EnableRootMotionZAxisMovement.cpp | 121 -- .../Animation/Notifies/ANS_MagnetTo.cpp | 40 - .../ANS_SpawnAndSwitchPlayerCamera.cpp | 123 -- .../ANS_UHL_AllowCharacterRotation.cpp | 70 - .../Animation/Notifies/ANS_UHL_Base.cpp | 64 - .../Notifies/ANS_UHL_DisableWalkOffLedges.cpp | 49 - .../Notifies/AN_AttachActorWithUniqueId.cpp | 62 - .../Notifies/AN_DetachActorWithUniqueId.cpp | 88 -- .../Animation/Notifies/AN_UHL_Base.cpp | 14 - .../Private/Core/UHLGameplayTags.cpp | 31 - .../Private/Development/UHLSettings.cpp | 6 - .../EnemyTickOptimizerSubsystem.cpp | 117 -- .../UnrealHelperLibrary/Private/UI/UHLHUD.cpp | 49 - .../Private/UnrealHelperLibrary.cpp | 97 -- .../Private/Utils/UHLLoadingUtilLibrary.cpp | 104 -- .../Private/Utils/UHLTraceUtilsBPL.cpp | 178 --- .../Private/Utils/UnrealHelperLibraryBPL.cpp | 1241 ----------------- .../Notifies/ANS_ChangeCapsuleBase.h | 214 --- .../Notifies/ANS_ChangeCharacterCapsule.h | 20 - .../Notifies/ANS_ChangeNamedCapsule.h | 25 - .../Notifies/ANS_ChangeRotationRate.h | 51 - .../ANS_EnableRootMotionZAxisMovement.h | 57 - .../Public/Animation/Notifies/ANS_MagnetTo.h | 56 - .../Notifies/ANS_SpawnAndSwitchPlayerCamera.h | 92 -- .../Notifies/ANS_UHL_AllowCharacterRotation.h | 48 - .../Public/Animation/Notifies/ANS_UHL_Base.h | 38 - .../Notifies/ANS_UHL_DisableWalkOffLedges.h | 30 - .../Notifies/AN_AttachActorWithUniqueId.h | 61 - .../Notifies/AN_DetachActorWithUniqueId.h | 62 - .../Public/Animation/Notifies/AN_UHL_Base.h | 20 - .../Public/Core/UHLAttachmentRules.h | 56 - .../Public/Core/UHLGameplayTags.h | 32 - .../Public/Development/UHLSettings.h | 26 - .../EnemyTickOptimizerSubsystem.h | 88 -- Source/UnrealHelperLibrary/Public/UI/UHLHUD.h | 51 - .../Public/UnrealHelperLibrary.h | 15 - .../Public/UnrealHelperLibraryTypes.h | 55 - .../Public/Utils/UHLLoadingUtilLibrary.h | 46 - .../Public/Utils/UHLTraceUtilsBPL.h | 54 - .../Public/Utils/UnrealHelperLibraryBPL.h | 354 ----- .../UnrealHelperLibrary.Build.cs | 62 - UnrealHelperLibrary.uplugin | 130 -- 320 files changed, 17948 deletions(-) delete mode 100644 Config/DefaultUnrealHelperLibrary.ini delete mode 100644 Config/FilterPlugin.ini delete mode 100644 Config/Tags/UnrealHeaderLibraryTags.ini delete mode 100644 Content/AI/BB_UHL_Base.uasset delete mode 100644 Content/AI/BP_UHL_TestBlueprint.uasset delete mode 100644 Content/AI/BT_UHL_AI_Nodes.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_CheckGASGameplayTagsOnActor.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_GameplayFocus.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_GameplayFocus_Comparison.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InAngle.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InAngle_OverrideDebugLinesDistance.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InAngle_OverrideDebugLinesDistance_Moving.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InAngle_Vector.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InRange.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InRange_CapsuleToCapsule.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InRange_CapsuleToCapsule_Moving.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InRange_Vector.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InvokeGameplayAbility.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_InvokeGameplayAbility_StressTest.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_PlayAnimMontage.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_PlayAnimMontage_StressTest.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_RandomChance.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_RandomChance_Scalable.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_RandomLoop.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_RandomSelector.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_RandomTimelimit.uasset delete mode 100644 Content/AI/BehaviorTrees/BT_UHL_SetBBValue.uasset delete mode 100644 Content/AI/Tasks/BTT_TeleportToStartPoint.uasset delete mode 100644 Content/AbilitySystem/Abilities/GA_UHL_InvokeGameplayAbility_Test1.uasset delete mode 100644 Content/AbilitySystem/Abilities/GA_UHL_InvokeGameplayAbility_Test2.uasset delete mode 100644 Content/BP_UHL_BlueprintNode.uasset delete mode 100644 Content/Characters/Base/Animations/AM_TH_BS_Attack_1.uasset delete mode 100644 Content/Characters/Base/Animations/AM_TH_BS_Attack_2.uasset delete mode 100644 Content/Characters/Base/Animations/AS_TH_BS_Attack_1.uasset delete mode 100644 Content/Characters/Base/Animations/AS_TH_BS_Attack_2.uasset delete mode 100644 Content/Characters/Base/BP_UHL_BaseCharacter.uasset delete mode 100644 Content/Characters/Enemy/ABP_UHL_Enemy.uasset delete mode 100644 Content/Characters/Enemy/BP_UHL_Enemy.uasset delete mode 100644 Content/Characters/Enemy/BP_UHL_Enemy_BlueprintsOnly.uasset delete mode 100644 Content/Characters/Enemy/BP_UHL_Enemy_GameplayFocus.uasset delete mode 100644 Content/Characters/Enemy/BP_UHL_Enemy_InAngle.uasset delete mode 100644 Content/Characters/Enemy/BP_UHL_Enemy_Sight_360.uasset delete mode 100644 Content/Characters/Enemy/M_GameplayFocus.uasset delete mode 100644 Content/Characters/Player/AbilitySet_DefaultCharacter.uasset delete mode 100644 Content/Characters/Player/AbilitySet_Test.uasset delete mode 100644 Content/Characters/Player/AbilitySet_UHL_DefaultCharacter.uasset delete mode 100644 Content/Characters/Player/BP_UHL_Player.uasset delete mode 100644 Content/Characters/Player/DA_AbilitySet.uasset delete mode 100644 Content/Characters/Player/DA_AbilitySystem_UHL_Player.uasset delete mode 100644 Content/Core/GM_UnrealHelperLibrary.uasset delete mode 100644 Content/Core/PC_UnrealHelperLibrary.uasset delete mode 100644 Content/Data/CT_RandomChance_Scalable.uasset delete mode 100644 Content/Data/DT_Abilities.uasset delete mode 100644 Content/Gyms/Angles/BP_Dummy.uasset delete mode 100644 Content/Gyms/Angles/BP_GetPointAtRelativeAngle.uasset delete mode 100644 Content/Gyms/Angles/BP_GetPointAtRelativeAngleBetweenActors.uasset delete mode 100644 Content/Gyms/Angles/BP_GetPointAtRelativeDirection.uasset delete mode 100644 Content/Gyms/Angles/BP_GetPointAtRelativeDirectionBetweenActors.uasset delete mode 100644 Content/Gyms/Angles/BP_GetRelativeAngle.uasset delete mode 100644 Content/Gyms/Angles/BP_RelativeAngle.uasset delete mode 100644 Content/Gyms/Angles/Gym_UHL_Angles.umap delete mode 100644 Content/Gyms/Gym_UHL_AI.umap delete mode 100644 Content/Gyms/Gym_UHL_Angles.umap delete mode 100644 Content/Gyms/Gym_UHL_GAS.umap delete mode 100644 Content/Gyms/Gym_UHL_InvokeGameplayAbility.umap delete mode 100644 Content/Gyms/Gym_UHL_PlayAnimMontage_StressTest.umap delete mode 100644 Content/Input/Actions/IA_DebugMenu.uasset delete mode 100644 Content/Input/Actions/IA_Jump.uasset delete mode 100644 Content/Input/Actions/IA_LookMouse.uasset delete mode 100644 Content/Input/Actions/IA_LookStick.uasset delete mode 100644 Content/Input/Actions/IA_Move.uasset delete mode 100644 Content/Input/Configs/IMC_UHL_GamePad_Default.uasset delete mode 100644 Content/Input/Configs/IMC_UHL_KBM_Default.uasset delete mode 100644 Content/Subsystems/DebugSubsystem/DCC_AbilitySystem_Default.uasset delete mode 100644 Content/Subsystems/DebugSubsystem/DCC_ShowDebugReset.uasset delete mode 100644 Content/Tools/ConvertToORM/ExampleTextures/DefaultMaterial_AO.uasset delete mode 100644 Content/Tools/ConvertToORM/ExampleTextures/DefaultMaterial_metallic.uasset delete mode 100644 Content/Tools/ConvertToORM/ExampleTextures/DefaultMaterial_roughness.uasset delete mode 100644 Content/Tools/ConvertToORM/TG_ConvertToORM.uasset delete mode 100644 Content/Tools/EUW_UHL_Utils.uasset delete mode 100644 Content/UI/SB_DrawDebugBar_Test.uasset delete mode 100644 Content/UI/UI_DebugMenu.uasset delete mode 100644 Content/UI/UI_UHL_DebugWidget.uasset delete mode 100644 Content/UI/WBP_DrawDebugBar_Test.uasset delete mode 100644 LICENSE delete mode 100644 Resources/Icon128.png delete mode 100644 Resources/PlaceholderButtonIcon.svg delete mode 100644 Source/CommonMaps/CommonMaps.Build.cs delete mode 100644 Source/CommonMaps/Private/CommonMaps.cpp delete mode 100644 Source/CommonMaps/Private/CommonMapsDeveloperSettings.cpp delete mode 100644 Source/CommonMaps/Public/CommonMaps.h delete mode 100644 Source/CommonMaps/Public/CommonMapsDeveloperSettings.h delete mode 100644 Source/UHLAI/Private/Components/UHLAIPerceptionComponent.cpp delete mode 100644 Source/UHLAI/Private/Composite/BTC_RandomSelector.cpp delete mode 100644 Source/UHLAI/Private/Core/UHLAIActorSettings.cpp delete mode 100644 Source/UHLAI/Private/Core/UHLAIDebugSettings.cpp delete mode 100644 Source/UHLAI/Private/Core/UHLBlackboardValueType.cpp delete mode 100644 Source/UHLAI/Private/Core/UHLMathOperations.cpp delete mode 100644 Source/UHLAI/Private/Data/TurnSettings.cpp delete mode 100644 Source/UHLAI/Private/Decorators/BTD_Base.cpp delete mode 100644 Source/UHLAI/Private/Decorators/BTD_CheckGASGameplayTagsOnActor.cpp delete mode 100644 Source/UHLAI/Private/Decorators/BTD_GameplayEffectCooldown.cpp delete mode 100644 Source/UHLAI/Private/Decorators/BTD_InAngle.cpp delete mode 100644 Source/UHLAI/Private/Decorators/BTD_InRange.cpp delete mode 100644 Source/UHLAI/Private/Decorators/BTD_LoopRandomCount.cpp delete mode 100644 Source/UHLAI/Private/Decorators/BTD_RandomChance.cpp delete mode 100644 Source/UHLAI/Private/Decorators/BTD_TimeLimitRandom.cpp delete mode 100644 Source/UHLAI/Private/Services/BTS_GameplayFocus.cpp delete mode 100644 Source/UHLAI/Private/Tasks/BTT_ClearFocus.cpp delete mode 100644 Source/UHLAI/Private/Tasks/BTT_DebugPrintBBValue.cpp delete mode 100644 Source/UHLAI/Private/Tasks/BTT_DebugPrintString.cpp delete mode 100644 Source/UHLAI/Private/Tasks/BTT_FireGameplayEvent.cpp delete mode 100644 Source/UHLAI/Private/Tasks/BTT_InvokeGameplayAbility.cpp delete mode 100644 Source/UHLAI/Private/Tasks/BTT_PlayAnimMontage.cpp delete mode 100644 Source/UHLAI/Private/Tasks/BTT_SetBBValue.cpp delete mode 100644 Source/UHLAI/Private/Tasks/BTT_TurnTo.cpp delete mode 100644 Source/UHLAI/Private/UHLAI.cpp delete mode 100644 Source/UHLAI/Private/UHLAIBlueprintLibrary.cpp delete mode 100644 Source/UHLAI/Private/UHLAIBlueprintLibrary.h delete mode 100644 Source/UHLAI/Private/UHLValueOrBBKey_GameplayTag.cpp delete mode 100644 Source/UHLAI/Public/Components/UHLAIPerceptionComponent.h delete mode 100644 Source/UHLAI/Public/Composite/BTC_RandomSelector.h delete mode 100644 Source/UHLAI/Public/Core/UHLAIActorSettings.h delete mode 100644 Source/UHLAI/Public/Core/UHLAIDebugSettings.h delete mode 100644 Source/UHLAI/Public/Core/UHLBlackboardValueType.h delete mode 100644 Source/UHLAI/Public/Core/UHLMathOperations.h delete mode 100644 Source/UHLAI/Public/Data/TurnSettings.h delete mode 100644 Source/UHLAI/Public/Decorators/BTD_Base.h delete mode 100644 Source/UHLAI/Public/Decorators/BTD_CheckGASGameplayTagsOnActor.h delete mode 100644 Source/UHLAI/Public/Decorators/BTD_GameplayEffectCooldown.h delete mode 100644 Source/UHLAI/Public/Decorators/BTD_InAngle.h delete mode 100644 Source/UHLAI/Public/Decorators/BTD_InRange.h delete mode 100644 Source/UHLAI/Public/Decorators/BTD_LoopRandomCount.h delete mode 100644 Source/UHLAI/Public/Decorators/BTD_RandomChance.h delete mode 100644 Source/UHLAI/Public/Decorators/BTD_TimeLimitRandom.h delete mode 100644 Source/UHLAI/Public/Services/BTS_GameplayFocus.h delete mode 100644 Source/UHLAI/Public/Tasks/BTT_ClearFocus.h delete mode 100644 Source/UHLAI/Public/Tasks/BTT_DebugPrintBBValue.h delete mode 100644 Source/UHLAI/Public/Tasks/BTT_DebugPrintString.h delete mode 100644 Source/UHLAI/Public/Tasks/BTT_FireGameplayEvent.h delete mode 100644 Source/UHLAI/Public/Tasks/BTT_InvokeGameplayAbility.h delete mode 100644 Source/UHLAI/Public/Tasks/BTT_PlayAnimMontage.h delete mode 100644 Source/UHLAI/Public/Tasks/BTT_SetBBValue.h delete mode 100644 Source/UHLAI/Public/Tasks/BTT_TurnTo.h delete mode 100644 Source/UHLAI/Public/UHLAI.h delete mode 100644 Source/UHLAI/Public/UHLValueOrBBKey_GameplayTag.h delete mode 100644 Source/UHLAI/UHLAI.Build.cs delete mode 100644 Source/UHLAIEditor/Private/UHLAIEditor.cpp delete mode 100644 Source/UHLAIEditor/Private/UHLAIEditorValueOrBBKeyDetails.cpp delete mode 100644 Source/UHLAIEditor/Public/UHLAIEditor.h delete mode 100644 Source/UHLAIEditor/Public/UHLAIEditorValueOrBBKeyDetails.h delete mode 100644 Source/UHLAIEditor/UHLAIEditor.Build.cs delete mode 100644 Source/UHLCharacter/Private/AttributeSets/UHLBaseCharacterAttributeSet.cpp delete mode 100644 Source/UHLCharacter/Private/Characters/UHLBaseCharacter.cpp delete mode 100644 Source/UHLCharacter/Private/Characters/UHLBaseCharacterWithASC.cpp delete mode 100644 Source/UHLCharacter/Private/Components/UHLCharacterMovementComponent.cpp delete mode 100644 Source/UHLCharacter/Private/Controllers/UHLPlayerController.cpp delete mode 100644 Source/UHLCharacter/Private/UHLCharacter.cpp delete mode 100644 Source/UHLCharacter/Public/AttributeSets/UHLBaseCharacterAttributeSet.h delete mode 100644 Source/UHLCharacter/Public/Characters/UHLBaseCharacter.h delete mode 100644 Source/UHLCharacter/Public/Characters/UHLBaseCharacterWithASC.h delete mode 100644 Source/UHLCharacter/Public/Components/UHLCharacterMovementComponent.h delete mode 100644 Source/UHLCharacter/Public/Controllers/UHLPlayerController.h delete mode 100644 Source/UHLCharacter/Public/UHLCharacter.h delete mode 100644 Source/UHLCharacter/UHLCharacter.Build.cs delete mode 100644 Source/UHLDebug/Private/UHLDebug.cpp delete mode 100644 Source/UHLDebug/Private/UHLDebugModuleSubsystem.cpp delete mode 100644 Source/UHLDebug/Private/UI/UHLDebugWidget.cpp delete mode 100644 Source/UHLDebug/Public/UHLDebug.h delete mode 100644 Source/UHLDebug/Public/UHLDebugModuleSubsystem.h delete mode 100644 Source/UHLDebug/Public/UI/UHLDebugWidget.h delete mode 100644 Source/UHLDebug/UHLDebug.Build.cs delete mode 100644 Source/UHLDebugSystem/Private/AA_WaitDebugCategoryChange.cpp delete mode 100644 Source/UHLDebugSystem/Private/Core/UHLDebugSystemGameplayTags.cpp delete mode 100644 Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilityInputCache.cpp delete mode 100644 Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Abilities.cpp delete mode 100644 Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Attributes.cpp delete mode 100644 Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Effects.cpp delete mode 100644 Source/UHLDebugSystem/Private/DebugCategories/DCC_Collisions.cpp delete mode 100644 Source/UHLDebugSystem/Private/DebugCategories/DCC_InputSystem_EnhancedInput.cpp delete mode 100644 Source/UHLDebugSystem/Private/DebugCategoryButtonWidget.cpp delete mode 100644 Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp delete mode 100644 Source/UHLDebugSystem/Private/UHLDebugBlueprintLibrary.cpp delete mode 100644 Source/UHLDebugSystem/Private/UHLDebugCategory.cpp delete mode 100644 Source/UHLDebugSystem/Private/UHLDebugCategoryComponent.cpp delete mode 100644 Source/UHLDebugSystem/Private/UHLDebugSystem.cpp delete mode 100644 Source/UHLDebugSystem/Private/UHLDebugSystemSubsystem.cpp delete mode 100644 Source/UHLDebugSystem/Private/UI/UHLDebugCategoriesListWidget.cpp delete mode 100644 Source/UHLDebugSystem/Public/AA_WaitDebugCategoryChange.h delete mode 100644 Source/UHLDebugSystem/Public/Core/UHLDebugSystemGameplayTags.h delete mode 100644 Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilityInputCache.h delete mode 100644 Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Abilities.h delete mode 100644 Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Attributes.h delete mode 100644 Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Effects.h delete mode 100644 Source/UHLDebugSystem/Public/DebugCategories/DCC_Collisions.h delete mode 100644 Source/UHLDebugSystem/Public/DebugCategories/DCC_InputSystem_EnhancedInput.h delete mode 100644 Source/UHLDebugSystem/Public/DebugCategoryButtonWidget.h delete mode 100644 Source/UHLDebugSystem/Public/Development/UHLDebugSystemSettings.h delete mode 100644 Source/UHLDebugSystem/Public/UHLDebugBlueprintLibrary.h delete mode 100644 Source/UHLDebugSystem/Public/UHLDebugCategory.h delete mode 100644 Source/UHLDebugSystem/Public/UHLDebugCategoryComponent.h delete mode 100644 Source/UHLDebugSystem/Public/UHLDebugSystem.h delete mode 100644 Source/UHLDebugSystem/Public/UHLDebugSystemBuildUtils.h delete mode 100644 Source/UHLDebugSystem/Public/UHLDebugSystemSubsystem.h delete mode 100644 Source/UHLDebugSystem/Public/UHLDebugSystemTypes.h delete mode 100644 Source/UHLDebugSystem/Public/UI/UHLDebugCategoriesListWidget.h delete mode 100644 Source/UHLDebugSystem/UHLDebugSystem.Build.cs delete mode 100644 Source/UHLDebugSystemEditor/Private/UHLDebugSystemEditor.cpp delete mode 100644 Source/UHLDebugSystemEditor/Public/UHLDebugSystemEditor.h delete mode 100644 Source/UHLDebugSystemEditor/UHLDebugSystemEditor.Build.cs delete mode 100644 Source/UHLEditor/Private/Development/UHLEditorSettings.cpp delete mode 100644 Source/UHLEditor/Private/UHLEditor.cpp delete mode 100644 Source/UHLEditor/Private/UHLEditorBlueprintThumbnailRenderer.cpp delete mode 100644 Source/UHLEditor/Private/UHLEditorCommands.cpp delete mode 100644 Source/UHLEditor/Private/UHLEditorCustomThumbnail.cpp delete mode 100644 Source/UHLEditor/Private/UHLEditorStyle.cpp delete mode 100644 Source/UHLEditor/Private/UI/EditorUtility/EUW_UHL_Utils.cpp delete mode 100644 Source/UHLEditor/Public/Development/UHLEditorSettings.h delete mode 100644 Source/UHLEditor/Public/UHLEditor.h delete mode 100644 Source/UHLEditor/Public/UHLEditorBlueprintThumbnailRenderer.h delete mode 100644 Source/UHLEditor/Public/UHLEditorCommands.h delete mode 100644 Source/UHLEditor/Public/UHLEditorCustomThumbnail.h delete mode 100644 Source/UHLEditor/Public/UHLEditorStyle.h delete mode 100644 Source/UHLEditor/Public/UI/EditorUtility/EUW_UHL_Utils.h delete mode 100644 Source/UHLEditor/UHLEditor.Build.cs delete mode 100644 Source/UHLGAS/Private/Abilities/UHLGameplayAbility.cpp delete mode 100644 Source/UHLGAS/Private/Animations/Notifies/ANS_ActivateAbility.cpp delete mode 100644 Source/UHLGAS/Private/Animations/Notifies/ANS_CatchToAbilityInputCache.cpp delete mode 100644 Source/UHLGAS/Private/Animations/Notifies/ANS_CheckAbilityInputCache.cpp delete mode 100644 Source/UHLGAS/Private/Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.cpp delete mode 100644 Source/UHLGAS/Private/Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.cpp delete mode 100644 Source/UHLGAS/Private/Animations/Notifies/AN_FireGameplayEvent.cpp delete mode 100644 Source/UHLGAS/Private/AttributeSets/UHLAttributeSet.cpp delete mode 100644 Source/UHLGAS/Private/Core/UHLAbilitySystemInterface.cpp delete mode 100644 Source/UHLGAS/Private/Data/PayloadWithInstancedStructs.cpp delete mode 100644 Source/UHLGAS/Private/Development/UHLGASSettings.cpp delete mode 100644 Source/UHLGAS/Private/Input/AbilityInputCache.cpp delete mode 100644 Source/UHLGAS/Private/Input/UHLInputComponent.cpp delete mode 100644 Source/UHLGAS/Private/Input/UHLInputConfig.cpp delete mode 100644 Source/UHLGAS/Private/Tasks/AA_TryActivateAbilityAndWait.cpp delete mode 100644 Source/UHLGAS/Private/Tasks/AA_UHLGAS_WaitAbilityActivate.cpp delete mode 100644 Source/UHLGAS/Private/Tasks/AA_WaitAbilityDeactivate.cpp delete mode 100644 Source/UHLGAS/Private/Tasks/AA_WaitAttributeChangeRatioThreshold.cpp delete mode 100644 Source/UHLGAS/Private/Tasks/AT_InterpolateToPosition.cpp delete mode 100644 Source/UHLGAS/Private/UHLAbilitySet.cpp delete mode 100644 Source/UHLGAS/Private/UHLAbilitySystemComponent.cpp delete mode 100644 Source/UHLGAS/Private/UHLAbilitySystemConfig.cpp delete mode 100644 Source/UHLGAS/Private/UHLGAS.cpp delete mode 100644 Source/UHLGAS/Private/UHLGASBlueprintLibrary.cpp delete mode 100644 Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h delete mode 100644 Source/UHLGAS/Public/Animations/Notifies/ANS_ActivateAbility.h delete mode 100644 Source/UHLGAS/Public/Animations/Notifies/ANS_CatchToAbilityInputCache.h delete mode 100644 Source/UHLGAS/Public/Animations/Notifies/ANS_CheckAbilityInputCache.h delete mode 100644 Source/UHLGAS/Public/Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.h delete mode 100644 Source/UHLGAS/Public/Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.h delete mode 100644 Source/UHLGAS/Public/Animations/Notifies/AN_FireGameplayEvent.h delete mode 100644 Source/UHLGAS/Public/AttributeSets/UHLAttributeSet.h delete mode 100644 Source/UHLGAS/Public/Core/UHLAbilitySystemInterface.h delete mode 100644 Source/UHLGAS/Public/Data/PayloadWithInstancedStructs.h delete mode 100644 Source/UHLGAS/Public/Development/UHLGASSettings.h delete mode 100644 Source/UHLGAS/Public/Input/AbilityInputCache.h delete mode 100644 Source/UHLGAS/Public/Input/UHLInputComponent.h delete mode 100644 Source/UHLGAS/Public/Input/UHLInputConfig.h delete mode 100644 Source/UHLGAS/Public/Tasks/AA_TryActivateAbilityAndWait.h delete mode 100644 Source/UHLGAS/Public/Tasks/AA_UHLGAS_WaitAbilityActivate.h delete mode 100644 Source/UHLGAS/Public/Tasks/AA_WaitAbilityDeactivate.h delete mode 100644 Source/UHLGAS/Public/Tasks/AA_WaitAttributeChangeRatioThreshold.h delete mode 100644 Source/UHLGAS/Public/Tasks/AT_InterpolateToPosition.h delete mode 100644 Source/UHLGAS/Public/UHLAbilitySet.h delete mode 100644 Source/UHLGAS/Public/UHLAbilitySystemComponent.h delete mode 100644 Source/UHLGAS/Public/UHLAbilitySystemConfig.h delete mode 100644 Source/UHLGAS/Public/UHLGAS.h delete mode 100644 Source/UHLGAS/Public/UHLGASBlueprintLibrary.h delete mode 100644 Source/UHLGAS/UHLGAS.Build.cs delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeCapsuleBase.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeCharacterCapsule.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeNamedCapsule.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeRotationRate.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_EnableRootMotionZAxisMovement.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_MagnetTo.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_AllowCharacterRotation.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_Base.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_DisableWalkOffLedges.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_AttachActorWithUniqueId.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_DetachActorWithUniqueId.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_UHL_Base.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Core/UHLGameplayTags.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Development/UHLSettings.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/UI/UHLHUD.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/UnrealHelperLibrary.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Utils/UHLLoadingUtilLibrary.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Utils/UHLTraceUtilsBPL.cpp delete mode 100644 Source/UnrealHelperLibrary/Private/Utils/UnrealHelperLibraryBPL.cpp delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeCapsuleBase.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeCharacterCapsule.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeNamedCapsule.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeRotationRate.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_EnableRootMotionZAxisMovement.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_MagnetTo.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_AllowCharacterRotation.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_Base.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_DisableWalkOffLedges.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_AttachActorWithUniqueId.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_DetachActorWithUniqueId.h delete mode 100644 Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_UHL_Base.h delete mode 100644 Source/UnrealHelperLibrary/Public/Core/UHLAttachmentRules.h delete mode 100644 Source/UnrealHelperLibrary/Public/Core/UHLGameplayTags.h delete mode 100644 Source/UnrealHelperLibrary/Public/Development/UHLSettings.h delete mode 100644 Source/UnrealHelperLibrary/Public/Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.h delete mode 100644 Source/UnrealHelperLibrary/Public/UI/UHLHUD.h delete mode 100644 Source/UnrealHelperLibrary/Public/UnrealHelperLibrary.h delete mode 100644 Source/UnrealHelperLibrary/Public/UnrealHelperLibraryTypes.h delete mode 100644 Source/UnrealHelperLibrary/Public/Utils/UHLLoadingUtilLibrary.h delete mode 100644 Source/UnrealHelperLibrary/Public/Utils/UHLTraceUtilsBPL.h delete mode 100644 Source/UnrealHelperLibrary/Public/Utils/UnrealHelperLibraryBPL.h delete mode 100644 Source/UnrealHelperLibrary/UnrealHelperLibrary.Build.cs delete mode 100644 UnrealHelperLibrary.uplugin diff --git a/Config/DefaultUnrealHelperLibrary.ini b/Config/DefaultUnrealHelperLibrary.ini deleted file mode 100644 index 1a1f1e2b..00000000 --- a/Config/DefaultUnrealHelperLibrary.ini +++ /dev/null @@ -1,209 +0,0 @@ -[CoreRedirects] -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPLibrary",NewName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_RotateTo",NewName="/Script/UnrealHelperLibrary.BTT_TurnTo") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.TurnToSettings",NewName="/Script/UnrealHelperLibrary.TurnSettings") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.TurnSettings.TurnToRanges",NewName="/Script/UnrealHelperLibrary.TurnSettings.TurnRangesGroups") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.TurnToRanges",NewName="/Script/UnrealHelperLibrary.TurnRanges") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.TurnToRange",NewName="/Script/UnrealHelperLibrary.TurnRange") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.TurnRanges.Ranges",NewName="/Script/UnrealHelperLibrary.TurnRanges.TurnRanges") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.TurnSettings.TurnRanges",NewName="/Script/UnrealHelperLibrary.TurnSettings.TurnRangesGroups") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.TurnSettings.TurnGroups",NewName="/Script/UnrealHelperLibrary.TurnSettings.TurnRangesGroups") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.TurnToAnimationsDataAsset.TurnToSettings",NewName="/Script/UnrealHelperLibrary.TurnSettingsDataAsset.TurnSettings") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.TurnToAnimationsDataAsset.TurnToSettings",NewName="/Script/UnrealHelperLibrary.TurnSettingsDataAsset.TurnSettings") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.TurnToAnimationsDataAsset.SetupPreset_90_180",NewName="/Script/UnrealHelperLibrary.TurnSettingsDataAsset.SetupPreset_Recommended_90_180") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_TurnTo.SetupPreset_90_180",NewName="/Script/UnrealHelperLibrary.BTT_TurnTo.SetupPreset_Recommended_90_180") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_TurnTo.SetupPreset_Recommended_90_180",NewName="/Script/UnrealHelperLibrary.BTT_TurnTo.SetupPreset_Default_90_180") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BInputComponent",NewName="/Script/UnrealHelperLibrary.UHLInputComponent") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.BInputAction",NewName="/Script/UnrealHelperLibrary.UHLInputAction") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.BInputActionAbilities",NewName="/Script/UnrealHelperLibrary.UHLInputActionAbilities") -+EnumRedirects=(OldName="/Script/UnrealHelperLibrary.EBAbilityActivationPolicy",NewName="/Script/UnrealHelperLibrary.EUHLAbilityActivationPolicy") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.TurnToAnimationsDataAsset",NewName="/Script/UnrealHelperLibrary.TurnSettingsDataAsset") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.GetHighestPoint",NewName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.GetHighestPointInBox") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.GetPointAtRelativeAngleBetweenActors",NewName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.GetPointAtAngleRelativeToOtherActor") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.GetPointAtRelativeDirectionBetweenActors",NewName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.GetPointAtDirectionRelativeToOtherActor") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.OtherActorInAngle",NewName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.IsOtherActorInAngle") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.OtherCharacterInRange",NewName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.IsOtherCharacterInRange") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLGameplayAbility.CacheInputActivationRequiredTags",NewName="/Script/UnrealHelperLibrary.UHLGameplayAbility.AddingToCacheInputRequiredTags") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLGameplayAbility.CacheInputActivationBlockedTags",NewName="/Script/UnrealHelperLibrary.UHLGameplayAbility.AddingToCacheInputBlockedTags") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugCategory.Tag",NewName="/Script/UnrealHelperLibrary.UHLDebugCategory.Tags") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHL_DDC_AbilitySystem_Attributes",NewName="/Script/UnrealHelperLibrary.DCC_AbilitySystem_Attributes") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.DebugCategoryCheckboxWidget",NewName="/Script/UnrealHelperLibrary.DebugCategoryButtonWidget") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugCategory.bForceDeactivateOnGameStart",NewName="/Script/UnrealHelperLibrary.UHLDebugCategory.bForceComponentsDeactivateOnEnd") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugCategory.bForceDeactivateOnEnd",NewName="/Script/UnrealHelperLibrary.UHLDebugCategory.bForceComponentsDeactivateOnEnd") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings.GameplayTagTableList",NewName="/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings.DebugCategoriesGameplayTagsTableList") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings.bExcludeUHLDebugCategories",NewName="/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings.bExcludeDefaultUHLDebugCategories") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugCategory.ByDefaultEnabledIn",NewName="/Script/UnrealHelperLibrary.UHLDebugCategory.ByDefaultEnabledInBuildTypes") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.InitialActiveAbilities",NewName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.ActiveAbilitiesOnStart") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.GiveAbilitiesOnStart",NewName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.Abilities") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.GiveAttributeSetsOnStart",NewName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.AttributeSets") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.InitialGameplayAttributes",NewName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.InitialAttributes") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.bUseUHLAbilitySystemConfig",NewName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.bUseAbilitySystemConfig") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.UHLAbilitySystemConfig",NewName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent.AbilitySystemConfig") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.ANS_UnrealHelperLibrary",NewName="/Script/UnrealHelperLibrary.ANS_UHL_Base") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.EnemyTickManagerSubsystem",NewName="/Script/UnrealHelperLibrary.EnemyTickOptimizerSubsystem") - -; Split on modules BEGIN -; UHLCharacter -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLBaseCharacter",NewName="/Script/UHLCharacter.UHLBaseCharacter") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLBaseCharacterWithASC",NewName="/Script/UHLCharacter.UHLBaseCharacterWithASC") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLPlayerController",NewName="/Script/UHLCharacter.UHLPlayerController") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLCharacter",NewName="/Script/UHLCharacter.UHLCharacter") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLBaseCharacterAttributeSet",NewName="/Script/UHLCharacter.UHLBaseCharacterAttributeSet") - -; UHLDebug -; TODO протестить было /Script/UnrealHelperLibrary/UHLDebugSubsystemSettings почему-то -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings",NewName="/Script/UHLDebugSystem.UHLDebugSystemSettings") -;+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugSubsystem",NewName="/Script/UHLDebug.UHLDebugSubsystem") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugSubsystem",NewName="/Script/UHLDebugSystem.UHLDebugSystemSubsystem") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugCategory",NewName="/Script/UHLDebugSystem.UHLDebugCategory") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugCategoryComponent",NewName="/Script/UHLDebugSystem.UHLDebugCategoryComponent") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.AA_WaitDebugCategoryChange",NewName="/Script/UHLDebugSystem.AA_WaitDebugCategoryChange") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.DCC_AbilitySystem_Abilities",NewName="/Script/UHLDebugSystem.DCC_AbilitySystem_Abilities") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.DCC_AbilitySystem_Attributes",NewName="/Script/UHLDebugSystem.DCC_AbilitySystem_Attributes") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.DCC_AbilitySystem_Effects",NewName="/Script/UHLDebugSystem.DCC_AbilitySystem_Effects") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.DCC_Collisions",NewName="/Script/UHLDebugSystem.DCC_Collisions") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.DCC_InputSystem_EnhancedInput",NewName="/Script/UHLDebugSystem.DCC_InputSystem_EnhancedInput") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugCategoriesListWidget",NewName="/Script/UHLDebugSystem.UHLDebugCategoriesListWidget") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLDebugWidget",NewName="/Script/UHLDebug.UHLDebugWidget") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.IsUHLDebugCategoryEnabled",NewName="/Script/UHLDebugSystem.UHLDebugBlueprintLibrary.IsUHLDebugCategoryEnabled") -+PropertyRedirects=(OldName="/Script/UHLDebugSystem.UHLDebugCategory.ShortName",NewName="/Script/UHLDebugSystem.UHLDebugCategory.Name") - -; UHLAI -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAIPerceptionComponent",NewName="/Script/UHLAI.UHLAIPerceptionComponent") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTC_RandomSelector",NewName="/Script/UHLAI.BTC_RandomSelector") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.TurnRange",NewName="/Script/UHLAI.TurnRange") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.TurnRanges",NewName="/Script/UHLAI.TurnRanges") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.TurnSettings",NewName="/Script/UHLAI.TurnSettings") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.TurnSettingsDataAsset",NewName="/Script/UHLAI.TurnSettingsDataAsset") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLActorSettings",NewName="/Script/UHLAI.UHLAIActorSettings") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTD_Base",NewName="/Script/UHLAI.BTD_Base") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTD_CheckGASGameplayTagsOnActor",NewName="/Script/UHLAI.BTD_CheckGASGameplayTagsOnActor") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTD_InAngle",NewName="/Script/UHLAI.BTD_InAngle") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.AngleRange",NewName="/Script/UHLAI.AngleRange") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTD_InRange",NewName="/Script/UHLAI.BTD_InRange") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTD_LoopRandomCount",NewName="/Script/UHLAI.BTD_LoopRandomCount") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTD_RandomChance",NewName="/Script/UHLAI.BTD_RandomChance") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTD_TimeLimitRandom",NewName="/Script/UHLAI.BTD_TimeLimitRandom") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTS_GameplayFocus",NewName="/Script/UHLAI.BTS_GameplayFocus") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_ClearFocus",NewName="/Script/UHLAI.BTT_ClearFocus") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_DebugPrintBBValue",NewName="/Script/UHLAI.BTT_DebugPrintBBValue") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_DebugPrintString",NewName="/Script/UHLAI.BTT_DebugPrintString") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_FireGameplayEvent",NewName="/Script/UHLAI.BTT_FireGameplayEvent") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_InvokeGameplayAbility",NewName="/Script/UHLAI.BTT_InvokeGameplayAbility") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_PlayAnimMontage",NewName="/Script/UHLAI.BTT_PlayAnimMontage") -+EnumRedirects=(OldName="/Script/UnrealHelperLibrary.ETaskNodeEndPolicy",NewName="/Script/UHLAI.ETaskNodeEndPolicy") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_SetBBValue",NewName="/Script/UHLAI.BTT_SetBBValue") -+EnumRedirects=(OldName="/Script/UnrealHelperLibrary.ESetBBValue_MathOperations",NewName="/Script/UHLAI.EUHL_MathOperations") - - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.BTT_TurnTo",NewName="/Script/UHLAI.BTT_TurnTo") - -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.ValueOrBBKey_GameplayTag",NewName="/Script/UHLAI.UHLValueOrBBKey_GameplayTag") - - -; UHL GAS -;+EnumRedirects=(OldName="/Script/UnrealHelperLibrary.",NewName="/Script/UHLGAS.") -;+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.",NewName="/Script/UHLGAS.") -;+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.",NewName="/Script/UHLGAS.") -;+StructRedirects=(OldName="/Script/UnrealHelperLibrary.",NewName="/Script/UHLGAS.") -;+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.") - -+EnumRedirects=(OldName="/Script/UnrealHelperLibrary.EUHLAbilityActivationPolicy",NewName="/Script/UHLGAS.EUHLAbilityActivationPolicy") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLGameplayAbility",NewName="/Script/UHLGAS.UHLGameplayAbility") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.AN_FireGameplayEvent",NewName="/Script/UHLGAS.AN_FireGameplayEvent") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.ANS_ActivateAbility",NewName="/Script/UHLGAS.ANS_ActivateAbility") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.ANS_CatchToAbilityInputCache",NewName="/Script/UHLGAS.ANS_CatchToAbilityInputCache") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.ANS_CheckAbilityInputCache",NewName="/Script/UHLGAS.ANS_CheckAbilityInputCache") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.ANS_GlobalTimeDilation",NewName="/Script/UHLGAS.ANS_UHLGAS_GlobalTimeDilation") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAttributeSet",NewName="/Script/UHLGAS.UHLAttributeSet") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemInterface",NewName="/Script/UHLGAS.UHLAbilitySystemInterface") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.AbilityInputCachePayload",NewName="/Script/UHLGAS.AbilityInputCachePayload") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.AbilityInputCache",NewName="/Script/UHLGAS.AbilityInputCache") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLInputComponent",NewName="/Script/UHLGAS.UHLInputComponent") - -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.UHLInputAction",NewName="/Script/UHLGAS.UHLInputAction") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.UHLInputActionAbilities",NewName="/Script/UHLGAS.UHLInputActionAbilities") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLInputConfig",NewName="/Script/UHLGAS.UHLInputConfig") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.AA_WaitAbilityActivate",NewName="/Script/UHLGAS.AA_WaitAbilityActivate") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.AA_WaitAbilityActivate.WaitForAbilityActivate",NewName="/Script/UHLGAS.AA_WaitAbilityActivate.WaitForAbilityActivate") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.AA_WaitAbilityActivate.WaitAbilityActivate",NewName="/Script/UHLGAS.AA_WaitAbilityActivate.WaitForAbilityActivate") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.AT_InterpolateToPosition",NewName="/Script/UHLGAS.AT_InterpolateToPosition") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.AT_InterpolateToPosition.InterpolateToPosition",NewName="/Script/UHLGAS.AT_InterpolateToPosition.InterpolateToPosition") - -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.FUHLAbilitySet_GameplayAbility",NewName="/Script/UHLGAS.FUHLAbilitySet_GameplayAbility") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.FUHLAbilitySet_GameplayEffect",NewName="/Script/UHLGAS.FUHLAbilitySet_GameplayEffect") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.FUHLAbilitySet_AttributeSet",NewName="/Script/UHLGAS.FUHLAbilitySet_AttributeSet") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.FUHLAbilitySet_GrantedHandles",NewName="/Script/UHLGAS.FUHLAbilitySet_GrantedHandles") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySet",NewName="/Script/UHLGAS.UHLAbilitySet") - -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemComponent",NewName="/Script/UHLGAS.UHLAbilitySystemComponent") - -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.FUHLAbilitySystemSettings",NewName="/Script/UHLGAS.FUHLAbilitySystemSettings") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.UHLAbilitySystemConfig",NewName="/Script/UHLGAS.UHLAbilitySystemConfig") - -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLSettings.AbilitySystemConfigDefaults",NewName="/Script/UHLGAS.UHLGASSettings.AbilitySystemConfigDefaults") -+PropertyRedirects=(OldName="/Script/UnrealHelperLibrary.UHLSettings.bUseAbilitySystemConfigDefaultsInASC",NewName="/Script/UHLGAS.UHLGASSettings.bUseAbilitySystemConfigDefaultsInASC") - -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.GetUHLAbilitySystemComponent",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.GetUHLAbilitySystemComponent") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.CreateGenericGASGameplayEffectSpec",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.CreateGenericGASGameplayEffectSpec") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.UpdateStateGameplayTags",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.UpdateStateGameplayTags") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.IsAbilityActiveByTag",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.IsAbilityActiveByTag") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.TryActivateAbilityWithTag",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.TryActivateAbilityWithTag") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.TryCancelAbilityWithTag",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.TryCancelAbilityWithTag") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.ToggleAbilityWithTag",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.ToggleAbilityWithTag") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.TryCancelAbilitiesWithTags",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.TryCancelAbilitiesWithTags") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.FireGameplayEvent",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.FireGameplayEvent") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.FindTagByString",NewName="/Script/UHLGAS.UHLGASBlueprintLibrary.FindTagByString") - -; UHLEditor -+ClassRedirects=(OldName="/Script/UnrealHelperEditor.UHESettings",NewName="/Script/UHLEditor.UHLEditorSettings") -+ClassRedirects=(OldName="/Script/UnrealHelperEditor.UHEBlueprintThumbnailRenderer",NewName="/Script/UHLEditor.UHLEditorBlueprintThumbnailRenderer") -+StructRedirects=(OldName="/Script/UnrealHelperEditor.UHECustomClassIconDescription",NewName="/Script/UHLEditor.UHLEditorCustomClassIconDescription") -+StructRedirects=(OldName="/Script/UnrealHelperLibrary.UHECustomClassIcon",NewName="/Script/UHLEditor.UHLEditorCustomClassIconDescription") -+StructRedirects=(OldName="/Script/UnrealHelperEditor.UnrealHelperEditorCommands",NewName="/Script/UHLEditor.UHLEditorCommands") -+StructRedirects=(OldName="/Script/UnrealHelperEditor.UnrealHelperEditorStyle",NewName="/Script/UHLEditor.UHLEditorStyle") - -+ClassRedirects=(OldName="/Script/UnrealHelperEditor.EUW_UHL_Utils",NewName="/Script/UHLEditor.EUW_UHL_Utils") -+ClassRedirects=(OldName="/Script/UnrealHelperEditor.UHECustomThumbnail",NewName="/Script/UHLEditor.UHLEditorCustomThumbnail") -+ClassRedirects=(OldName="/Script/UHLEditor.UHLBlueprintThumbnailRenderer",NewName="/Script/UHLEditor.UHLEditorBlueprintThumbnailRenderer") -+EnumRedirects=(OldName="/Script/UHLAI.ESetBBValue_MathOperations",NewName="/Script/UHLAI.EUHL_MathOperations") - -+EnumRedirects=(OldName="/Script/UHLAI.EBBValueType",NewName="/Script/UHLAI.EBlackboardValueType") -+StructRedirects=(OldName="/Script/UHLAI.MathOperation",NewName="/Script/UHLAI.OperationOnBBValue") -+StructRedirects=(OldName="/Script/UHLAI.BBKeyOperation",NewName="/Script/UHLAI.OperationOnBBValue") - -+PropertyRedirects=(OldName="/Script/CommonMaps.CommonMapCategory.AutoSearchMapsInFolder",NewName="/Script/CommonMaps.CommonMapCategory.SearchFolder") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.AN_AttachWithUniqueId",NewName="/Script/UnrealHelperLibrary.AN_AttachActorWithUniqueId") -+FunctionRedirects=(OldName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.IsOtherCharacterInRange",NewName="/Script/UnrealHelperLibrary.UnrealHelperLibraryBPL.InRangeToOtherCharacter") -+StructRedirects=(OldName="/Script/UHLAI.ValueOrBBKey_GameplayTag",NewName="/Script/UHLAI.UHLValueOrBBKey_GameplayTag") -+PropertyRedirects=(OldName="/Script/UHLGAS.UHLGameplayAbility.AddingToCacheInputRequiredTags",NewName="/Script/UHLGAS.UHLGameplayAbility.AddToCacheRequiredTags") -+PropertyRedirects=(OldName="/Script/UHLGAS.UHLGameplayAbility.AddingToCacheInputBlockedTags",NewName="/Script/UHLGAS.UHLGameplayAbility.AddToCacheBlockedTags") -+ClassRedirects=(OldName="/Script/UnrealHelperLibrary.ANS_SpawnAndSwitchCamera",NewName="/Script/UnrealHelperLibrary.ANS_SpawnAndSwitchPlayerCamera") -+ClassRedirects=(OldName="/Script/UHLGAS.ANS_GlobalTimeDilation",NewName="/Script/UHLGAS.ANS_UHLGAS_GlobalTimeDilation") -+ClassRedirects=(OldName="/Script/UHLGAS.AA_WaitAbilityActivate",NewName="/Script/UHLGAS.AA_UHLGAS_WaitAbilityActivate") \ No newline at end of file diff --git a/Config/FilterPlugin.ini b/Config/FilterPlugin.ini deleted file mode 100644 index 9c78e117..00000000 --- a/Config/FilterPlugin.ini +++ /dev/null @@ -1,11 +0,0 @@ -[FilterPlugin] -; This section lists additional files which will be packaged along with your plugin. Paths should be listed relative to the root plugin directory, and -; may include "...", "*", and "?" wildcards to match directories, files, and individual characters respectively. -; -; Examples: -; /README.txt -; /Extras/... -; /Binaries/ThirdParty/*.dll - -/README.md -/Config/... \ No newline at end of file diff --git a/Config/Tags/UnrealHeaderLibraryTags.ini b/Config/Tags/UnrealHeaderLibraryTags.ini deleted file mode 100644 index d1a4237b..00000000 --- a/Config/Tags/UnrealHeaderLibraryTags.ini +++ /dev/null @@ -1,3 +0,0 @@ -[/Script/GameplayTags.GameplayTagsList] -GameplayTagList=(Tag="UHL.Debug.InvokeGameplayAbility_Test1",DevComment="") -GameplayTagList=(Tag="UHL.Debug.InvokeGameplayAbility_Test2",DevComment="") diff --git a/Content/AI/BB_UHL_Base.uasset b/Content/AI/BB_UHL_Base.uasset deleted file mode 100644 index 12b2cc33a3c5db060bc2bb5d5f43f4e8bf23898c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9335 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 diff --git a/Content/AI/BehaviorTrees/BT_UHL_GameplayFocus.uasset b/Content/AI/BehaviorTrees/BT_UHL_GameplayFocus.uasset deleted file mode 100644 index d4d43baeec4e28f2359dddb815372b83114572c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15154 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 diff --git a/Content/AI/BehaviorTrees/BT_UHL_GameplayFocus_Comparison.uasset b/Content/AI/BehaviorTrees/BT_UHL_GameplayFocus_Comparison.uasset deleted file mode 100644 index 781e1d824c18a30ca4db043ae2c6452106aed295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13280 zcmd5@3wRXO6~18b2?Zjrio!wzf-%LyKSmMJe@x4=mOSs1Okmr02hTXEM7xlT0jpdUW^BoO|wh z-*X>XcFewI+1ZO1FW!3vW7oE1te#rHmGqhU?t`A^ojJ#jkIq=v=P#RIsU}>{ck`FL zlGA&w`>GyK9GJC9>QA`O5)Rk3$@zWv%@6HgzbfOx;A;stTs^;kMoL}sM;#U{3^;D; z+>3CodlnydXKjmFyFPkOP3Mx21`_T>S>0z}xSpuL?!8-AIk&iD`w(t_7slMw#ufPd zvg92pdn;srrl-g+`D@~w>2WT(OseuI{(QeI2jX1$g#{xs3)7@>xxy>exRv6{Kw+{{ zULpBC0mVmr7`ul)U$tP2{%6tGG1h}xcVeO|#p#Ssxy^lRO7frtSBh&$;-L7{#MI=3 zA81gdQHoiw`AwksVVO+o%i9w zWB+(@VAkW4vi@0Gan~UT1|KNWibc_Xz258AGMe7{^(#mn)NhRJm8F0@U{Gu#?`LdW z;@KAF{WOTf#I3#G#DjMJ<&d}G6-sAF${hkVyJelT~D$3Xk?<5^< zAA-+PN-DiF`{#RVG?dl`BrAToAgAa)xmaaq(+Awy*3g&go9yw)?BNl=OTToXo0fHh zn;g%ae!osKfZ)Ebsvchqw|VT;lO1p$w5GHIKvRQgoe&*tweUJ4UkUa5FWks|p^ zoPmI>vYEHn_W`2@{3yAGJy5=HbEj}@9z~*9Rs3vUVEV7ypjT16y6kpQb&pa?5VF!& z5_DhHf8@X3K&YZTRjJ7F|W5DQ~bNMJ`tS5~-J|O!gGB(^t;!do>>s)aAsa6>&Gwdr?qwNs3(I zmy1b<5@CTy4zNcy{#}I?MSy|sklt0aRHtq9-2R|&3Vd+NOM(m#n{%w z)eElC(0Rdl9~$)*|0W}oqlf-<^c zITZnxw}0R+cv(jVSgRXH?}H0cUHNXWQtd2K{3-=rW+!{+Or!}J(UFuykt}6XKK;{8 zNS4$R@@7d26^C-!r>6T#6}F|Y-4C24?+WI1uB4W+ea_`GQ2$bWa(NAVc+Z<}A$Lfu zr0V|qVa<^X0&7ramA~{=*vF%hR_Q5Wt7h%3f_#q2CWVuAXN*lez80qQuCcN|0B`p^ z-!-NckQkhtd#()iIGwz!EPuE)e{9fU^})dzn4g(aKn=Aoz*=`}c>pdnOpcPfpNxXa zS(RSZQ{k1NO@J+%-o690Ks0pgW}Uh^1HlCe*W|7BQO|QKLZtfws^lw{$+jg=YE(R! z&wujz4H_a>35;j2O{{HcK-|Ur?h`Ux8wBqyCE5+91zFAhg-;eE+5Y zMgd)^vd>$+n_z8+q?kq=TVTGOMy}|LkILIYbJ-ET= zSFKqI#(A>8%2Q0L+@~`!YAmmE2`Q`~-g`|~LTFXqxVj>%s1$zLV%8fmAhBAIU3>|4(F(>AN5p&u zlUxSe5Ld^$c=;6zw*%_1Wq*#FhnzABWSx&}e+b$bk$M^6hO<)dp@hDTlE58>`Y85! zrJBh1ABKH{-m6c{!eB{#{l26pPza3*1m#XR{qnO8vmP$4A=ZzkdEMdqHAvCvbPd?h zqg7+988^^9F#ncA;l62LjO1orMtyWmH%lEwnzBwiFLbwN#B28ruhkwv7B;MyynydH z`^I(H2N{;ALVd+N_}|oOlww!Du5)3-c(!q4{gz<2(1Su$Dp4`wTQ;_Bd8_ZRj=J)p zKw*|rC8v03^-{ex`ARh{<;?x)LO+TJFQH7Wp1J^))x@FIX{pnY<5{vQakW32v1uXJ zNl`dhAg#6|rm1+>>6Z3?Rz|S_ATSi-xw-9PSeBNuo;^ z&rQ)4*rXe4lWv?%y74yXPLLfLHt9y$q|3BPmt~VK+a_I(O}bp0bfaz3jj>6WXM^rI z#baV4bdy9M8ZCFt^3O<@YLlOq<4y6yp#Wf{`;qhxVuRn>jKdl>LMVzuj1_=HvxiuP z@G_1WCWyW_&|p!VAc#;I9ud!NQGzT$lZEca`B5PoZrcNOtK4MP{?y(uQzfS&YX0e0oJ zZbTl$K;AfU5A;3ueHLI>-XcL*A7&qFFT_CJ$MgZ@_6fFT-*)947K2ZR$wLiCIf1+n z1Wi14Y8GHu-aBIasW5q13%~>N$^^64w+LdB#;&|MV(d3z^2QJzyBDKe8Bdx@1+CL^fl z3PLk^+I;9LXx@p77_KAi%Iho$&l_|C3VS(Co>pJJir3jkJlK_|)t4W_bn@E=(Twmf(T-9TYT+j2i-h(;B<-_KN{u8RP+Vx4^?jmw3K!pm?AL z{EadidKzEfakS6?^9^erT3ltIo8;L(qF9F@TjKEX)?{h-I`1URi9 zW3Vs6{-G^>jAOtX z+lO}rqk>1U94>Hp#>Eo=&+w!M%kcoDw$m{Vx7^bc!7-Qyq6rMEqz9%8+Ae3 zP1V=T{5EOCifiYrh@ZNypQZwY!0`a2+QIkNJXqhdg>%J%nInh4k{)G-OXSqSuZw69 zTC^=(_$DxN4`Rf(Wk(2A=u42bz#$iuf&ZF4V4XYtv0Yt17{0pAVsya<%?`YWKyyMo z3?t1#j9V*_AVE_ugZ#e2$?!~J3-*le$Sd7yG*)Pv8sH+KKA%a*-!Uoi8ESs^gP^(OCW5K^r4eVUQGM#)>t zju5KQmylv*Ry;x8Xuk8Mgoq;Qeoq<(3jw%OGD5o;@fI-(I@n%mTNANyyEj5`MY;i? zxN(W*`wAej!^(rAAdG|?!RZhusUj4r5Vn;&|QApFgun$w}0fJaSJmZJ9c>R=jX#cJbQeG{UiKsBlk{#5f=Q5@tzT(!<$=(ntxO!`i{pa$0R~Y>jo0o0~nYo_e6- zrnQO)Jn7ClvKaQ;1kW+hVYl-!x z4*k!^N!MB(*OD9~rGP{7)i_i-!#O-Y2mO8{$i^Ye0S-Q2!!w~rY)w=B8e zQ*#HRGqmNg7h2@F(&nZ6uRJr<|DmQI zOw zKtx$Wh@0BR@iPNP^J53KRytzG1PIqrXP`yY_FgcWxW#gwp(`Hu7Akn2QZ73rRi&RZ zI(+ywY_gz^uoOxSw(7*8M^lc|{M2x4!f1%H31CBiUIVe|_@Wxce`~ZZfNnaq7@I}xs*zj-8q`N?9y7Un5 zND%FE6q3DPNWAQ;!Xt{06=)hWenCOGAYD9 zvH&q21XBo*4^94qlpXYMbrzjjJtKDLuD7t8)^Y+2098kBA04&l)xPn;R|fk30Vc6a A<^TWy diff --git a/Content/AI/BehaviorTrees/BT_UHL_InAngle.uasset b/Content/AI/BehaviorTrees/BT_UHL_InAngle.uasset deleted file mode 100644 index 604e78802c9b0c598793954be0c70ce833759682..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16984 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 diff --git a/Content/AI/BehaviorTrees/BT_UHL_InAngle_OverrideDebugLinesDistance.uasset b/Content/AI/BehaviorTrees/BT_UHL_InAngle_OverrideDebugLinesDistance.uasset deleted file mode 100644 index cb954562183797bd6f19da7a611c6fb4debd7bab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14635 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 AWdHyG diff --git a/Content/AI/BehaviorTrees/BT_UHL_InAngle_OverrideDebugLinesDistance_Moving.uasset b/Content/AI/BehaviorTrees/BT_UHL_InAngle_OverrideDebugLinesDistance_Moving.uasset deleted file mode 100644 index a8f2b089ca1b4ff50d1dfa9e4b319d444fd5958a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23674 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 diff --git a/Content/AI/BehaviorTrees/BT_UHL_InAngle_Vector.uasset b/Content/AI/BehaviorTrees/BT_UHL_InAngle_Vector.uasset deleted file mode 100644 index 7168897878b89b25fc4195c4c8906aeb2c92c411..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21151 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 I90~gW19qvP5&!@I diff --git a/Content/AI/BehaviorTrees/BT_UHL_InRange.uasset b/Content/AI/BehaviorTrees/BT_UHL_InRange.uasset deleted file mode 100644 index 476816797996660c028aecc8e8ffee03535de197..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15886 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 O32}SgP8!CMp#L{v-65U; diff --git a/Content/AI/BehaviorTrees/BT_UHL_InRange_CapsuleToCapsule.uasset b/Content/AI/BehaviorTrees/BT_UHL_InRange_CapsuleToCapsule.uasset deleted file mode 100644 index 4b3e5289503b9f4639915bfe85e4a47439e0d9a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14201 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ɜ<K8L2vzk0)f^{doxdO zz#xb+^)&1@^)yDe=4q55CIV~!kLKkT{TAYyEXb#zPduD-0O7$*0CFrY6q5W6yD}qg z;RwMV-?RWC-j$5><3pmM=f(y=w%|B`4?r>k(ASUMMe4{@vGC3o-C&wNh^a7wF+ykn z`kZCk15mP`*jwDH#i?5GGykrP^inwVhglOb8H}u9OB77fTSNbDfmt+)TO{0%M}&ZM z=!`1`(F3gbl@;z86$mJ>z~HMsz|YM|5h2g<>uK~|+d2CW3q*vBkQ}4(;H}YIZX9h} p{Y$Z}^pEJCKJ#*2;^^)BvEdN4hVvlPkBpoUv-=MT!#D!;{|8Oau^IpX diff --git a/Content/AI/BehaviorTrees/BT_UHL_InRange_CapsuleToCapsule_Moving.uasset b/Content/AI/BehaviorTrees/BT_UHL_InRange_CapsuleToCapsule_Moving.uasset deleted file mode 100644 index 1c57e5253a8d9380ad73dad4b07e56041156ef7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22767 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 RKG`!p;=`TMT{r;v{{k(qQSbl& diff --git a/Content/AI/BehaviorTrees/BT_UHL_InRange_Vector.uasset b/Content/AI/BehaviorTrees/BT_UHL_InRange_Vector.uasset deleted file mode 100644 index 1b09142ab44bf3a6d2e9a4caeb938d3b530f54f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26917 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�e9Sw&7hlmF8QPtVv#< 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 PH!c44KP3sbf&c#j2j~I0 diff --git a/Content/AI/BehaviorTrees/BT_UHL_PlayAnimMontage.uasset b/Content/AI/BehaviorTrees/BT_UHL_PlayAnimMontage.uasset deleted file mode 100644 index 08f1d91fc5ae09a0fa2cbb0145e647432e7886f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15879 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 diff --git a/Content/AI/BehaviorTrees/BT_UHL_PlayAnimMontage_StressTest.uasset b/Content/AI/BehaviorTrees/BT_UHL_PlayAnimMontage_StressTest.uasset deleted file mode 100644 index 3fd3857424f7d1c71fa231b7a3a2f3663d89b8c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12140 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 M_+F2AfdKvg06WUen*aa+ diff --git a/Content/AI/BehaviorTrees/BT_UHL_RandomChance.uasset b/Content/AI/BehaviorTrees/BT_UHL_RandomChance.uasset deleted file mode 100644 index 49b2dd39368099f8a8fb12c244248bd184ca70d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33544 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 diff --git a/Content/AI/BehaviorTrees/BT_UHL_RandomLoop.uasset b/Content/AI/BehaviorTrees/BT_UHL_RandomLoop.uasset deleted file mode 100644 index bc174390ac2a71aecc7ef5582fe91b9a77ed0070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16971 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 diff --git a/Content/AI/BehaviorTrees/BT_UHL_RandomSelector.uasset b/Content/AI/BehaviorTrees/BT_UHL_RandomSelector.uasset deleted file mode 100644 index adccc3b4b5cb2f1cdec882e111871fb9840623d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19885 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 bjorB)X-dQf7yxD;89gz2&z}+nQ_%k}V|MwW diff --git a/Content/AI/BehaviorTrees/BT_UHL_SetBBValue.uasset b/Content/AI/BehaviorTrees/BT_UHL_SetBBValue.uasset deleted file mode 100644 index 77c6c9043cb0e44350ab6e4f2169d35ce12e0b2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72043 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 CTi*Eq diff --git a/Content/AI/Tasks/BTT_TeleportToStartPoint.uasset b/Content/AI/Tasks/BTT_TeleportToStartPoint.uasset deleted file mode 100644 index 6afafadaf12b3d45f9ad08339ce773bbb37e7a99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5953 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 diff --git a/Content/AbilitySystem/Abilities/GA_UHL_InvokeGameplayAbility_Test2.uasset b/Content/AbilitySystem/Abilities/GA_UHL_InvokeGameplayAbility_Test2.uasset deleted file mode 100644 index a98bc0e1707637f88d517d9b81ef76261a8a15ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35021 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 kOWPU33IP270aYu9uK)l5 diff --git a/Content/BP_UHL_BlueprintNode.uasset b/Content/BP_UHL_BlueprintNode.uasset deleted file mode 100644 index e1bb2e108ac3ab684c9890c01c671130aa51198c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154342 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 diff --git a/Content/Characters/Base/Animations/AS_TH_BS_Attack_2.uasset b/Content/Characters/Base/Animations/AS_TH_BS_Attack_2.uasset deleted file mode 100644 index eb4874179296076a063fcd2f155ab31cca8bf767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3319766 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ɜ?4gf+ps>yk*0ocT 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∓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 mq5_`K}!OS&RZ|& z$v#jMlrxGU0Q~fyYv+=sRn4r7LcFGavEB*LE0 z1MFxYkzFd(U?Rkjm`S@Ju=9fW{GsL(q0WNg8P5mo5@*3W%(Jy9h=FP%9r6+l>p<&A z=Smce=>=LOXuj~Q77zO<9oE)2($00nGFzkC^@JFxzxc!2`oa29U-AH7VnD;a0(P|j z;%FTp_EhNQ9&kP+LeA){3WE58L8En#g!rPN21B9dL+PFcd5M6#egNbw7_?;2DA%!& z&!wPshkT}h9X)S$f*7(xKIcL{skion7*<0~(0->}({m%8@6@wg5JM8ILkwuXpv8km zxlRMSV9=sKqdpM<^%4X*qcec+S+qv94uKFKxks#!QA7 zB0;0rBfu^mv{cZ%p_;tA_O&p;j!AJr%IELuOxSseJ13bE6C6a($) zMDQgDeDQ&r@P~UV`56jp8x4MXf=0QfJ`n?B219?L_^6g>Pm>+}-icyJgY|P$?4VJP z^nskYVcmnF2BW|(34SL47V9@f?kdy_st^8{bWPqL$2)A{FuJ?4gWcS8(5pwXBv zu%j5_$!@0IvuJH`Oqh@MLj=?k#ZJDsV2z@d+Og9brNL+SG+!Xp62%t-y)K^4R9FW( zA1DSlj2Q}A3ao7)tWgr2EAIb~z5fCCdcOa_|Ccm7NDi8XaFC>hBSy2vo5h;79JCg~ zVM()QN79zwOz?=*Lh|BvV6`Fy_KFYgcJDj+9&+NU$*x*oAt;xj(wtQNJqGj8)6-6fT) zRbTg)*9u=)b(^)S&Trm!)_CG)vdK`@(z~+Ik2Ra6}2y7YHDp2aHtpnQx zwhdGSwhL?@*dfq4uw$T9+?@hl13L%01-=pJ9*79CT?4xXDg(O*dIa_e>>2oGV6VX5 zfu4bH1@;MiJJ2ieoxr|<(rd7V!2W>)0^bev4jdRbDDb^NpTPG62M2x-=o=`dy=ib1IGo95BwxBIB-H>NZ`c4 z(7;avCk1{M7#8?>;N-wB0yTkC0>cBR21W!*-99q#%Rp%){3>vI;MalCfinVU27VLB z17iYb1RPz{P<-1TG2uF>q<%Pk{-6 z%L11Nt_VyFTp5@YxGGQ=_;cXuz%_x%folU(0)Gii4O|zvK5#=|THwaOO@W&O^?|#$-aC_j6z>L71fx7~C2WAHD3EUgFFHj8JAD9(*ATT@dVBn#^!+|-0M*?#L zj|S!i{uX#F@OYph@I+vK;K{&(z*B*z1Ah-J3_KHfHt<|vQQ-N&3xO8{je(Z}F9%); zEDpRHcrEaHU`gN~fu(_e29^ch2rLi08E6W;6?i-FPGCjg-N1W+_X8^f9|S%Od=yv} z_&D%M;L|{9@wdLY|No6IP2c((mljGTTiegsJEyrR;C=@#2X|$+w7m-;R}1b^aK8sf zoygh6(0OhPx#N%*#c(0)T?B4CxNE`5p6VdEKfs>+RIbm5&avSB2<~cdvZp#IXNr9s zd=V#m%BQ%|@I`A{oaW0?*i$cwdk#8P2kC4BofE*F0ZzU=54mOF)DxOLRnU1ExXr+6 zZOYFxp>ra*^}vnC9#DySts0GjJ*}ggAa@D43Gj1X*YsXI89ILj?j&%UOXoqZ0e&92 zQ#yvB(5Vh~MuQ*zp;bvIO>iBn$G^DWh>wIWWw zh*Q5vPIb^-RQ;l!7bibuPc>4mwI1$5U+W%lIpj_QcUB8I^|kgD<*cPTb+6LddpKgB z1a3EQIv3moxgOx;r~103oN}ghE3T!r9f`c?Oxp``>KCoQC!n(t_c+ZL%>v0O*V^Bu zQ*!F-PZ0YF$k|G8cY<3N+|Ia*YA&fi6}xmQpXVS3`J%NcUxuSbKSItPg`bK~wN(#l zzg5okxr}sPh1fMewU7N2Ig`$N;L8Z;EObdfCsK_%!k*4AtKf^C^X-lv)SPb*Io0-O z@bl*_AoqQn%B2tw(6|^gI&|>eF$Qx2B-b#NXTj3s6UzIvTU zTZ{>`zIxsI>UHavrhmD=G<`|s*wTM7u-2dA9%-%`+)8j$!8Nqdml@DG0bCt8#a{eI zIxjhNDle6Lrge_mEzPM8v*AlUxM|?7?~(Rp9OT{vcO1AEz^wqc0rI)gH`6hk2%U}4 zc{OyZCq}`ZYNWb%hR&YgMt~a)ZX&o!aEhTLvfknmx+P$`;mEv6o{_Hy}Rg zoCCRX$95K{^D@T8p zV`fcN-FHvNP>XzS3r@MNf?N$a^+bmFWUr-MhFojCH=^g&6UvL$rsAtat}77V_+8Td zvIy~A4ttu{&qD5Ftd*y*R_YMn5X^!jVDAF>c^}&SnsOCKJeuh za2=8BW#3Bs*$!*^7}#3`PUnd&G0V?_&bPs>huDWePP4oSIo&Pxgj{cMhoR5LV!gkB z9_#|S*HHH<;3gx6h2TyC*8}xapPdYyL&0fA>O9d2HPU%-d-zg~*eg-LHqfbjYE8d| z_R@je@-hxwE&SXUa*shyXTCDTHy80;0(*UXruTQ9TXja60G-1SgZ8+A z$fx#>g@|2w(O$d&zDx(V0$g|aS&KcjJ9Li2IdT~6EkXTsrkx63mcU*Hxms{t!RcNl zoii|B7NU0>G3&IZ3$WJ{I?GxZ`%uW$gX;*c2HXU2Itxp#0(X)nIMYtWdQc2akkgD* z-HTWcGmx{c=)ro#u3R_3o}M#Et^i+jcghOs{iq(X=crK)Th`dy3MnbL@>s>ve z`eoSrYZ1Hd9gXPEa>Q2vR}W5SsanW!KSB(8mZxX2s?k8$n*nY-;w#|(uoyba(4WI0 z*AsHOhwIF666{SrB)#58Lr!Ogsp$DRSSuOq>1;FbfOHHCF$ZgRPRmtcF3rJta3JJr z_etBEir5FDC(0nFSs=M`#4ru^7DBGNZ#wpNSbw#h({dxQHVgZu<$5EAa^za)c|C`I z0eN`{+<2^`O2i<04X}41^7(bF+tJ|k-1}0Tuba>lo$-0&?U2)bWmCxMtiK#}7y+H5 zAU7M_<~yeQx&XPE`=;gQLQZGeb0Iery)+eba3ys1L_T{$t}lANKjiehK)G&*_$I^N zV%)11A%^Za(@umhqoA{I_jJGLtT+ccE3g-@e(CNDy?WgywEXLf(_3G?ZhiGSk8Wsv z^}6+2uiM0b%F+7j^_TnA>#Y7a-(I~1{MYZHzf5!EMy0uG$PELx>Ws9`#*t}m0dy(` z`7#qaUp+hR%K*rA2X{HR&GWRqK9HM|=8A`oR+qCI&wAx zzU&F^q4avs212d@a$O-OKP#bAd({NUbw$o9;Ac;8%8OzzKxZYm3dAR0Fh4VKcfprV z;7$Oy95DkeHv!xQ;Lbt}iy)^pwhQEL0CyX>tH9j~PW!_*ewFUCHpt8Vuy-CfoTajQ$aO%! zd>`v!8gy!{`~Y%;VNbOk0-e7A_e*f2!Tku_o#3)`-SgAZa{0z-xooR+pXGangx$Rt{u3y!L6Upb*5(!bD&du>Ria7KQr~`h0ysA zaJPWlA9G?5a;81}HOT1<{T%%KBRKW-rI6G8uK{wk;4TK2rRRL6bL-o<`_6#9O3eAW z(AgG#Dt4{+d*P>Mq}JF-=sXFW&OH;+yJL~hh3S1ddkwx!#QJ*=cjmrlCeH=gP}o}q zPIpnwrAFu+4(<|g>a$O9Pu&K+I~RAZA*ikH#r=n;>o5@U>3Q8a$c+N0oXvxr)>vDt z2l+VypOZA5lFr%HSPwH1!xF3&?E$(Ys74Fn%Per?5c_h-X?`Az8fk5w3}00DUids` z8DbcQ+NwW0Vr?#hy$RUkmOySi&!L>2VXMnsePampQmQ+A$KV_J>$F@a{a*J8A~=E=QGXED)e<< z_)@@rR6q~v^Txrjr+bd%>fuX2aCd+gf|cd3|I7X6{`W8cSs|9{T7UjAAwXQFFT;_Z6MbJa+^X<{W%vo)2zD% zzMOScx_%dAGs-T-$QYSeT|x<+%L^I>pW z58~!snfB#D)L|F&yk?f>ggC{}8+rK{^JQzq_a1b<4eljyGr-M4zf6SO-iTo;YShy6 znf7=Q-*KqXB-H2waPNZCI@%O+noH8De5&Uqr*qvh#GpP? z{q{n?Oaa#gJ@_ExGQ`jioc4F!DYeIGAJhJ)e5zm6*IMt_A)iaJ#x{Z6ACc>wP+QfZ z5jxfLnju<8ufm?rA*&##eo+i#q4O-%VO?;Cp$?zGUQ1(G0iBvXx;v?Ui_yDNa1J>h za`TYSZ6GIK4n|&{0jFm(x>IV6Dc6#F9)4bpyc~yo_Qc({Gvt#|do&}(X^mZg z-kpK^orzgjgIxa+wLKlrf)=3eI)|v|^(^Qy*wY-;eycTB4}0H0jed-ry@oYb1MV)= zR&z=Fiq85^Aa>i26NsaXQzpLvAeA!{LxC!~8rKa<5=*o&~vEQKK^G%$T+|l6v1a5Qm(oZ0F6}a~J{NYpd z{804g*|4`4YIHs1oaLi$1#%a$DmpJQ8wCC#C!P z0mw~9Z8bw4flke(+acE;Yek<){T4cJ0e2PFN(cC|EjZOh>6uR-ix!2Lo!(frokny=V@-q)_zc&ohi)$7(*uk&cB z)>p4vzcjt|OVhLLyYXM_^bQ;tI4JPFK%c<(0|y6w5a=8DVW3~&kU&-7(7<7V!vp;T zKMD*8{5UW$a75t9z)^ugfujS*1da_<2aXFIANWaNaNvZ%kidz7p@GtW234BXdGY#t zn|FZ!`qg+>nj3m|np+5N1$6emH?6Y|bT&Ze9B|{I^Hs<#csT9nq0o6LxT&!B(CoCm zGUzNq=VEY^!OgoT?aMsKb+|t**Ap?Qw$*o}b=E*<^#f@+<*X0ZN)eo5D2JapaxI-1 zbc$=3na;~7)K@UsH;8tzNm ztHau?fxSA|>oX&5Pdz{N_Ox6Zk6IKkW*h5AU6YfnF+ae@bfO{+ygpCVlMT=oY%}627A@;b0xTXaE)3= zv(oE!9O7$$y&Un4gPdmM9Q6D+#fSPeAwKnPSH!0pH6r#h=?wAw z+qU)TUYd-Vtl85EelA3OIrixy0CNlvj#PCZ|RoGrl~-h@4_a9es`(H^cnpcZHS8K`X| za;?5rFDcjKU{Ahi4wfVKJ~%`7{445!x>sX86me!KpbqNYCge=H*4mUk%{tjDAZH6v zqm`)9gj>@!nu^^*+-Pu;YeKGPK&R|YM9!wcUQfinC*+3XY||UQ z%)Tx?%jZC@E4XdIU4-~vLwuSO{img4n2h?Z#9p-mzEtCRK`rFQ<6OQ9a$Ql|BIG86 z>w|T>1l)Mkwh{J<*Q9Hty|MS4wA@Jec`?q=+oLCDp+5)0p3W14kr&OuHjtZx7!C$^ z5n|9DFcH2iKu_p%nMKgq88I}Xw%U(oLg!*|gTx_*-jLJ2awckY^&{!^Pzie-FnbP$ zy`kWqMeN;h{=5|Pvm;{I2RiqHTm@pNhulo`^?Q&j$FsG);7bM0-ufK&Ts#Bpg1g#5 z@TCFI4tt~SdQLkR_oLM>+$hIFe(Uv@`_=2> zCA-aBy#@T|@4^ndC%NLsl}Rq!7;+V9u22P?9nx~yR%x!dWtuB|4cr!Ku6R(|&qBwv zTn3$m&C+tk5os<{d>f_ZikqalLK|=grMdj;;9g2|s$Y&6vYXR&$lImu<$Lr<_wJ^U zTb1UruR!NlAcve~$3dnH>$CW#HBW_hGt5>fP*J$gKl=Z-d(noN{&%A}<%iPwkE0hR#ZG z+koo=PV07L3+2{_oc3w#w;Ad{?i|#iNBV4&Jqx*o;IQ9j*i*B`d!+ZAt+97>LatR? z&G}CdpSW7corC!LAwJDr%@_21jvmbCr+XrQ3h^DCjv-%=t`W~fIBT$%Gz<1j`;xtc z7#61G3fjkTrp?q#=+C?(YBU2i>Y9!r#~mTtE-jaR0$*?j%e8KIOxw$GKg!ys<+AP5 zobDDG)?eN^tuwCzw=~UVr=)u@`!p?ASe33ru_oOUIo4RN`mKac%%vjE3vm7%kTa}I>+W;}FfSl^EH{?#hIpoIl49PY^&PGD+@U$es;R-X=M$KN z*~{?rQ*aBw4FdNkp5QrBy}Jy4YW-pMWa2JAzvVd&4n5l~0_rvNsTe?iN~OdS0OCOHad>$G~a63`Nea!5TXU+?%MMW(dx$ zna-F`A@;YyJ&xG5#?(ti*ptpb!57Vms&47oqy6Dv)Cl*0Oy@e~r6rI6278U*_D6hQg)exH!sqjQL#O6TFUZw_ zI~LsW;C>9Q7F2t%~QQHlm6VDPdol$fyP<)ybUEwFzd-hlC zjq0VpA!oX;^nsuH>_u||?+j(y0}Alvb@Z9mk@`i?iS!xDaQO0d#PBo7X=Ysxx%0s( zhGp%Yd|*KPiL=~tIPS=+X4oBvU#=HJg= zHe=tC*cVZ|eo4W9tNz_a)A#!#st?*F%hqpwS^PVZ+Xi9rw4u=7#%nxaAx2)fjlrKa8}^#z}Ub!fpY`r1;z!=4_pxVZD4%h!oWp=-vw#| zzYkm-D1Bx8C4oN%E)D!CFd=YR;PSu~fr)`D1Cs(*1?mES4qP3$CNMd0ZD2~^FM+9n z>jKvYZU{^Z+!(kiaC4wO@YldCfm;L91Gfck58M%$5x6sOSK#iz%)mW?djt0cih=tB zvjPtUW(OV&JQR31FemUxU~b^iz`VfU0*?hA4>Sax2+R*W8CVc_D)4mR?}3GZX9CX# zo(n7rJRf)=@M54b@KWIAz$<~pfmZ{s1zry<3H&3lH1N;BvcMaG<$*T?O@X%pZwKB9 ztO&dtcrWmNU}fNgz=wg40;>Wa2R;dW8pzg({|mH!PxqJqd%C;sKBm;BYyJ5KxShf6 z0&Y8SEw!f@#3=@GJ0XUO{{v3G$X+-2(gj>caEiU9x!wl$wg=Z8+z#N>pRy-Tb&xNr zZD+(FUnD0^^%J*a3;mRw?6ov!id{95pDop?b=1=Mq*Jq1a_VcaIF$h5ppM7N=aRwu<5ZqDGq6%9(1Ux+?~qG3ASTLcZ*Vx{FiJbdD6Kx~pGWx<4pq z>TBgwzGywDmlV79m6pb*x~q3pKgF(IlAQ7)Uo`6^Ctq|2QXLe7aYc7vi1k%MYYxJ(HUCy###V$_kUA?3jR9p46IMrQ#st)4RgObx6RIWAWTN0GY;LF-n&$e!||XYg8o%9;98^;4fI2HBIG z=C1sdob1U@txe5H*;Ah>KIv3{R<`imquAw(&aIMD9n|x(r@Uy5sSaAx>OpZW&9(eg zt`)m-CVP_84ADALPiXG8)KBG1XIk}ye9^pC&&yBML2|OE{!|^LQ{2`qoLTA@#h{#t zQw%zX$QS9<4AGhvr=C#HxAZ)y^`Km9tw>JKjHOe4Dt6^lYek&qr|c;Paf(lz`dWUf z=jEq3)mHObeyYz}8oP8VFPe4Ai+V}(MSiMxwf^Lb>YyH!oX*0lU%DF=e~H&6Kl?eY z`FGy@yY$cdukrVFoBv+=)g`c&m&M}+-2Zx``}3+zye$4dQQaoo{_pqD*QWZ2Qk3yi z{n?-YdI7rmuUT2?FF$GiU!}K%OF#K%fBq|*sjQV=SZ~f+>o=RXzN}tqnK6O00%r%t z2F?kb8#pg8F3|e2dh5&T8^k2uFwicrQJ{Tb<3M>}lfb5d%>o?)Ukhv=_fn114jgo3>+006gWC?OyJl+b>O(b@qwQN z1_w?E3<;bV7#iplYp^t{e|6<{`^R6``t!;aX|DUkG`9kBi@*(qFZV!h6}U!li^07H zZuC{@*q1|YCOFBxfV{i_oiBr1*h21ysJmkL3FMUPCGc|^xMkpa!I!0w+YE9Wf>V62 z!`_?ViMX^5zom0R~#Cq=wPWfB_dvn391Xl)MUI(}Q^7I}jozKD-#iw(D_V6QNZvbMD zFY1XV*i&t1A=hVs`w;fj*P4S`w_1PF*#|Ln1E)D5doA^|9{GF%+(C$8dvKa{>TA{L zZTPt*e3=05$Kd3PxF_MKX8FBXx5q$dOYZ?%)7!wF_ILHJ&g@Uap7!@=ASYiMAg4a7 zK)+lD?gMa_fLkAao(4`i)1IUKL2{45mzTh49jRZQhfbYChCxoXy$f>pqJEln%9+-f zIMq+SXl6-HGemWtg?wt3zX!SRq7KTLW{;j1sCRW9R6ezDPDkvgA@&iFTMu%VKyEg; zdEm6BTY4ta`BQa&5q@g#&@A{W^7#|kQw+LyjD}70Oo$EB0+M_4tf?J08w2w)r?u|P0b%ZaP1t%caHzD@Rz|92LANH<;+^0S;pKV_Xxf{Vf1+G2(ycTkbz1^gA z3}c~lKKfIAb~R#{4}0nf&5+As?^f8;y}urEI`8T^`@PV)0`CdD1-apurE9Agp2qsq znPD+4qs-2TLJD*;2r~44o>U+F|2nzvw9Tvv{rNmlbrVO z+u)1N!slW=XdgQOIa5!Z0Y7yo*&T9kps)38O+Bc2t@s{Yw+u>-FOuzUEiIORw{leoDVeFNBxgYi}F) zN?^UfR|BP2yw?wG5ZEx#F0fIcePH82d0>;krh&}@9RgnqY##V}pkrW*z?Oln0;Sgo zw+?I**fvlR*ea~^d-Xd7x(0R*bPIeV&^-_@k7v6Eb_-Mnb`SIj>=D>A z@Xf$pfxQDg1K$el6Zm$ZSKvE=eFOUi3W5Ct2L!$w=p8sPa8TfTfj)un2M!MWAka7P z!$7~lA%UvEp@G8!hX+b;y#FXLAn@bBz(DC0`Xd8J1qKC<4jdCWHc%ZnE^vI{CxO9% z69Pj5CkBQFei}F_@Uy_Mz|R9G2YwN#37irb9ym2HB2fAd4Mqlj87Q^NuL7qBejOMc zI3sXo;5UIhFeY$T;OxNIz&U|)1LpsMS4Dn!}nfmwkE0_J zLEyu{M}bv=j{~0sJ`I!>|2ly-fpr6I178WO7x-$REKnL5t*>7HzyIp>%n==nrIM}f z=gw2p+;VV>z}*CH8hp7Na&y2<1ve911Gr(QrSmcaa&_QjuLgNh49d$q__6@p)8Os` z_Yk<*;N<6%kh>e)?cnYOR|Kaz$d|{VQ#~Pj;u>L3{jv~p%F8s!Jp%4NaO$&9Ag8+D z0l8PfJpk@zaL0ku%z6-V>NBnB_n=ejPklBHI@M>#L+(Rx7l2bfCqu6N@bsLY{>wBs z1p9;L;HB_oEVwf44_dcVA-4jtFM%)G|0Y3hBDi{Rnvn&>ryiURd)mXFhTI6`GY5AC zbWQ(JMay=J1cSa2NgPR4Ne+8$#|5?cGfu2|jxsAac1MVJh>KE;)I-^_;dwYQ! z3hps*T1Sd+K6H*njXHvx3Z2@=G_$H;PqRm7TAjhPKWP1_U$jrZjhsnNxjqRx_W`FK z+zWLm2X{N{X-=rGRreQQPx+Ki^{#Y|f-gOgGu_d3p6CdBn)6MN)BQm`s5KC@EkauHTFa7+NT>Z>wXVkHiNyxp;LRR zJ}bBuz9`o>LQdxiouzJuPQ~{ja&{zgwj1nij5XE=ays*AtxSPV$vq6Y!w~xn$Z7qx zM_%-7W;giq1bnH+vpn@+JLo(I+$rF6rq$|u~wc#?C*fv5BAOmw-0>z z3gk3<4mc%UqXE!aGdeA&*}5-uZV7HMIPLu-A@@UYgTQqdmX2NZ+u_$~Io(s=Lyh!| zgT(*DV z^XP^#fwKZ<2gU}@37i`^FVOnxb?d9wt*>5xIllEeFI-ZHCArq0-utGxDd75p+Xvj4 z@MTNLoer)SIQcn1a=p`eISg{0!O33P0cm^6=l-y#y!3=zVZXF5>X$1ZR|R{Af*b#x zv@fc|dGJLsY!A8h!F>-gsP2OxcL=!eg8MNz>Ffu&gTN`D--p}}!O7l8$f*u}A*VSZ zUw#0cdx4Wq}lPWqn8##r)Kic zA*cAHvjKg*1?(My_!dG=`@8C(*?KDM%>?%mVyFS9x*rRBJA)equKwHUbKR<5X-+y7 zgYFN>&4{{rTlg=)X(+rW$eW7z(a36xJ z26rUtJ{)pA!09Zk-ql^S8|<9~?m?{gm599~}NslY0Ms-mnK8!*6^hXocdF_)*h~W>Rg~%u6vGrQG6F6pQ^3qpl0&fu=g9( zNY8?l7v0CShf7Yr=pL@UU;X(lSx`qW$4q%z63pTg0Fl*{y|g=R$5va5o^nJt21*&aINu-d_QG>a&v(gLGbv7#g8- z1mt9I5ac#M?6dLtt@g%G5W`T|s{ywjxE;WKXaDqbut(wNGdO!|t?Ywb>%6-HazhZ` zDsVcVb%orw!RdL=evs<|ZVGC25afQ38fg|xK(6`2&CKJ|Q8 z&(dFkJ*@}%*$Xf`^xFC*9|%~ug^iB^@lz6%N5YM`lY)y zU%fuH`5)%Zze}%Vr(V785?tB8Ub`;++nq{(#Lr=yb}W{}zKGh=>zU1ObeB}FR=vTa zm+$|DRsZ{C@ikSya>|nX|5Np8rGFuQ^3VSCd+3Q|gz$b}RBa*|{}a_~PsZ9*AJLqI z>gL}Antzvmm6iTDq4Y=meBQVBn_H;$&HdIl_w#6@N?g?bPOxt%O~KrLhKuW`wIGHQ`BKs=+u1CJlhyL zHIp@820>>paI&X4Avv8VbdD^8pZkMTe<}v;jq+1_j`p~pBZfZU6oWXOX|<1y!}@yz zoX%(Jd2!QWPwP)}LOIjCmY?EO2hE9X(G%JOMndj%a09^IfjT@5PHRl(a_y;_Jvy_0 z4e_ZbG|$v$`@r5mkTab>b>}(?_M}t!RDZT~tw^VOLhC^~6`$5-XXI074V~FFvowx)7@7+cnWl?2Q@#% zsXw*sBI(UK7gFg6MZ|Rb3GjPZU#38obF@iK<;sHKgVa#XFzT^o{6i^nvm;tuvUJH zp3q+WBwKr<7dU~^TpXvU-+j?oazroK((G#-wC~_@(+T(N|TYwn$ zMlU@DIXwf^Gvf=Pa}W4Zgxt&EUcqdA33BgjlI{uFn+cu&1osL!J@3)E;4bLoXS8k8 zvA+kMh4QrAT*&nRr!&LhsO|4D2enpokJEkZdc?38oa|};8-w_?Hh+P0kDjA!414=R zr_L`o;%ut3)MVuIDeSkaU%FfK75mTo+VvW5mAAfn-TLZv9z8WCa8{u8OVhJ#cI4r~ zz(awD19Jk81m*@F4a^JtE$~?2@jyf1iNO58lYs?+rvgt0{vKEucqZ^{;JLt}!1I9@ z0xt#{11|+$4!jar9C$VGTHy7-lE6O#O9TH5EDO95SRQyY&=hzp@OI#xz>2`Tf%gLM z2UZ3?2z(g$D6lHbkOY1CyPQ}m!xoO}E;QF8r zJt4OZa7}lm zb1gpyLT5SZUWA<1-;x{Beio6l0_@FzTy{s=-oQK4TpeOpUNY<}+B<4*O8b%__Hx8N z4xIY459V&uV`)D>yeG|7AfHWG@3n}bp@m!pdSby}(=qf$9eTo-8gSZI#O26mP@@T`Q4{R-f}dJP+N&DwPWMt1?2SU~+TZ2ND9jMa ztwhd>h(YUiD&!`BQ!kan&qn045^|%^OM8Orj6G)@_NuAa16226h+!VM$>4NOu7%tn z)UP+>mZ3(5u%c1j9a1)U035b0d=F9Q8=QKdB6ZU|qm`l50jV(lcmm}BbLr(X` zcF_4EbUp{}VZ{C$*sGeE-rvtcPZXeY1(jGb zewIV0YE+{bTKep8PCAAL_^IbM%9-w5P1vhyaek?n9G;0+N)B8jINcFyv9Hu2*ELw1 z%4Ze&Mf18|zCfquZUy8TF_Ux1)q<-7SAqDdv4?9$W;oY1X%3<%s!;bz*wb^V#f|Cp zUX7f!Mb0vu^$V!&1lVf=*L8k6hC0l_p?^us)#A)hi5XIWTyb{VULEAhVXqo;73i08 z$Q8k9-D-a?e*>|rm;R8JS)^RC_Zj*K4anI9^n6d$K|0Ie=Zs=Hz9qBa>Q4KvvBnTX`P(cS3?f5 z=g4)AyW#40?!M5g*KI<}zrHxV_0{XvSFiKvhB1NGSFc;Y^}6-d>o51K*ID_kcg0d& z`%mGXG*>n=&DDeJ2%R&gr*(F`H_c6jy=vI21-As;?8#|g#zAfxxK7|E-ki2~IOK+b zJ2lPakEFS5#9e7$HiKN{ooTr(Aa@41zn~}1gxpDYr+xV`tP1uI)Kx9Z(mI3 zWh}T4k?T?Lr2%V9vwQ~TOC#(R!8IZV^RzhP`>< zt_N54VA{`e?8Qf;4!6PHk>FlIU+Zj&e&P8V_lNv9X+QJx!R?mjvMkNzI=^h2&UJnj z`fTWoWNq`I=)ot_btv44p1}T>{~#TE_WLwfcqbiuaZ#Gfa7W1ROv~jx(!OK`aNDNO zV8wr?bC#b0x%bk3W)I?yr+u?eI)>s~X?r>Lj=~*jo%v#L@Fl+?Eth?o_A{Fbxt%dv zZ-mYZ(_H?8bp3MdsreJ|a|-OufLuFpkEeBJs9$z7bY2ggMUG z?E$%sz;yxlEbRRfa!VkWgF~NXb?N@h8lZDDay=h=#}LFf4O|m^(fLeg%xN zR>9A!AvXp2oRr?Dvo^3dEWNK}!@=!)d-7b6=`N#vMf+wY^0EOq-H-H~L4KAa*GD4P zSL3Z5p_Z6svp1+i#wmS25 zLe9E^+Y_9gx2~9-UbpkmySR5`vmw_Pes+g1lFP48$Dlo+KWe0zH3K~{3bA*^oR|o? z?vR@axjJw);A+9u!I1|-EXB9Zv%ORH|*OF_* z{clP7{+=}=_6l&dIP)!mTm?Q)#dDiX=iMsw?n3yfIarB0OhB$jKyE6|VB_GYX4Z1Z z4S>Dvk+W6l{w#hMwfzpbKH&6uRS|x6fX<~jOX>bF7-!+$$aN*`X-@RTJ~j;T^+lg) zt#nVZdn}$2W(}+QLgi8^_G3aaMTF-aYFM3bl7Wml}c~M^< zgMH;5%)u?-%g)$Sbw9ckx!wTwn%}xx^VRE9oBvtf{5!tAHtWB}-`8#ad+Aq~K-s@u zyDt6DPNhHM=a!?ly|*OxMbxhGW!fc`t5r9h-EqG!toq+Ci?6A==Zj-z{io{FO8-Lq z`FH78S?P}xOMk@A=l$aJ z<`!ywbHDY?{XE)dOrZ76{nj`4Ti@LOa=*EM>{h)Bu~gUk^VSw=Zj&w3Tw8D-K<5RJ z`vh`rASYkG+CsVMkdrU#wovY1$gKx%ofdM6VHfD!09*|?^^$5d0zL6AxRcQH??Y}^ z$Y~v^?(f0gS;$#SYg-1LlfkWopR2%K3$7jPW#Ik}ot2%^b4f9%4llr$x8chh;Qsve zw4VpT-iy%L1g;*v+a5X7nwGtd;mf9o@3fBTynG0qnpq8ydkx%T_|k6Mw4XmjuGMGa zzJi=-O)D>h;Ad~-MQigT$h{732{_G{r%|Ixo2P4}x@%tRJh2Qh9KChgms-@JFY2zn zQ8iMZiF*j~wZ#mXj~J9|^}On^A?%%w7@h%lJ#_8|PUlu}I@f&+KPC47{5%kxYNT_P zdQg52MSM%aX@6G?I!oOSd!K?+e9DVB>C~KWkJ>6{>a!i8^DuBD!Bv5~9=W~)oX#(r zFD=crdSZRVr@Bk0_S-#R?~lk?H^{vSxoaS&S*O@F=T%$j)OkXFst%G9w*dJ(0QuY* z-2LEIz@BhMzhY=w78dXus83*%-20*HIh#4 zE6d^MZ1m?8DXickMG_OyGFY1ZYHcda9(VX}x zYNWfxQq)~}`8n3D`ucqIZU^{M4o>lj>+-d9uJwFy268vl_U_kp_{vEKx_b5Nt3 zA-Bmk>AXAwxkte*0=F34-q`!~3~(Q;zcH})Yt&ZpT?Ko3UT|UObgs{YpL4)H0d8yb z(p1RlbFTC8`NL7rc?)KN`fL(v^iSBk1~qyZa?irv#gKa$oYvn}kkdN47jo;M&$N%# zc1ZWMU;YYCb#D*3ZQzUcY2`(qtEqPfZkO(f zXA#3(aPz>aUvyUd2XsCNPP5>k&C;>!Z2Ab+!`<*@18`4+>wtapL(D;)d(=xWz?WX& zw2w`J++*O5L3~>8v+=p8_P<}kUJvNhy8vIo-l)6%k;u!}(G#m*x?A%V`_KE@^%`%L zx4wGa`s#HaJ=OZ^b(YPFJUkGX9e6PCP~hRfoWLW2xq(Lm^8$YhJQjF7&=7bcFhB5Q zU_s!iz|(=h2NnjN2|OEkF0d%@eBgz^i-E?#OM#aIuLKqcUJbk!cs;Nr@Q=XKz&``a z0&fJC2i^=c1>Oq09e5|OBJghDy}!Ib2+$ba9zPw!EFIqj_*u3|T5k51X|5f7nTeb&1E+O64)$uGQ~O^5d1-(> z?Nx&zHxs!Yx=lLQL*eH@*jov%3S1@Zt$^H3kW*exhRzD;R2`;bhAhN-pNgK>>`^b( zAqH_d#p|c3C54dV@v%!r(J~Q;E?nkQoOz0ehvqo2( zlc!=%EI=J*ULtuh=QQzgKRY z=5$6Wl&9q~_)>@3YE3sH_6(e6o#sRiods}>c>Yq0byTroI-eEj>jIun)NYX0S^c#% z$9y7o<^^(EN7az4Rz4+%^OByoHndOYtN}X9anH%X)s&^}RUy6#aH^5^qbBH-FO695 z^0N`WTZLRV;G9*3wUT2F)?x2Z>;?2^Ir6C*l`EgHm&2Z7(EP05DBYiYK8QWM9x)WR zPTMOWFHPXo^U8~KHlYVqhazIHK@3_)6__u|StIr%`6;dj@in49byrirRAb+41Xl}R z3gF5SpJqW7`lS&%bIied#8(BKlGF3uO03QCSnrP^pYw4>(K;G}*e^!xtH2F}&V9gr zf*PHS{b&x>`>v47kh7EEXVw=dl@}A z58M#g>j|zMa;cC9~Hw<+jhB?@To|pq}5V&5*=P=041~(S*tw4N> zptCKWpXp9gh5ca#o=Xixzx2l4cRcDo4cv6(Z1p>LU+C5Ae}C(C>#NtTuU_ZTQ)2?H z-+JBp>UHa@*I({eugBf}+g_`;fdBmc^fqa3T-P+$b^A0|+#=02{4&kee?84*+orj? z&C^`Ib(*W|l;(=}q`5}et48b<@}+m$o?>YHTFc}rwu9UzX|5V_6|Y{9?6VAgR)o$% zA?-_Ht29@)Lng@ z%a?~yhmL7qa@0M0JFPRv?9p7xMx=eo+NHT1`OML0+4G2DMw-hy!r(EY) z(>Z2qj{SkXgtemBvwaa?2XN|n%+`D}=)^3@p)*^Su6w>m+MfDa>mkQ1*B+qSW<%3{ z=8M36Bh6(vzhs&dJ3{A2=co6-Kcfy`g-+x%hcCJMMg7???MrdLbPR=AX)Z$y8O}=u z&0Vd(nsf}+yQVpw8J3GR-w%->g7<8D?uO)=}f= zbY5z|mF61YXC3;b8h&Pd)An??sKvfn0ef7Vh@lR#t43Aw1$$1RES;Bp-85HxBHd?= zO=+&~=(NtpL(*I&)=GvMS%o=Ri?c?C^-zQ_jp&y~?BNBRg&W^U=d+0OSpoHH!rs{M zNZMW_a;;|q)wmxuVb zd98U?fLxB5Ri||{B%QPDr-=PmX}P+YX}Nq-TCQ+-nrr-in#&PihQ7|xOF9$jIYTvc z>I|0S4qLrEozIH(#;4E1T4PV9brv^I>nsjJ9Wcv_Skvn34C^SzoG)TM6!DCuh&>=5 zn2tSr6Zw2JEtl_~=CX^^ItzECx#Hk-{R&ts1@#N+r@gp<^{2WQus7Uq_+fOV9kewm)1^+@L>FQjW!+&P`I3}>+H zUC50}b9(++RO~qS6ma*|bFf0^w4X)gvs*gX*znLu_R{KTDv z&m1*-PDkE7Emn)cqFriumlT zfLv$lGdvsRXQn5l^O7Ui`E%*Km6 zz+SAL=la8%&XF^H9+%^+k)NH8UC(s#Z>HsP?9&tcUD<)KBqg zPsP5n`hB}KU%fuH`5)%ZzvJ6$v;J%Reck52mwt5#l(lW!w)r1*YX1Gr-=4Q`N$iWL zUE|BNOIlZ}-g5Lc`+Z^6|9)9~P1Pf(jhXeIs!uEZ3-ObG_UC6`>HB$;5yJoF@#j^W zNXGv}_1crMHq}QoC!xCe_kiZ#rC(*GKZce5h@a2<#p%s0)cWRr>zn&|w9lA8>zn(n zZ|=9gx&P&UbAO+o?Y)02)wTXy_R}=?8n`Lo{sgWPzKnp}Y;c!@n*{Dsa6^8c&dX%T zjRrSW9P)B8kdvQ(hR(s@6vNw)s{=O=ToK&F7IN1>PJXHf zC8wNet*A!gu10(<^+j^>Me(VA(kVIBL3xo*$!Wf5UMnw(U2FO})ctqhZU85HS3pj4 z{%FV@iFvjXa*AEEd@OX{4(>K^Hz0p$yn20g`9M1&MTjf!WYG^wIW~6Lwu^kc*y+`+*#msE?5A$ zVd$lM!5sr`D(cV`zG#hU&(R(rxr^Y7?!H$+PW6*78z7$@V6PF}P;g^mPd%@@sOqOP z^ceW5{XxFyZlO7^y-MqEK4Q2L+(xK_&M5Lz`;mHAb(c=n=p@A63$a%~ZZ5b3!Hoo` z9&Bk}YhTfRq_xu0I-G*o?*rEcoMKRoHiyn(;ABthy`_Dv`sto3Uv!4nJi8NlsRAc^ zcSG(WaOL2X7tJi?x}|cuzbn`3mtKf{9Js~cri1%7IGq`kPpu=xt~%(vB%R{4j%tyY z`8a=e!k+UCbe;un7C7yV;{$4D2)NTBH_e+HeJYrL9ll_ zIL(P1a(d>WwK57iRd>xu-DR||Xm6a1^(VPy1?FW=&V9~ z>!E(y-?fhVLFek1?$&(8{`06UzIvTUPqn^!on^Bk4-W)p2ObPO6nHo= zC-6vMZs5_tyujZAj|CnNGz6Xq%nv*nSP*zB@O0qsfrWu*0?!7X3oHseA9x|~VxTeb zQsCvlD}lv-}7zRO3xfVAaF&qG{3cmD#Tn*%I z0M`vV<>zbAc@T8&0B$#My}_LTPCY1Jv{t&n-q*n02(BHtL&0f=C}%rE=Pjsh8RWhJ z?oH?%0=Xl=X-+i4UM;vevIn^{A(w%>3p$s9+pkA@&M)be<_7mnbJ`mx!Hh$fsgZjnvoW@N+DDnTq{C+Y7!70(URsTZta*v`_jBRt0-Yp!4EyrFBk)pZma`xRW8L=RLZI_l8d8 z_# zBK+(Kdmm$d*1(tc;FOo{kXsL2FL0IMG+Q+X??QiS&$$*o{|Nlt6ZP8>avOr%9GvEo z&YxB2!GW;1DY&WN6vJZlZcpf}#Iroj9^LzO&KiN*>MXSa`&b9W*B^3iAtz2}jdsvk zhuAa7Y4*&3PCc(%2s!njp2-!k-YJKfJPLj)p9>(T`$H|(w4PC~Kn#81i=LM&h9R(b z5bT}&gY;SPYSeEPIGwLMWBut&tG=$=KOI9o>Q}jIT5c$ER=}BE&+fZ^Cv8u?I}rPA zCH!0ht^xI{2B*CvhrQw<>DYCzs@gFvrx-3lPiQ~-5Vh64n0o;7(i_||>;ZMC(L>-4 zfIWQh zh@ozmv@he4v+m%!?v~cM`klKk^y>A$zjeFy)$7(*uk+}sF@e@^y>5N=y7krTFZZk0 zqq^)>h^4yLpI+Oixehy|xxtX@4Q?!aS+QN(-ely zi#r}V`?Zie1aj)#{ULV>xP!o{4waBQ8l2X{jgV7blxy{w=HOoNMRQ4c83LUn!2J^3 ze&EzEid}QCC+sZ%Hv^pf>(|-1-NOM!5Q+u59x%swfdzyplYpvUI z#Gt*uBjmb+Q_qiuTp#rOndq~JaL4Njx#BkII!r=OXijLJwL$C$gX;`V=OyXf6gr24 z+Xrj996384wXMaBT!Q-P+_NQO&>3t5fj!NF!I1k2xbwkjhV+Kq z#fYy6xf4)_V<7hsxO<^fHPT-EL)cTUbuJhJoqCpVEaX%p&E318b3SU@19Cdo-3+-Y zu&4Wq@^U=vsn322In8<1R%>iG*i)a4ft>CZ`$29PxR&;(YNT_r?y&OnWW;b7xY6Jq z0oN6r&g{Q}ocz=sUH47ZPisZ%VI|hBYIHba*O^_hKL=lQUaG=*N$XbUNYz36yVk8Z z&3Ww)npv`^yePhYsL??5#0qe2!RhQRt{yro#34T2Wv1fXT7bR9uqQvIa|X^*9pK9n z#4rke)8My)c zJRUXb0=WZWZ%4?r^e(zNbZUNfgIoh*m%U!7gZ95U@I}uVrb13Lay;a^f@?&4%C+WM zC)k?+t`eMlDTkcqyy`c!g*rPzuBGRKfzYYiDxdPDFYIZ5mz>U@%JpFQ(g$33aI&X< zX$PIEgY2oV72gQ>G7X&ac?;xpchY*F0-dA5>1?B3(mu8q?5%$3Zp~M(Pi_8(dGqi1 z_S&rf8h>B6`R}D)T>@oo+qP}~N1d8~-}9^TVoB_as9odBv`bo7tL|{n(ffa4)&G83 zd`;E&t=MALf2uyM^e@Cu{@I_OeWmZ`O-2as_eIqvlJP%Lz4m0RP4yAYNvLlAJ)rq_ z=~r3lkCRJ(#Lwsb;`HVgYJGFR_09b}+Gk9l_09d(H}_lL-2ZaFx!-f2@r78bYyG*p zXPSEe-1XqD0C)4Z()OlE4%{?wH-MWCZa#8$9pvi3O$B!;@*;c6SxdRw;pa8rW`a|n z{iTI+s;zV?hMVBaU%_1qPW@RAIps{fBwy4^(kZz=BL?}>(zUV*_EdM}^I7P;5}fSy zfSlH5OY86+?0o?4R&bh;r$bKt(hqW458^I{&a1%f1@27j0o9n-H$vw`a9R(VA-6#1 zEcm%}@AO`LA9Uv6eg{tLXaeNkgP%9;m5$*o=)44+_5k%#NA$~3)L}M!Y3cl&44s-U zvbPdC=YVVJJ}qA~Us}4xZbJ-O)0*YlA0#JE>wO+#xEY-KMKP#G(s>4a(JWW*DrY+L zodaK5s#CGc7jcSR_EaNrGmw{iz&#F5cZ6|})0$T7I`ioct23?YptT}D)n~GI2Xgi& za4n5pJ)zhYpL$U1K{3dlIK?1eR3r70>}ikFek5O%YxyEheo9Vt&{_CS^z|RXsb3@~ zKNX*HtzHtRUXq;7t&@;5&0Wo&k$b60&PKgG$O>L5AwnVz@akDLt$ zcR9E@;GP1vA2{WurMcF6P~FAp4y&`qHxaw;zRMx^H*h_{ZHBw3>aO{z-W8{usScXS znrHH*0nZr@LeAbsu615o4>}c}@}hO5*p;*M;HT_q?~pHA@0YG|~%%vSAVZNHQ5i8B%VC~&Hge9>oM z+N(~5FK2<9vu8SX-Ea5pm6lUp)`2ftN25^NF_?pOu&1-W_TmC`s$X;`(Jc5D;#1xA zE|t!a`t167_@X_0NDKGIYUH{XdSdlUcWb_4|9M}#UgNFu)>p4vU%k$wr&?dV&azpN zhX(?)0}los3OpQ`6L=&rH}Gg+Uf^$m#{!QB8UjxQ<_De(EC@UmcslU+z{0>YfoB8H z1r`OK54;d~G0+%zDe!XOmB8Y_tAW=7uLqU{{t;Lj_-9~Q;EllYz?*@lz*~X01MdV@ z1l|q27kEFgGVnp*!@x&@Re_HKp9DS)Wbt3AtP^MxXnpni%l+zge*K_(OC?*|PfdNA ztGGGM)q^X7Yq%k;GlMS~bk>2ZmQHb#(|+c#*91;E%crL8RYPY_#LxgaY zf-AsY-RqT{<+>Vjwcxmi-mj!(XijL)shE-0xeR%k2yPi-C_pX) zHw`*#P+Q%#wZCh=WbmaNH7X*$GQ_Y1`%&#(>H2kqJ)K`PcbRM0)0uB7V%I)hi?dA; zYg5nen~>`Q=2<1?XFcN6dMH9p=VaY|b?=uimB?oXKXW|O(ertIrqO`?p#kUQtc5XD zqp$10W$?2J_kPu(2zzyiPcc;Bd7ai@Ha9(cniMUGHY*T&Iqt*n)tGg4(AkK+su8_ZjWsP!bx_XgaQ4r|b%y zTANEQPRG6yIw#;<*9U!FeQnyF?teY6Ny`=PNpsp8btbCCEEtIOr#-F?bEy&bhT{IN zzMfD_=cNYra_mPvp|b(&A;aFNJx+JL40n>%@7#T%SFiv5t=p}yUbnt_okvfN3ABFe zb?d9wt*>5xxnI4`y1jJw>Mh{EelJ;^=BmI=2lp(v4lk$eRlJ(!>Y#H4xS8Ojv-0`0 zFYiKUn{*8M9LU|)n6~#1$o)0VRW+o!>L=4&{_QlEJ(A{%FTawEp?G^*t}s8%6*o=i zvp6>`mp_x{3eSOSm$sKzrnziZT4(WTaLdwM_7=FO(p>&hnk(#s7#>c`#goxu%8&N?91>OpaeuMvLE1~(a;YWsRxE`K1+74J%O`K{p8gCC<` zzK`?7b!mIqjo_NVVgJicT9Tei&!>AS-wwTWf7%!2Gt;>TbDnbb=@_yJh~fEk44L+h z$J288-@)Ak?w&N4>70c+WIFF^pH}Qx54n19etNCsN2Fsfz5wp-G?ycW0_vA-k?y79 zU(&r)T%7hLyCcoz_kx?9wwK{7Rm2%uXUu$A+L!7l(p;u}OtT!Z7avXA%WKkHapN>s zF(BQ8)!6&r?rXmXT@#l*fY$RM%Cf5w9fp#G*>(*&E>}-XBVdB z>aI_7dABrI#JRPIb59Yoyny>{j`@<~?pxF>*ItD=U%3V z@8Qe;!`{07+JMNir%Gkvk)Q;W&0w|fFR0@0YV>Rr=Pm4wA>{$?sR7(?gNZ&a!MnhkdEWzybtivL4kkma z$NK)lqu1DbDy?;N77pMn70iaXkR8nj*c*fAp+8y&o5ANKU3|>+3y*9(1A1=L73^T0 z2?wy`!IRGk6E~hgZSwdC2V@V3!H~y$p7Z zpe88R!=O!Clh=bCG1}vZy#)Q83yjW@w3gF3vM=;U=d;$3TX;qm?1lbd{sn8mj-FkV zg<7J$aUJw`2F!;;p}z$XvuAvNVLM=S{yZD(u7a_Y1|K#-n{>B_XC;ZbzRdv66XC7i zF4`D;fS5%e@pj=B-(Pr@w+r$;3u(Qc;p;5i>cGHUfB9wFsa6j(J#Y50u)-t;Z0|AW55KmPpVSNi_lV95ACg7J5oHNp5_Y5L&7I9Su23W5+T_}-!5 zd+J+S>W{3{ANu;czc{_1go@tWFM4x7RQU{-ir(BWdUL<%&HaD(oBRE)>K4^hJ?Piw zE}oU@>e)`PTMcX^w7DMa_5%A2*mhvQ1A7<7xeM$z0s9qLFX(SK*lh#06<9v7i(o7p z!0ubHqnPc1HqQihDD-!9H($H^pv{+HuIwfTZSDv5CHPPh7|pRf=r0%A`~~c&znj30 z)|ZW7M=|Tv-RG9pC7KTj$SuW_;!>uQALn4m!}kyuT3=d2&7TG_TM7NG0hZO-`&SP9 z>kD?}!7dlZG7H!aU~^zBZLjhEeE{`x6!<`~rge$t!y(XLR~YAA5Eq(9E5I%ZY&o!H zz@|WsGCKMkQLL$6w!m1(_XaUPmUWPaBOrgYH_{#+K%2B?4FcbvhV^9w^j91h?Qw^J z9i1mOLcNR!|9*u29sx%6Lir;*I@_!RA2OiMLhymkb+mrcnnh>R?;%H%z(3mmXdR@n zTmk*jnSsvbw0=@NsjjI_Vsx*fT51IKaxbvWz+M2>2=dSm7@aX`j!{h<4&y8htQau5 zi>?L#sOGytf32X+^T3Yw;)bxk&^k|h72WM=U7|A)jfG-O^MS@f^KTL4VLaraI26&P$X($^*^6 z?GTra;6pB)%WHuh<>*;xvnu3)YM$0s+NUYECBQ#AFBNv5J_3AS3}a~x&nNDOHt&SB zr!36PMpyd#5#6h3EvGe^>}U_5Gas#k)L$d0-Af_X&qF->Lmu*=za`Knt;w`5QO(o( zLi;Vv2Z}Y_Z^hp4VezpbX*xSIWK_2MY1+DY+40jpS8O55OYtR{*o*hz-==@R& zp0Us#H>#~)duV@H4|9xaHwk&C`LG%0E&104?C4HHK2VOx?#T{5)-@q6_riP_1-1J) zoKao|yVqbW4}skb*f*aCyWvo~Ux3}az`g~x7+3{}*)*`52{{@Ab{k1Tf0OaZpRQL7OvywT90hdVyUFSPRI9>mf%8=&uy)jq|}S19CeZ>}apL z3+!$JMrXdMV0UgWUuV>2Iani~g#LD4?fY8@cB3G-^i2FGX!CVov{zMzx$*(DNqHdl z8mx84!&sugeui<<^MZL`SL|A!+XY}pYsfcXmjjIQM>Rol`55{e-QN37=d)K}jhqAh zjfI+60(J{v?{5P8JKg)~%)S)HQVtl|(SDl?ZN35PHQ9B5{ekZ9KR|zRX!9-bVI4!m^t*H`TS?rYb7d8@qW)$5{HuS3;T(W}=%FhgHJ<@N|UTL4SU;14N z^dG+zlZs14uU`MVU%j5N<*83nDLdHLoQ5jO=Re^8HmVWSbSit`e}v^8Hw@1-tk*Z#NC>GJ!?b`8Kn_Zq5#G7lK^{ z@F4_NAKIk(kbpTh0ou#}HX7J&=r6g!$Bg=`0d^4>3+0`B&n{#hDDU}D^SR&yvDg|P z&&iO79Ed0RkiFISHx}kY68swiY!b}PY2aVY^?sbSp+8zbmq5(A0-FS5sR}-f1-pFc zZ#%GO!FS3##bsiikM&;Ii)nut3FAxvBOexn9kp2j;@KP8Tn6kIV0Qz%7v^6JSYK#Q zrM0{~jD^c|0YpnG(UmyI7K>jK~{?fn)s`)tBWdVB$ ze5kq8`yPdR0M!J|zq&BaM!>Ru@#DM}*47fx=1ainj!**D$d=G1#jHKp(Vp5D?0N&E zwSd+a^5I#S(_LY%WW!mbFW5!kyi@|_^ahv@X%I8ATL^ZvW@UoiKwvbdtAZV^OL3^{ zEXZw3h-VyfOKTm~C)rJau{4LcJO(TQZSDpZg*M5D#n5IttjTF`{>Y=ffHjhdsO_*yY1m>cd_|d8hrI&PyT0jM|KV9o_rmuwEw;p9}Gfz?xM7 z_VbDGAI3-e(xb+8Nyr{z1qh*fW3o!ptw+d()v;# z@<(~6dKnFS4*Az{m5*5jVm1fnSVveRhd}<~-~*jsVqiBJ7|j)Wu1M?ISmM;+d`ZDq0I(hN42{U?CQaO zM7doF^SvbGCmn7t&EwE9*n!q?m!#JD6Go7+vw-RFZJ=kT! zI4go(8mz7L;d$$Q&?e>Y5wJTQe8>ko`i%WYu3Hu5?>v|0KhdemXuLB=m zfzQWkgWYV1^+Z@-4!m>sk6yk0uiv^|^y+odtJk4wYPeMNTd#{=y)Jt7`rrNPbuey2 z!vkBufB&ACy4JE_jc4IIo&^tk7M{4?_xGf?3#dO};grI)8E*FD3}5kWh7&ytUIR7? z*mItR_j?w+2#n$qg54xwJ@b5S=Yt)^tkXK*=5%QDku~1#Yp^>9e5eSF;xZ2UivWW< z3v$42EU^B--U2ooSOv(@mtaTzJqvavArE9X8QNS3ZO#BY%6kjHh6KH#&AGs+Cfb4z zufu%EhW^F_YYus*I%@!S)1beRz&-&+@uYRP1&s4#U{AwXXf2@HjYFF=f$fHxNCzLr zK$}$a?}FVUz!n0_fpHGm=-2r@&}JoQlVVME)@P+3OFfu>bzz*8TUwJ7(B?8=tspMj z!M`WLzn`JMIl%4(_93u)Vcn%Q>mBeR6Xp?}Kk0l;b@nFsM|;4>t8ER2w|XB!n71LF zTj>n;srMlqek!zRdvUX83})3#vb>| zvU>^aXsv4rwR_GgyT=7*`+X(&9%^?l*v*6deE|&Co`B-=AjIq$VAS6RuzMd^8_2_F zP`gz&`y4fc{@O#E>o@r}Plj>64*k*Hke-q4hc-U~HUZf8z?J~p4>foV#B&1Noubet z-DRf2y3{(~=Z~H<(DN6nYdSAc-f2Ig^C#WaHbL!9hFI@`wQdfqXPY3macFZM)Y)Ue zXb+%$n&wd+^tTuo%@u01C#+c!h#B1tUxN7;gSoO2{3G8fe|w?L6~HRNy`RRC4{aU= zHBZliM!{H)g*G#G`n6{hjB_RAXeZdwJtu&1((|m6U^f}&JH;~%+N=nS&Tes7>*#Z! z>tQ{kb$$knb2sED3XInIJm{|xu+iWj&G*SLPP$W$0=rBYCq0*14eMDY=&vuZvcN*< zZy?wm1@rb=unU3R2dpVDS|{!Ty9dB`idi4X?U}y65avqsN^cjyI-fYy+lAvj3wi-- z0;~tH3cxx7s|+j`?u}Guiy^lipue7Q&uIa6RD%=2j^-`Rzd_LENMJt#O8}!iE*;2K0e>a>||(@d_M;4W&)#F zmj}D!fSm-a2{4LTZLq5XjQlGsJ0AKw5!jKyD1Vf9Vw5AYI|0T?{!yF9LYvfIVPj2p zG~a8$IH^7>j>I9ki+!8or0-|K@N`4@m4<$-)32jjeNqn~3XU@V6Nqgd10 zQyuDs&OJ0&YQi|_975|Lts&%J7L26}Wrtb0pO+ z%_G_aC`U9-vZHxRHAv?W8Vl8KJ;(#qAnmu5cWRSzM0qc4%o>94hXA9!gU$?86SOx{ zTqvHjUelgKxg{TH9+if8QvO!L+C%FutxMD`-Ux?A(K{Zcx zM(26jSEx-|d-_7m#zM?G0Q(i%qhPS1 zo?~7Q{n5P51iKQznnS(p2G#@^t*zwyAu!J3z(R;MtyzPiO`1n*z<0U>^@RTD8AKoG zZ!fT>@O+S-NA7_(e*<zKm7ueCh zvK8!-z|P*{eV7V%#ewAmOG2z^KHLCxO=ouMkDdjs2OsFU;xe$KwUwR^Ubo%nh(709 zw%*&Vg>k+GH9=>h4u#B76Q~J_8Lji3piNrKH$q%!j?tWM24ndQ`r8g{KJ0(A&ac|) zYhow#N6$tnNBf~oI@i%zk4|Jw&12LmJ*HG}i6x2jFu)7!LSO9I(b45B& z(7HrEG>5TJO@!bdjpcM$v#2KSf^pV^Hh+K|)q}Z7IifvhI<;Bw*4N-UI)Pp#o;q)rZh{MEqyM{k-m_=l)jSYN?%L!r1?^=^o_JY`c_&f zeJ6b{Es_>XKS)1HKS@iZrP4C#XDKNymsUu>NGqjP(rRgqlqao~)=BH74bnzwleAgN zm$pb-rESu7X@|5^+9mClewFq}ze#(gebRpEcPY?+{8CIRE)~6c{qKJD`o8C?BvL6m z*jHm|(H^v5@Z#3)yB9up{5=7SgU2*qsCH zB4A`k@w^1uq(^b%J26`8V&KEAz$g!Gz^**7M}eIIEDG!hU>SvEA3%;yf8OWsm~ozU zgR#&$aWvRn4~%j&6~?*Z8Sg`9=#SPAs);(#=1IU_f*cJ7ALz_LYe6L#OG{uSAl7lP zqqUsoW<6;0WMFhgsR4GgAP>dCj@B$%ujx#50rYnluuj0{fq&(|j`nx*f$Zq)RvpGd zJ{$&i=L4fy)82RYG~oP)qWI)5$$JF1B?V3zZB_qGwOE7oQCMRRu;lqWkpVVuXoShB&6?&!3((t1YzT?NnNXe=|qzdZ174X~ZS=0Sf+ zu=@i1qy9R<^W=0G3*GU^j`o#B;KO$Cy)*dm3D~WMXQRi0?=!(}G4$8(75{8|64G4bz=lHpz5%;4z&{$x!(c~s{UeNX7_>?2d?WCW>g8w{OLb`Tz&m&U=+*20 z`mNhVuU;3udL62!hD$}i^}6WQ>!Me$|J|=%mt9dgp{aV%ucLnP?0c|F2fGr$4udvp zfn6zJM*vF$Mm{{9^l>>B+N5}v1-p-z`~FS=J8JVpu&V$p4{~%Q*ewCOieOg`SXE$@ zzX;f!46Gio4!|hZmB6kFFp3%Fff&^i%@wK_${&q|;zD!mX^2^6V3eb7V7DLY`gpLr z0PGG2yOO{tM}xpF8`!D9Xg&KG{M!TU31An%SPliY1KK|O`E87uvo{5`ap0jxZ* z!mejDkDh`4o(13Yf$arGJ`gJo<9r(Wdjj^&L!iwhv`KpojdLp0OM74!!Z=R=MrR^A z7wiMyOGAJ4z=sK7M{5?X*R%)Fy0ilPqqFHn;KOOa$^fI9Ke~{1v=>u6sa{TkvCz6p z=LxF8CeU9sV6=Xcf3yeC{G)gl_S{2tP4zXKxZ2o3$4kN2Vz^G&iaB6lfaJp`yA}(yh}AtcOa^X-7uElfl=*JozZ$W z9r|kxc{mj8=-hKPv{@3`oC%EPE#-mg`Y;$L`A3Y#NqfL=;Cn9^XEm^+HL@MF`2euz z;I2mdCe6QJ!3R2@(OO4&Cp(%)rC^*(fo*_z(jG7aVtp~(<7hpjb1TgUiVM{l#hP+U z&w{AG(h#$oAZG7Djut>}Zw5Qsr|Aw$=aB6%7K%$>@SXM*s-=xE7Mg$0!&tULn=O9! z&+>MH-BXYwTCWFy9j(`&K@HNG=o_%3xk8`y&|QsuxCX{TF&hRkqa1w+`J=k-5B%@528|iajx^tC>nmF*%-4Okt-%|U>*MNfW zVZry*-?#tE&xaKJoch+HRuH6>C{aQ`7QJ>|^xAc(Iw*SWy687v7yZWTAZVs_v$=Gk z)Iz#QYAIbTwURE8T1%HoZKTVjOzCo|t<+9xFI^#Zkgk+EN}Z(6QWvSKbd}Ui>Mq5k ztEFqC9@4eaby82Mm(*LTRIpYLAMkop{dmx?+kuS)b~iBUkJ`Ko+9XCk&{)WaJ7Fx; z-)&$w3>f)GcB7z8@_jJak$;pw>W|vI1I9u*x)tp10Y?2%{>X>I=BTi3k`L78h(gAN z+N7~iT~qB6qp?tZk{z)j5HqS5nh&(TkR8REe5d}%cN)tWhzreIYLo0}oWv+*G#@Bt zRG-uzjkB<|ME%kHdjRrBIT{Lf#AuwE)-81C++0*oD>)Go$RPyC@wVLsa|L-)L&ueCdHF{Cm$%*qhTJ=Tp{0SU!gWB z)>MP!JJmJyM{E$pjK)cO9Q8+er*)9pENqU*cba2VFBCKKff&{NK*%5YK($MGAUlc+ z)iwD}c2rA+9Vhufxh?E`2qAyu1Jyh+@`37%)}F%7Bl3^NN&eCOo$7`9qc+J0V)sMd z$v>)3swMJ|814NuZwtGIP^@X3RJ#-xx{FeqbQY$#kbjh08cSj4AH{`yptX)_m+Xj9 zn>0>hR7=GEU$j|R-|2i!^On{n+Ha{oDK1pI#0r~ts%y$E?Qs;d!umjCp}S0B^FVPS zA84(kJ(bovsuvn3*-<oa zn-nuz&&WTD88Mn;WJmLe>WpfF`YY@mmfECv7PdYqw-jrN3yrg|{n0u>F{6EjVn+8( z>W^4q`=dEcv8J;k+0i&D540v9c5GiUtwrf*68AM_Re@#mi}k-L}0Q==|;Sv>XsKG3X;&;O^*nqd5| zG=1=39IWY11wn`veD6^3J@qXu^~dPcANqRq&u{;us1?0pA2e3Dnn>qMQRxCH_3mmj zskwBa)Iz#QYAIbTwURE8T1%HoZKTVjOzCo|t<+9R73&pJDpyxZ9i>zrJ4;=puF_Rf zH>tZ6ldhJok$OniO4ms}rCw5R>3XS;bc57ax>4#U-6Um6H%tAc)PHF)P)bdrLDFC; zHE(Z~Zj**ew@Y_O!=yW=)L^rG~V^s@Ad^r|#LdQEy=dPABh zy(zsVy)ETP??~@T?@5!S_oWY{52eY{6ltpTku**ESo%czR7yzGr5Vy^(oAWVG+X*y znj?K7eJOn<&6U2E=1KFVTBf?Hi5Bx0C}$szF!D! zMu5>;a0=Mb-24gV(WaI@N4vnky}-_gaW(|@$mM=4!=RRiLYuVTQY|%xHqQn&9pW+w zd}sl6Rss5}1B`s9{dOeyumjj(;KQphPFl+;)^u*A-1dU8Q~@6*fL#kXYsx#>(K(CuaNKji_YWXuy}^$5&3$0k2pHYNDV|i<6l+>{={!$uHV6M`j+Fwt z`+&6swjCHf6CnR659A;9cOs0F_V>w9yHjC(sS9?KVJtPlZVs?KV6?u_zDdues7*RU zr-Sd5qb%_6C1`VID}NTI=Sx39n;$`&55qVqE>zca&!IU@XWBIIkJc=@8%_b=KZE{S z!M%#ke0!nI8)0tFx!BhP<%sq_+TUqUrMoDd`KVrK{ftBH4ut&eg?JtbEP&iT4EH!% zd+6C3<$=z$RP)p(o%v|qmWSGH0`*xs)7Ner$OFxz8DK}}p2EhA;zG~JUIyQ3KdKC| zJ_;C}QA)rwmU7VMi_Lugjt9F1kRw`Os3z!~`~lS9QdlR3fE}%M^gM(=tO z5bNSlOQWE_eCV(AmA(c`K!1k=I}X@`z$h-XmVX0l-D2>4B-H1zFwRAgBihFrLS0kL zet`aHeWAUdYGM_{jP@MbSK33J(Y^Q)SR->`oKLj%bxqHqo5MU>3;ogAdn?#c9tJ@T zQeDr2{x$-;1QjX-8Tam3&o`**wNYMNU+-g{!vX#XyJXQ zGed=T-j3G!vM|m{;NLN@Z^mF9q%$V@R~p9h4EV4g*rm|s7hty)){xi0t}^Unl%pr1 zzXs6eM=%z;cNrDLRHrQ@Uu((zJ7=>(~g zbfQ#QI!TI1Riu-pQ>3cWsZuqmx>Q3tO*&mVL#ipsi=ei2rj#L_C7mtRk?Kn4NcE(1 zrTWr&QUj@>)JSS9HIdGjqS6IYQ>mHMT)I$dAzdW3lrEN9NtZ~irAwtY(q&Snbh*@4 zYA3aqu8=xNS4thFPEu#7i_}%RO6n$cmtxY@(lt^K>00SJsi)LS>MdO_^^tCn`bsxS z{iK_uEa_&czcfG^DBU6rk_JnuQn^*SO&TiQF5MvwlkSv4X}ENkG(s9F-7Srh?vX}I z_e%Fk_e*1>2c!q3hoo%jVd)X+QRy-1ap?)^NolO~l=QUpjP$JZoHR~)UW!XENaLj! zrI)0arB|d^r3un&((BS2(nRS^=`HDPDMxxodRKZ+nk2n1eIR`(O_rueQ>BljY0}5i zC(@@5FOchdLLB5ASo zgY={Hle9!yDlLGowQ!sAZ?U3Nt>m7X^XT~+9qw6 zc1Sy=UD9spS80#*o3vNjC+(Mhmx^A!*8DG~`7iz3f4h0?`twqyd(f|VbI+nJJPR)J zECjpoN^chfyWE!EE*r*@1pi`9q0J1>f>xd-U@Y0-U$mTWGYfo3HuH8-7)yAuw~N>G zED3hWQr<3J$e0BKe47!7OR&1Wt$Ff2*zfJ4+kioR29TqmmiI4!dZ9X_`4>Ic_ZMyL zSqLn+(Ax!2FTn-g4r{l#w@Xk>Kpvu}_%=hR-H_(k1JEXnGup=6C15PHh6L%p&FCeb z;as`S+a+K=gk8K{w6SMYXNgO_U6ke#)NT}FooMI#OF+%Xq2_ae(R`0WEd{svafYXQ zMr#4h+XVRl^DiBI7!54h(fbgGxf!FHhyJLpqd)rnAt>X=nP}iyNMnII!}SwN9}2M9+l&65fZPq_?B7 zgfLFpkEqQ=(vKyCHH+3B>Mw*mgm1!FV2%Z_KTz$)U@QUbn@Ko>(Yh4Ce5d-1SNCyA z?(lUM{|s2ZXR)_@e~D3^74{Ak&^ZfoMDqa|)DoS+XfKYI_HhZH@+?}_v&6NY1z-96 z1#kunF7s_t%o30X>W^X;!Z`7)2k_R! z)F!UwcY5CwPlE67dpkOV1yjIouxH`*p3$8ofVCX=F}Tan-Vwdrk28e189WSjl|2hi zY+#?iMC*II5YAb_alXyqcHd?IF{6E&)(KpD;Jg&g^y8#+asYNgZ{KF3if6&Mz~GJ^ z!1I@2lb@SG9iKn)JqqWn1kEGZZxhfa-Yp;xA&e#5=3|}c3+x9U&#!DT?lJdVyw4|!ZW!5 z=20BZ$>e(?+m9sz=g8!l-j3#UHjFa@d+}Vj7w?6$ek{X}GuhCy$S}|1u-_(OoRRjv z%>?X6iSphqpmlx-*qsOL7SHIJaTt2LDD`)VpYOq0&}I|QLdXN%t3vopBLR1{*bG0G z1o$2=4-es)Bi#)X@L43?JE)ct@T`Q+ zU{ToPu+AX2Q8;TvVZBa(T>yJy6!JiGjP}L^oH3(R^K^!WeeA$XcSH1pUKRY~EA_r> z>MQ)?&;P-z*TwaJ{PVY)7rlC2^y+o0Y=%pBNky+-7rlC2LhH(*Qc3ABDNRcK*BYgy z($W!98L6yPPD+=Kl#Y^)mdZ=VNXJUYNfo5yrHaxCQYGm`sj_sE6p^Y(CrhVDRi#s< zYEpHnhIE>Ax^#wAQ>rD^md=ziq_d>6r8-hw=^Uw^bgooiI!|gKHIy1jjin}1>K{jl zO8pkLwEhMw*7EU^<9wV4TH*#d3u@GQC=7}zDYdAo3zA1C=9z*rKS zeSgtAe1GAu-Yx+DlDi6L7nJp5NkYt`CA?h}Y9azYgisSP7)!9k`yPWF#eVd5x!-%1 z17nH6T#2pmZAS7v%K{%Vpugx^-zL>r4zw8$An#Cv84$DGP!q{1-iI8hvm~(CBHv~L z#*z;{e;3OIXp{#h~V+yS)#|J)Y5e z9Ukw;lIY>v48QU$ps_$agT21Z5b7m_IhI)N+f1zUEP(!K4~WAaM{&u3+*X2GO2D3z z4|UxVST5u!ALeHCOCQe(u&;z0y0>MR%X7lByQ{+9sX zBZWLKg@^dHAWm(~1mf+CrN`im6us>vh?{Topf!fW4xe~(Om=8W+P1Nx*3*c;; zndkFB&+>BM&K!Yw#(>fOPS054FyG^FKgx#vot_gVA%9eZNqFuSLY>80`rIaAjimiH z3j1Fa?xIOJUnk&P9>V^hPbmH8creZc%&`QVO+#R~M#5bN#{zRYTFCX9_F`gm=8Hle z67c*bggZ$B_Nox#8N&13D9n{8w2607sHG^>d^+SW24f++$W*^3w>;F(m7JqJ%LluV z>J#qh3HYov@x1pTgy($p3@|9={i8iDTGHEvbVh;a^TAB-AI=rnI|9g2a18hW{w3h9 z9klg6L}4utTKTag;B&R`W#3;wv0m!!;xNtxJQJs95Fylj4CXuC)#%JX_qY)9N6%(r zu%0F1+!Kd6P5p(_eU4}y#B%}Ms{+^qLRfbr@QjSkOA$C@#%lZdK9PefoWk)M351DGqpGH*xz#o%0?T;kiLu_S2! zBOjpVqqOG~ymj~2SFZ;Y{9Rb^U9S@U@vE0p|1>?1y`EX{Mt92mK-1B!bw2&aP5;-+;(u*=)}wQ#|M#YEN&O%6 z75?!jzlUyuA>;oD#@}t$1ml0D>4OL3U`=-_2tusjdxwJWsc&hiKT^NRI`#E;-`+1M zq3a83CG{;es#K+wkPekfN{30Qeh!yPNu{MDq%u-jshpH99Vs0p9W9lYj**U)j*}`# z$4eEZ6QopKohVh7PLd*073pN@6sf9os+3A@b*YAQnsmB!hE!9kCDoSBlrp5Vq_d?u zQeEjBsh)JMR9`wzY9KX~8cC_EaTDo$DJoqcHIJTDnwf zBV8tCN|#G*rFK$#=?W>8t1G3BQYw#~r7lue=_;w4)Ln{6S4-DOJ)~=;>!hAiFR8b5 zz0^m#LFy~rDD{(WlCq?mrT)?YX`qy<_CeBMDYeqvD%~axm2Q{rkcLTjN})7dx=R`% zjg;<|MoITbqosSL`=tA&G13FlgVIA%w)C*{i1euRnDn^xg!H5|R(eW$T6#u$R(ehv zCp|C4r5B{}(u>kd(#z5-(yP)0={4zf=?!V3^rrNd^tO~Ey(7IVy(dkQ-j_a*K9nX) zQ>3ZVN76LuW9bv=Qz;=$mu5(xNi(Hc(roE-X^!-T^riHbG*|jsnkUVda;0yi1=6?D zLg_o{dufrhSo%TwQTj<*A}y7cNk2LzuUV$#*pHBt}h zTIo8er_@X8EmcyQQfqb9b;F{mlpXBrj5VHB2UZK%slaCD`TlBx-RZ#2238eV17Pdc z`f=6;yTZn^GQ_1e^j8honZPL4r-2>iof!2;b~G09uMhZ;0gUYK20O|F&7&dEW({DK zfYDe+g5Al5WLsDJxk5hFf&PvI_6*Dwnwt@5b2qT^z^DfMukvx}0&P+r$iH_XE|Y-K zn$-}-Sr76~bL?e^OJ(Sf=FxT-%X!e|Xt4Wcz0coa5Ko$a0gR<0Flw_t*o}aF>;&*V z6WXi?Y#+2qYt}ljn+f&OW`)nuHfWRjqxnay(FQ-3BOnh~Ks+gCr+^);b#y*^5@PlZ z)co@>7CM8`Izj6av7f+)lVF_p0P6~@0x;VDXf3C>oD2O80Co{DI%CrLjO^&lz6Nqc zdjPF62+5p zM6sr^5Tm=(B@pW)fl+R&gWcu8$agyHlkaCie>5LxEYu&ZSu_^fZ|TfH^MTf^8z3&U zzf;U;-KBdt)eFU%?8<_F^MHK^`^ueQ_Zryk1-2g;#f;V-I-^iLsXl2w5PJvwi$OfU zg)@65*wOQeY-lq9Z zn$B72Fcvx&&|IPYmd@TKU@V`2@1r1pUqL+ALVukgw=Liy$`fT7K7Z*hW;{Pty>6o z^&v+&U>Ap2lid~Yd~gf&_Z2WYn;rw}L}ys*K7#%(ha81q*9z9ppTVv+JcEA|>~?MU zHFy`;eGKeyh-W8YbcWsx{Y}~AeYg$m(x5))gWY>DALzOM2B---pXEVKd;;Sv1+o4D z>>dI}d%zyB8@$8kh@N?j{n^{y3;iXbCaAv$A=W=Yf5jly-+~>rIT+e}4B8wIjOOhX zus_gwz733XE{tU;um!}n_?k$99o>CtoZmp3bhg<6cJBhCIei(N&vrqZoi_WJy$5zZ zpe9N}-pjzg*&p_I+B>Kwz9t`leFm&O`1bU%c z0LudZ_V)MV91U%Tz!Jdb^z{7=0lTum76QuzR4ThzrH6!d2eC2((GHR08a19?>{yuC%27 zuJQi0?B?0E&}LW2`%A$3LYp;#ExFo{b0XCIBxsZN{u*F+6R;{MVYf%Su$uL5=-K%IRKwe&okp`Qf1osfq!U=OGYK8yqQBe221 z)&ryYJ`?OHfB9fn0qzeKA)ceb?h~jNI!AT@yQxr1w9eNC-yZ=s4_H@VCBX+;&u9ESp@c~n$RCT525;`8caewX`h}9b}ONFGg|pQ?g-fXv)XyPs_^_}W_NEF zp>aYUGJy4lxTFEg07hqF+Eeo(o;k42=icmNRv*@$v2ah#foF0#kfUsf3!UfbISSQ$ zOX!d8z6r3SXDmbDIYTcp?e(VVF<*U#!>;s zG6&dhsNF0$3s1P%$7~Ml0TudsyU`bV))9Q5c|>6 zAK0Zs%=*AQIvd)Y2W&X772pH4NuNK^{{BAncLRLBQWNZMhy7t0_n!8nHk+XSow^mjVg{R(?yN3d%I@vIH3DYV%W_I`R^&<)zW51z3c zcS4F!%XN8+6-3u z{`AkH`1zOjo6ix|1g#TWA-A;lEC3&>!ko?qyQ9E&TC-a2^>JwdEFZ@5J+R#{PKwLP zum?N~{lR*se=^6{3+3-_u$%U)k7rGoN3^!mo=S}73f079i0A9TXbqup&VV*4e~ZD6 za(gS}ub5{cuz=RxuV9?RV2(|MdifUG{LHiP2=8C8&D#Y_JWDk5ZH8sM56QEAn;AcQ zmJacZF86i;w3(>keTc$Zkfc4Qly5Vj+J&=*{;4p#W`!_L{S#u=PXFwZWzma)(R_ef z3b#OxegJl^ucdGZ*g;&vcfDP>*R$XbKbBylx5FHf@4J1Q0o|+M>>YgL+YDhICCd4l zptE=M5pNeh?^&XqXTdW*4`Ea9Ujp`{@F#B0ZITb4db<#E zOXm<8ORygLTj*KzJI|67GdR~p5A*R%z&In&Ut+UgCt@%k5(B({S(o~8#$YVHPxf{p zJSU1n?UsNVOu$~8guOTkXNIw`r!Ma0{Y!ts$Fo8)xZ}b3Gt$+!nR|_IGup$CGlcV5 z9G(g2U&gfS60H+axT{5B9gM&kED7}z2j7FIeLN$l`gn$QyzhyTe*Oh#dlvuP_m`k& z9&mmM_jv!JWxNl;c5fH_3XIO|@C-09(fb~44dZ+To=bh`V;#NN_ZL+3ZHBO3hY+(6 z;u0+N@eJY4MY&BJ4l#rCHJwp{_aSDre9VGU-oKz5upgmK+Ed|dO6P(ool#(|3*Pk4 zHKMRCQBBafE`^Jck)b-cU<`}Ts2X-$2 zdmI?u5#THpyasLd0|x7o{+V^VPwSsg_iQZm2j^t{lj*)qIA`JA9?l{9r{8^l#{(lf zSa&hjj{-S3U~tmGr#W=M7R zq2K?awARtwgnLH_>k^*bU`aXv^C8VKcm@$Z>gzKG_mv3LO9*>-bQH`Z zc&8=-pVcMcOq788QTU?wJ)r*JeGNL#2SfaP2&ThWs(2QK&xj)QoCu!9CgC%b;7C6f z`kW-b%-aR9*i>q_wWpOzhDSFKN|__ z1hEV_@5V=X{|>x6_SaXh2Ne9JK0o^7ORo%gAq79DzEzXb{(S8^^*<}6{?ONj zbtaylGW#dZ9-eC8Kbvmx;Y0tZ=|6r?chSq@jTPJ`()m(Uxv) z#ZoKj5~;OxsnkZgOv;olm)c70q*Sq7A$5?hlsZbCq|QT+9++3HcR=^7HO-r zP1-K)kakMDq}|f5(jMtIX|J?T+AsYsrGDRkF{$Wf@qhoz;={T%NtNkAzxn|Sf!zU& z`Wp&%#D;@ie_#WEQGbKL?iOG%U^JFn!R}^YekPpPJhyJKODM#cV*-_0?n|;9t zirEOTyB!$ih~^5dOOzw>fnr9nz7zbr0T|`sCa|NJQU1uk(a_&*z-XNy|0sX7uTXz< zMxne@ZpjDA?I?&D)hGF0SUd8a&U_SWswIjU?fqoe3*t%nqj=K(PHoaSDP}ZpDMw^S zVi&x+XiSc^W5u9!EYw-st|j&6=0R|5utWu3`V@d*}yiI`xus>MQogpMSmpUGQU&mii&}7Io_D z(LcZakD``(VZ9(~MZej+=w3JzGy&#R3UX)&vUY1^wUX>J0vx1}8E9qC=^J!z8kzVw0gp)^^VB2AS(lBP)?OP@%eN(pJYlzI#JGijzY zOPVcxF3pj?kcwVb4}#KKfsc^NNM)sRQo3}cbd+?oR9-qpI#xPPsvsRNRg_MUDoH0w zm8FxUh*U*7Svp0kDxE4-ld4NKq|>C+r8A_OQZ1>rbf%Ocoh6+u)sgB-=ScOWbEW#y zc~S$Zq0~rfEH#l*+eB2lKx!)e+kdlp?C0(ms1y(S)f(7kz%qe#2X+^*zQ6_pyA9ag zz=i_L2i6-{Ghi13yAN0ZY{N32+XcWD1KSQP7g%{1=V8E(1$Gp$3xSOSHW1jOz#afb zbF2f{WdJJ+Y$xPlHLxYXz5(_fuvNgwZYtQ_53Db+!-36N>gUP}z^($;8dzmuvw>X$ zKGcPp=$7>U?OpEK)4zC@y~?vY)_690t!E#u^K8<3&*lLOHh8;!z!EUd88FUyVAlcI zGr%?gJ08aJ0obhvcKd1{vv+~*S?TR=f?7&j;q7KZ?T&$(zYpfo>tHt@SZf%|3}9`+ zzy82-VQ$jArT#vG{`LUt4EZ}9@}38F=K-U!JOblv0_=N;=PY0)q0Px)cOS4Aus*=< z1oj}X1TeDe2zF6m6@eWCY#_{|Y+!SN*!00Yh3G5C9mIkZ_umqeVDc0-2?o#M)6WFZ< z_9L*Bz~%${0@xg2p91>|*koXD0i*laCt$Y_81?rw*xd(g9I!aB2Z22ftQ#T9bD{T+V|we}O#w3~lE8;B$K@^fv<-)$Rzes|;-4Pkx*$!M~DF zyYs;A4PZlnbpdw9kKTu;z>aES9{9Hg*z>@q!&q8_T~o+WN3a_WdA}3vCIVXs>`L%& z9N2vgc89_K`fks5 zZ}Y4b^!LnmZ+9y6*LkP6>j!o{cX_*kU>65A@>k#Hpgo=q0ao=lZ+9cGHhaC@aA4(u z-43iJjAbs^Jrcz1dpZljZV|9Kz}5jPw$I1xFkoLno2!9kK;Dmn{*Hr~ZG!&p0#*U~ z8wz&y_xqStfi`OcBOiW%v6O>0#{!!PZFUF$a>4H8-+f$mfn8G==ONJMY-n>2%*}0J zR}04S7_@odrMthrtp0ajyZ*~tTwesxTL(6R|tJWE^S+ngMFmRH)d_!DF7 zSaR!omc8$OYnQVLSh{aBV}NI|eZXdV|1zfgcqTSHWPQjz<6+Bk+CE}gvEOZnG@$)?qe(IZqvL*_SoXv@E>kBF~1!JgYj`ve=>#mPMD}V_EE+ z(U!&c-)&hm%g>|mq&uu#@Wm~jb-l^5=;zm47W~k|vT%D>%Yud-EDK-Ev@DU^+OlAM zE6WmxU1C}Apl>sJe>-pYc_+)lYTZ4X;A57&xR+k%Z@X0Qh&?B$^$Kn9Y4sj_&Gx?i&nkOvP8+-Eenecvn-x} zr)RrD%Yx;@ElZ#0*NNz4zh*_^BW;_RcldQFy~`+Tm#pd6!OY)0%b4ZY$mHGk+Wvxu z_gR*?(X;&L{CzB=tv^HOZ}2RH`(|dD2kkf$k9(F?{vm6Zbw99Oo~3v9=lR@EJc}Id z?@sZqp2c4AEN7`_>E-?XA#CJXWH7L|Jj-3~Sw7uiuk?3|%*Q>8F7Paw{+P{sdK=GT z4|o=S?OFO^{tgth@GR#J&+;dGma*Bh>{FhwzGt-aEIQn?>^D41aRb z@GNZSS^BM>WsmhN=Tl%w&tfIU+E`~*^DJoPS$KnI`S*L4`KD(X^F7O4=~-?We}@fD z^ei{Svseeu;ypdfy2Z2XQJ&>L32cIAIa54K%<(L;+_QM#pLt|g@htxW&$4gvEc&!( zkvi6 z^(>s|S@4Qy;R~K6U-vBb5wNd33%7d~ImyQ}Xzy9%e$SFKJc}IXYcSf+v-tgZ1m4VqE&9Uu?~*tXIbJW|9mhQdbzjj*UYkT z+Bud5FZj<%!lsq1UHE*uWx*4Nde(5KeXbu|zQVJo=6km7W6x^9XD`=3=k0EM(6f%A zXZ3n|_UxseO*qH1Qk6Z69Ol``6{+96c<`@jr6y%`VB3c@VsY)f*qdc1ctP-@Df241-2C&7z#sEtIn+9w$F!G@z z#3c@l>;kZB39K)$vEbiWu#17+Ot6~^c71_0hc?rJ#i7meV3!2Dg2n6~y?R|-jr{pr zw~JoAE_(GkR5c8jie9}gdiA>K)$1T=u2-Bdlv+p^NiC&|rB>1<(*KvQULU<@dJ|36 zgMOXA-?Op73~RUSH*Ys|hi7+h^K8#b&pu6hw)zLpCIjog)Y~o0_bj&2v)aFU)}f@2 zXV-{l?W=lLv!-XA&-N@h$Fr=4o<-_-Rvy|MTg}^LRsvQUSaHwdQ1g@5`W)rud6ok# zy20CJ!d!`#^*#hAc^01TSr+6y3v!fQ&$rnT?4nQ;F=#Uz>a2GYKbFxMo@E^GS+K_E zDC0%Xf4eq!0csZ%UldGULe_0D|5vRH{1 zEo*<>vzFz(FxIj@=Rav#&5NI~Y{CtXSr+L%&a%Y|ybsZ;FI&5ugty!M@C(*%a*eoW z?SP#<-rB{U_2Zn-_;qWSG30H_lCvgR*5+|vOJloyZ0*v&`P8x@W&K=<5AtmEy`Cj6 z^DJE9=TX?svk7y&55ei4bsXmBX85^}S;neqHfE7+A6d5eIM33DO|^Ex#h&Fi_bis> zS@@tIOa4IbU$T~uOLUrNxwU<)bH{j=mGCUF+_UVho@MRxEK$POOX6_Pf@3|)t?XGM z16U`|BKLWg^^s>8-+7jk=I2yqVx(u$r#;Jm)3fO3o@FfdEc0j2#xC$I8_sU&JH6fFeVz?D)St6*;ogx~&f7(f z^K8foo<&deY(f>!a?kKAgf=tJ^md6Fz~IcDR@>X<*YYe0W66QLOg6AIxRb=|`myYW z`%3P4-Y%noXJLKM(&?T9_kc(<-)0o-LSXseL)!ViKVtR4zur;bW-i1mp6Tr(P=itE zFCFf;*$|f;VCfKRV)>1{fB6v4D6jy=k_A4*VIJi|JTp%9KF~Z$LYw)}CaneeP)j*5 zr(1K+b@ z|I4T6m{6beTq+Zu@8-jL7KgEfa1P0ZIh_C>q7buKbze&nu!{qW!L#i+F{qaq#4}pa z`w)ZuFG6bwj3oi*mng6puq3cJFzgTZj_@oWvn0ei02YCm#bK|?g?X!gpV&Uv$UVig zB-C{b?4n?o19oHKZjn~rk2CFef6vJRmbb;*<-q4-QMjw6zvbIZf7!D+BRs2miDv=a zwevppcl5EtJeyG0v-*4evx~{AJj>YPS=H*kzqxmLma*HjXkQ<*obNnq51+@ihx5cF zSj(^d#`pJ99nbbQ^#0Y@?K%;w`+;S-&Hd*jRcq&1yYwv+ zEz7w7HOo4ddBw7pH;=b$?>plxYqaud%d*n_XD=-)KWgn}W;|rshHCd)Rw8nbW!D}z z!m>UFd%yT)afB?q*yEXZqYS@eo?EK6Kk)3W?)PPQ!3 zu!3djFO;z?v8A|W;V1cx5BkE1{xVW!iDlvHIhF-yedyUouUZy4_ZiEQw?AxIxb9xd z;wO%@EV}tl&)&J!vcyTZSQZ{K(6goeEeme;ELy^|pzh7K&FHk7EDI;x=-H|pEK5`Y z_VV@KF526&;4#mlqk;AI4BPDC?Gj5oOBVC~MFx8od&jfLCeNbVJPS|nW8)bnyj_q4 zcBp6Jv7RM<^f3!tcoq!vEPA(Ri8Fy6<5^G#SivIr*H^Cx6#QLS@LjJ52JQdy^C1O4 zr@pnQrC(!P^xAc5pE+NON*72?rDjrd=|ZW6bdl6jx>#x@T_UxXE|uCymr0q@19qUAjXWCfzB8(r~Hhwdf`7?c+wbppHXSMgC%Pt?6PuKZ)9vSy} zXnB~=ZShk)tCr^3LqGcd%2xDt*HxZxYw-TLxt7h_zreD@-QQVu? z#Ii}>d3JQ;pR8Txn~N-~S>OA2$qHXDHC~-=+noOL2bSdze%-Pao1e36SN6k}jr(Yn zWy@CFVOg6OZ?SCF`2Loi_IQ?MgFonNS*eWSmQ`4Ik7b>&zt^&6FL=9Oc8;`mJz9;h z?A<#(J7wzK*6!!sew;bwv#s41?>}kTgAc?lJLfcCOQ(MRp0(T1W}0Q644h$Eof~Ia z_U+rA-E+iDYd52hpGTGN`^4Hkx9B6wf__shn{>&Cmc4w$`<89F>0QfyU-GtPi{F3K zvU3_wwCv3>Z&3o#AV~)jH4mPw?}7_jMoJ z{w_b+&%X*wJ=^m5r?$^y&l{^dQ-9;@Nc(Bq%2Ex{dZ%X(9q-Tj-!$>;_v<`c`JiVV;10WU zrMG+ZNPq7re!gdUeLef_Y0t`i;n|d(o_%wQzXO%X^z6u?o=ttpvzc=}+q%`WV~+Fp zvHkTu>(SA(dbfDi=poOpc*V0R(>xoz(6eeAJ$ts~H+HRiA>!H02A*wd@7acao(&!C zS=I}lO`PJ{vEO($W{qcC_IegQ(%)fwSM{uWJIG|%R?@GSpo&wjntvl|}t?1gcjZGX+P`EPqR4A}V-yxlcVd3Mj;o^8F!v#&aO z)+*}RQ`J1HdxU4#ZSghn!1tatpXON_)Mu~zyKvw`hB8-KB9k2dpcc~j3$ zZ0Xsn?L3=%ooC~Qc~)$kXFWdiZ23mdMpgDTaZEeUUKruo+b~yN{@B}%`OLH7Gd+tf z@@&e<{`vKSS3UbY^Lx7vRw(74HP@f%*&Vm|=jGp>@PqB|=Z`$A`;dRm{^m6Qyu4J+ zrMAD^#4^igGS2 z_%zMuD7}rZv%K^CneV&r{JpV6O@Fulyt#ko(d2ahOy{#z{@GfW5%1Z!lrHy{WsSy8 zuq^A$7cI+K?LQ~U%^hp)(l$J5*{T{3S@y=r`z))z-+vx(=99y%-NWN{^p{hrtg!6knhPu|f5r^UcJ_SNvesw4XxX4& z9^_*q3!|n@t`*+p@C{Kg+WE^Ut*Gs-J3G_DD6)o}Ez3+MU$dv&=f4JzdkY z*?8`sAo?Fp3R@?{fmtBtPSM$ z@CM#)cf_-YN_+O^&YHH)D*x=+fi?G^ymozfF||_k>UGhp*F~>hf2x^~kWzCob=LVz znkmhaW=o$-bEGe%FQu=fxzg9tJZZj^D}5s^kiL}`O5aJ}ON*q%(ht&)(ofP7X{oeK z`dLa!%cT|4FVaeBm9$z~BjrhJrFGJJX@j&;+9Yk3@}(`(R%x5GUD_e-ly*tGrC+5z z(r?mUX`i%T`dtdN92Ap^OGU3<|GQtk{$Up5pURzl&#ePxtJqvplE>H9mqthZY?%d;NaX4-Lf95~yu z@>SrNP2RLX5=t+Q`MJ0G(N&2{t!v=viB&>EIqhZZzrE!u&(Y;jq6 znyF{6$7#OZxe;yqB;JwV#DhuiWtU-=_jg1NlEKPbBkU(3%JwpHDD-#qt~ZSu@;e7^g6_*l?- zGh6@4e9U@tfbDZFJ}y;=V7pO;k9EVhvMtSb0O$SvOt$Tx*qV0a^Q!3)Y*VuH=j8A~ zY`vn`%4XotOP(HVQ&zA|yUW%%7k_5=aASKjk|)HvV3C8mWUVN1G`En^H@(0#U^U)YAGJC5siX%V&%2evuQ z*hY3?TQG?2^k}y4Q`tOcv-Ozwe`Zdzc-+cKY+r}7W$(-8?ZKAKm91HIww1-$>Stjq zoS3a(Ja1?D4BMyeMIN^;img~UTiMNQFV?bcTFF+;UObA=We0;5W&jPk` z$xq>NxAz_;r>j#q)P@C@-^&J$M}z{>j^5!J7OTta~9oAFI8C&-;tN;Oim&7x{Wm z;l6x5>u4ljA8c`puYW#_S%vE_+q$J_B`y4Yk`MiZaNJ_wnP{g2r=r~ppMaL_odwNr zqA!|l+W~0l+`6NU8`c5M=a3s($4ahfE;s6+t&6CRmU~utv}0*Yp!M&ZA8qEYY-m%R z)1lR=o(!$To&;#4!{1wPGyCo1d#=Z5-IrWPD`Yu^)*%`H1o)y8__x}Qb>!b%J8blH ze7=1*p8e|fX~k6{!xX!|Kni*E%xj7VN|-iAt*Ml=WY0Bv&a^N|j2bR%ujPl}@Es8B|7=PL)gLR(Vujl~3hY1yn&*NEKE^R8dt-6;~ycy(+0nsnV*9Dyzz=@~VQW zs4A(-s*0+rs;TPALDf(-RW0SHYAYvIM>(sys-CK^TvP+qP&HDns1PYchy7nR5`V6_R`mstq$T_N;TKL zXf~_%pfx|c5AEDc!}C2ng5zH0Jb{*SOf*`)HK)-6ozI|kdKZKCb@NHIDjlNGvfCX% zn|^vbTFS2>XsxdXqdh*uzbt29jj1>;+lYy1_Xe;Xzdr@X#kLGY^UksmEl{{do-{2+-=xSMe#QAay{=W3+`;e*D|5h3bYd!gU~X}nub=X z9--Cp(pKYf!{{-s6VUpe78uhB`-4%>})&|&YlkK7-hTHnrp z`?%_}!1@;d+ecZS1P6W#`b&p#snDuiiNI-w?B7?7rs=paC(d8TJX_I9O-_ra#K&sz zWs57H$K$x^Vf@SK4n>9GxY1V(zgThhF&wwH%1N|MwtV?0WCGj#_R%=aeRrbJ?Dz05 zGd!Dsf0<#{7d&pvEdIrc@mY`HYpMD4Fxtdx{0kX3cG-{PTAbT~*3_4O(P72I3vt}s zO%u?*=mgdV&7ha{q=PSJ^E|2hI~#0v{r%!ILMuLrRWDLMwng)JO{HXuoFv@}tj(Cibo zL36&qzW}mLRbCJ7Ir*1E4)0nApU?43ZM5JNY?t>r;<&Su*^Xyt`+#N-?x4i3_16yPOxzZB0(Jh%x-jHq&>_h~rW>;rH7i z^;6=wm5uGts`uv0?~Uf$;J5+X`I6$EE^qM|`LotDv}euY(2_6z3+--!t7vuapFtZTu0Fy7xDRKmQH+ryRzR-oaUH)p=d2VH=(6%z~^y!Mz6+kDZVd9yK`mx zy#<p!^&TBaO@&^ABGk9KoMUbI;UbE7Ri&*#2%ljXp1jhkdc zn;V-2&82f@w1g=#p`D4zfEKzaJzAJ^IiB+}#T{ zXvdd)!D}qV9p9mKx%mw3Ylk?ryIKE28=dqD+Fy;%qOCn~0&PL6BWR(29YDL`y9ce> z+ns117i>q%SSJjvR5P~LPk5R)3hu^f`g`s}JDD&Nt#y19T1NX*XwCHySMWjnt$4#Xm5)0zB#TbTeg`z&D`(! zwRq&_dGK1#`}^0dFK{0Gzw-WG{sphwl{3%dGzU8zLmPCSx9gRccwgC3cPmcwLaHrj zo_9B+CE2JoA6`xk2wcNiAtz))uv}6@_qRkz# z4(;K^>1fL)xuI=KYlGJJNdjEfe%S*ZXj$JJ%AaXB#m%ij`(q4SnbSgWk00B*K#u@Tf?@gaa^KvsnEi_+45Con~;NT zW@ffe`Pov}WSi85E%7uq&oH*`*VwkdXB(85m$fB1+fN%d=U9HeDTaACWZ`is+q3nq z!d5LW+wBx=55DvFY|6f58+wcFpPz^R_15blzy8wl>#J_jvvK>EKPUS2XX}^3%I+Vx zU0eTWPV0aEepsw`A=>;WleONS`Rk5u>lFX5PCDWL_N3ccpIZ;lzyGTnAb)+eezCLu z$9hMw^LHgZ@q2wKbtfxwaDVuyHWqk zqzC_62$o-8t^RLrLNR0Bh5x6Mg@sY{{>J}hVf?$VIN9$PM&Bkyt+(a=mxb|Xf6@Z6 zE)?tIzulj5{p0`lZ|zU@O8);xA?ppr)`#_rbro3;R<wcR|C08j_N|j2b zR%ujPl}@Es8B|7=9&Dz>6fBOh7$o8}lTcaXupNg`bDbBXS zo^44fHcJ^c_i}87E3m~>WOJy@*1igxM^&~I)!6bItcbzf4Yt}~?+j*BonL1{gB>@z}ZT)w)acOGfwwo;*+kqTxRSe^LXW(&9Q?O;UW%D)6 zUxm*+?{(g@U3$aj_ma)w8C%B3Y&Y(+Io@FlyUtejB3tKZw)%(J!gsM{-oUnU5nJ&o zYz{-%E_Gt7>cTd@G+T+xY@@#L{+{tR+oDJ|-<53Pdvqel`Tit_gb^|t7!#SQ`8XlMVJ%85dd6TW+5jMw7Y?Z6C+xGKg(o7q+6U z*m5>x>t^`ey0#jRTU(i}lHv2NO%)#JYIweDHF;d}x@9*+j#6!0p~V%>~2Q zMoeIv8f385Y#Vp7Z8^?1^ak6omu$Ba@;>%C3tK9~^_Nl3JZ@xrwhDvU9!_ODXZZZ- zvyaC`Ut)`R!S*=`A9vFj&R2?6<#Apu*qZlYD>R;MXfRvA4z@foY)S63jWfL8PD#V> z(=7_IjjYD@zA@WRPqq<*+4hcSdlw(qMB9W@9k>cz!LZ46n1R;k+a5Yo6vf!#PRC7d$SdVLfbl z%H!@lVXI&mH`g$(sKK%u&YiYAK+6W5LE_JTCYM+u}&J&;xAthU*%2!+G4%oopf7*)AB4pNm6z+}y2fZd=%f z8pb6zJl{}*-7{DP!~A74SiHfOhw=QaH7skd9X#%X!TK52t(U>Z8*HAz<``^@!73T7 zy1}*>=KZH(d7d}eR)ftktiLUW_5R7QouxI{HN*b!c{6VlFE_D`-^jMiaP6tldLH*^ z9oy!$Y=sPV+VI(J(Mq0X)fH@?m$404%2r~D!GhUF8Lrn2T*%`JEnu^m&(?k}TaqBQ z)U(-o2C^-g!PYc@t-(|_r^#$?6WIzF&Jk?J^0>+VY$bi!q6V?K_GNqI#TMLwEoUpX z4X$i4b=Y+Kl%K&Z9LneCv2Gw*P2}}^0HE70`r7oL~1KU``{XJF6^0@wn zdw5(7_on4H-0#-a@cs9H-gNh`|4L)dufMeX`kFvr>CS!YZP)*Di~XNlumAkqed}g3 zM*X?<`p?hZPo!gqt@`tG_y1@9-2LosuZ+;BW=(TvB9FU}U2i0ynVZ!Za>*an5MCE3U}egm8RR<>}%acOb{kFzt( zgXa+*m+>%LNF-a(LAGGS>%4Y=$DJ@(!TpADd)a)$*-q?a8*fQY*CHbLMpPk|bj zKSu`KX1f*5wrMY0@On1O5;otNY_=2GdX8Xw?#&j^i|tZpHV=2U^sU(3o3dqZ#5S=$ zTaYuGlM~w&M>fY=Y<@M_J{jz}!F&zR*Sa=8U&1~L{HRNfoZNfIlux=~3 z@wl)yY|GoTb?LR&4wu!ubd77c!*$#GOb1>{j z%?zAHwUrM&+c5E*av7NAC>++)-Uh8^l zuutE4T!_KCeB*H&zp!Qe%vRzP+ujdsLGRi68*F7fk9+u$ZMk6{=6&UHFMqOyB<6K{ z%&;v5X5w)nhV9zMp2v-?#^!B!pYG_v;~WRFIT((gIXCgR;CpN~Mfh`h-l1&1$Jw%G z<#V8OUD+%lY_A`)#TV!E)Ox+yg4VDlxyj~|jIU?4F2lCADO=V)Yy-x#6*YWMd~YFM6a zPx80{huAI}u5AZz;&DBfvaOiGw$Yz$qG7wXwB>QJ&TK79v7OAsR^u!0(~JLN3p8E- zT*TwN4d2smVfg-g=3G2Ym*;#O9I>0tZVX#%7dGz{Y=aH&0S$)p`@_bZY!RFJy~?#P zTf85CW_Yr(Dt_jR+F1q7c4=ia-`-vg?-vUM`tD;7A4$HmTI>mJOOe?8k8!}sxQ zem#8k)q0Dy_3>}tdTssr*8lj~`+sh|{&VZKMO(w4Td!?w4r@6aQBmrsI;M`R6Y8Wo zrJ_}gI<3yAv+A5WuP&&I>XN#wuBfZ(n!2uTsGI7R`b*tbcT}vptL~}$Do#C657i^} zSUpis)id>6y-+XJEA?8vQE$~d6|df_59*`(q&}-J>Z|&uzN;VVr?MVL5~zgg&#l)s zHqKfObyYo8U%99Ts-bG6TvcP$L^V~-RCCorwN!4Zm1?cpsJ5z|a#!t@hw7j@s!qyN zbyi(eSLLO;sqU(W>Zx*SHCd0<#ZSGeWnE>zd$`VEn_QIb+VYn;&0XJKpcSso_I}uN z9QSSIGql1nPtiJje1cZC1lyT@k8#}jV~@}tR%cs!{vnR*J%jDeNVZj7*|KM2bJ_d= zUrYB=Z0@0PI4*llwt~;@?TKR?mr_Z-gz+!P_3!fcNsbn|BQ4s4_{?aR&g4YfcRwH6rQ}7>Zhx>x zTa=kk;X2;rQ={jG+nQW+)yC)Z9qWYl&7H?}sl}%;_cHN3#5?nHu{dVO*K)#=3hkOD zAzIen?{Qm7o1KsIo{8geoPDkY_GE@Xo@TH+U+##_T@0VELRa2bu4Uo%p1DFsoMw|y-lyGqronNR&TQG+@-)9BN{`db znwMYa#GZV7$-gKoPP2;-FPEOR`MBiQDK}2jabsRIkA%Dpy45L!i@3}1pSUXI_Z?C!F; z&frVXO{((etbn_0^(XOr>ilB-UL1XbZG_=A#*j~Z33}HQ{(LqfQw>}Xg@f5L8op)t z(D2VJ+o$Ajm(Ci&mhc|ig4&Ka4~-TX>?vD;^89&ss1I927+dBSY>)Cg;XLeX#a4X+ zn{Oyvvg>T`zq7gIspDt^kC!#rlC)!MG?4AdM7D$r*`|lEIqYPceUPp5ake)4@mH`| zY?7a48)C3+r+M6ilWZ|jY@-gadF){Ov7W8PQnux@*m8_#8#9FMLwB}_Hf#f2*hW`n zn_Qf&X->A%Y1ncnVsrcCgxk`XS8PKcvz58eR_`ubh`~<9@whF|*jj&ND`&^c7gMu#MfvRw|k;^JTV>YitW{u*KbG^LoIx_c>c=Jln%>Z1WP;!*#UUj;&M* zHs54y1rxKS{mQR1=qa1`CARdt*>22Yd)}4J&7RHWDen*7OW2w@vjyDYV}Va!ww{LL zr*mE>T<_Oz@n_m=RrxctcXR%%?^~76ExeNPd5+gDKIaNK&gXb8Tlk!EM{hodHC-Eh zy_V1Wd)DXcQt>|v^9J%Z@$EZbGyc|_uNkjC&)a8Sd)}^d4#|(}HsziIXq%E2LUZus zeKX()Ux!{@miPBd>-lvb`2_;}{GgpY&1E&2GlKQSM7GlucC zuDreZSf1AKPm;as@Owwh1b)wn&FX~fHYzp0PkT*q!ErW|UC}}wHAC|l*9xs!Rd=-g z4?41S?}}!(xCdH*XCE}T1^v;U=NpLTd3z9A$mPLk;bnc$JZ#ynb>L|hY{svp?=x?F zzD+d;phbD~L$hnm%X4}4UO3J>H?N~}X}aOK1z)?MMMim|1@_}@$@@!t9Opcs9h%?i z)@Vg@xS>^WZ;p0tW)rmW5slEwJmvlNQx-nAxYmF_C-0cRpLb&oKl;VR@XwATgZR3> zUk*OD21b;}d5;}i7R@J!-ybfeHCByN zVO;Z7Cx|*S8sz5bM%~o?%keaLJsrhPwTBsJO#VS}WQA^b_wOp-G zE7dBsTCGuQ)jAcT)~gL_quQi4t1W7)3RT-wnA)y(sGVw;+O5LX9<^8PQ~T8c6`>BQ zNOedZR!3BnI;xJTY}=&E~_i*s=B7Gs~hU3x~2Y7 zx78gLtM00M>b{Co57a~TNIh0h)Km3LJy$Q(OZ7^^-jgB_v(ZCs6MIB>WliS zzNzo(hx)1h+;*+~KY{jtRYy6ix~iV~pLW}I*QWXFSXbHa9xmQ&Gq6R}-x!mlN1C7!>QVZ8nV5A(L< z*@w5?xZU}1-fv#Zh1TPIRbRT`EAZO;!|v_3l$ zp*3xv5UoPd1Zbax3lQs`qSyRpug<@{s-FI`8=-m9)7;n$$0(>G)Ri`@S#&G zw4h9x&@LS2?Zqu0Z=Y@Y@xBrgTne9WV`JV|dVb{BayTp*PIImOBU}%UDjh>xRv`@S zV~ura)dN?e)o8m4EracPv`D}0XpQZTprx*Q747qg7igEq_&QpXg~!p3-r9{;XT?Uels#6Uojg4styr^}XzB7yMw{v|7HwtG zk!W?Z`Jk=HHvlb*ZC^B}X1&p>?d*jX@{XGw>c<$k7MUwIM;@i<5$KB3qL7Nsm2JP_q zacF^+CZgp_JOwRPaIPUC*eT^1gi}#0<4|zXIJ>UsWv)%QFXz_)4pSEpx7ss_5cpEKb z;7zor?XRJEmAi~~@#A^4XIuCfIo&-P$G!c|pIa9N^YMCn)k8SV57!Q``SW|njS{2_d+X@+Y_yANPDyuUTx5BTUw%xuy2O;VsT@%wuxNP-p+1> zR=W_7YuKBg?}lqroM!Ib&Cx2)azkqy#mmgUDlh9NH#_1qtIY3$R>ZwKTIo!^(W>p` z?d)p}-abFi$`@_d|lJ!1mC&RkFV z*yH8Q*ULSZ^0BVbCq712Zo!`mdTg4GuQTUIK9)Br&F>wTyYu@|_-6jBKQ5&)Eva?8I^PcJ4w;x^Xw! zuF!BauakSw=6vMq6U7|%B2Q6<^B7 zp+)6>gjO~330m4a&(Jajyg(ax>m^$BlUHcv&%H*Qu=x$z$K`wt_n*tlSAWp0fqy>+ z|N3hA_0{_KZvXPU6q&Wrn;*h zs;BCudaFLFuj;4zs{zVe4OD}abyM(BL)1_;Oj$RT;cA2$sr;0`8l^@niyEWGs&Q(( znxH1CNoum1qNb{8DnLzFGt^8KsAj3zYK{t0bJaXGUoB7z)grZ61*;`$samF%s}*Xc zTBTO2HEOL|r$W?vwLxuEo785tMQv4~YMTmE+tm)WQ|(f_Rk+%t_NskqzdE2I)Ik-g z4ynWHh>B82)iHHkolqy$DHW|^)M<4_omJ=5d38ZuRF~9cbwyoO*VJ`&L)}!j)L-hh zx}##%U3E|0S8?irdZ-?$$LfiCs-CIm>VXGum9h<^*ZnKb=J-Fw-28$Y{k-q;JDXC*@Eh^wdle2bqd?Q&1~P#vDJIW z7MWo^&R?0bY)=}p<@98$>&>=f1lwwVwni4V2NT(D&19RqkZtQqwo>cadTnHL4qIJV_&c$yCi@ixD{8ZYa|Pk8=H9OPx)K72XOgKaHdo~|d^%Jk=T z)GH|;U)(ye`88x45y8)w>IT2g>Nj}aZ|ve_wzeZRk#G33&39L}-K+UC->ol!c)V`goUPIZ{;XIdDO>&C{MoJOW&Vu0z5$#2N&c*O zuNB+2*ZjG)_F}eEt=UEwWb2Ta?aF)pES&xg+ldcsjg#>6#pPyuTZ`>@PquXn*rLv` zjY-by=s`oax-;3fU14jRm$xPVK5VsivmHyw+jaHEY!BwL#ouIGl$-Z4*A8rz=d&G) zW}EzlEpY)pPAqq3v+u+fIEc+_6x)fhY*C}x`V3)v)|G8-Bev)EZ0>e!PPchk*WSvO z!jG+DUAB=a*yfz&ZLs)kwxn)sw==N~yT<$2uwb^EUDyKc*{*)(KJMnf##Z?R+ts~n;al0l*0K#-#&&BV+q$`I+h((^3uGHL zlkNQswn&5JF-)_g;k8UP%)>3iytiA#ud}}4dfl#dJZ^g^+oXML?F`#esjED$@?*Bu zU)ciE@%~V>INO@KY(>4;u1sLNv4O4sMYi2P*`f{CViS7tv96Ed_<8yzk4xT%kJmNr z_`PG=0k(>U_vwL+`FtfJGoR;ty3Dq4E}vIz@66|8Z7c9OUQALxZ|r!5?ad-SzYT82 z*FPt{Wt%gdub*u##n;^|=h+et;_I#bQu1}aj7!+Y<>l+NiGtYb#j~xf$=4%?db2H? z$ku)W+n2#?!&j*zRrM zW8}IFY#IFdxI6DIAIm+fvuz&F=SSss^ZUx?7=EvEjNtdU%6|NQJ3bMA)_CPP1+SmY zSuqK%z{Lq@0g1+=U3MIcR(GKVtzo56Xz}YuqLtb(9IdpQFWS=;!_Za_WJ|u2El)>& zzNQ`dbyit70$+`?!17>IBwM{-XC`C=WCT2uJAtg;RWxT8w}Uo%BSb!M2{SNe94`Yk4p_R z@UhPRC)>o^eEiI4_#R)(AU@77EyV8~`}eU0mE!lR3lrF!Pq2A?W6M&M-%|@UXM63( z_RpK{eD#L}zy8PIUtcZ1zFPm@?O*Z*FGzH(6wR72HBxvIvhiE65vsphJMYN@P?zLjdN+NidwopM+0m51t}I;u{}Q*~Bd zR9EGtx~cA}hw7<%sotuO>Z|&x{%U~oRs+=_W!)5f)DSgP4O7-lWw;ulMk+t$uSTiS z%A&@ov1*(euO_I8YLc3)rl_fEnhH?U)eJRL1*%zUwwj}Y)Lb=B%~uQ5LbXUOR>5kC zTB??*Z})~OJ+UTsht)h4xBZBbiQsM@B&)ONK)?NqzeZWXTfsJ&{R z+OH0%2z5|Jszd6qI-;V~QFTlmS0~g-bxK967alvFo~mc+xq6{qs#of@dZXT|cPd`JS0B_z z^+|nJU({FiO?_8C)KB&2*6aUwZoNLe>|AZ@D*N3dZ{S(9(gCN@0=J$*bI5WWt;(Il zXf2CGpnXlV2W`~;?P%j$Z9&_SWIfvcAFI&5doM%VIBPN5xP=SQ91qMxt5lY)UH`c_ zE=SfmXh9(}(Jn8XhL*GUB(%?q#-Z&Av!KoBKML(l>(OZ2CyhnxRb?{Toz%0?cGX;h zcJ|yRv_s1eqMdQOj27E79?iFNYNy}rv(~@+d?i1c-;WAt4{p>!TimHBTJhL6XekbK zKpTIf3tI0&J<;sW_C>qg$s29d>_KS0We1~`{4x-2=E(kNA;-I+Wr}QtHg#1^v+SAU<(DK}!g0?t-x51>f+;N<1ueNADwq4Qg%=bmh z+;1A%oA_X~H9fYVrCD(RZOnj^XiMr{M4LSP7MlO;IJ7vgXJ}pDzD8Tu{5_h-(obl4 zUVTAp*X0}9;F90bN)2T@(~iyO4L@IOE4DMszv632W|+T=t$E%XUH**Iyx4_p!AD-! z2?N-kXJK=i^ATT5vJW57MpkC4*_5}JrWN9Gnj`*timNF`%$jcGjN*ECj_Ex&Nc_F@QJx-!7~@2E$zP;ExrpM zmuB`}f#dFtU5(asJs%^(Z*0JExifA->)(Qp*WYLDz;VH6ccX1i%I_ViDo5bB4DNhR za;0Asj!QV;I9itW{N7lwG@o;wdd%;)u@f%f^L4Skj5e{$RkXOJ*U?_@zKJ$-(_d(_ zM&3bdQSdI><~8@w8h+-_M7450z;U(GKSWD?hb`U2M>sAl`D3))-fScHuq}DQHaO7} ze7-Bm*oOS%Y5sV~mgNXr`+00#y0WdaXG`{;m-U$lwnYJK89K9FsL9s8C|miwY;oDx zE+%D5^NhE_!%=Ln=d#`E#I~XUTaJ6Y9~};6o9V{3AUWHugM2Mv{1CQ{_H6zS`8bh( zHQTE0Y-LKbJ@~=LtV~zgUWc>oFdPTZE#+|w4CAK%#pC=t^ZboA{ML?$e7tUV)#vRj z_cY!ghTP)g#O`8zKHYvQUwbN-htJWY@4Uog>w-gk%_?a3TO9Xt8()JMy@ao8bnMF4 zQM?QD^`1K!`TA0}!awkJ?kU2*QRi`O{_UAV+wpJRwCTpb5zx0C|CY~J#rZc7j*4OP zD$Bo}aDHR9rp4Ks-Q?$++l_7I8J@pZIoT?@@iHsu$IJTl0$xXtw(`2oJM|}S6EDO0 z8t1IHUvb(V$rUhiMW@2R=``Tb#dOMYJ&o`XN@4?n@@ z2veHe#$`5t4PWDQIDP}ir3}A@);RDAT1>Y~Xl-2he5`(*b2x5chcjp|7sa53e&ch> zh_NSeTx0taXh%LCLyNk96fNLM6xx8FN6=p9VLMsxFpir)fX~q*4L{v^MfgFS=Bx93 zO`y-612``0?fqyaq7By|R`11eUwZ68+nPBXt=?9?CcdZ4P8?Td(RQ>=Px;!++1cOVKiQU5u7~^#ZhhH~2c= zu@roLaBi(YoMx>()6w#V@^#D#8K>g7pXVl{)jl%`E&BCDw4yoL%9fjewj7A61F}pfB*L%OOuwG^@jCdORd+h zrEdLVeO1*OHsG6#la#XdIld7YfRb5q2)mJX6foiB4DOc54HBn7fGu2$RP%V{pvA0sK zRU6e-S=XbxYOg$02h~w^Ql6@_>Y}s@oIvas3xh&YKoewrl|lmUCmH4RiK)s zW~(_WNX=FA)O@u-EmVutVil~GsHJL|TCP^8m1>n*t=6cuYMlyE>(vIeQEgJ2)fTl? zg{o~TOl?;?)K0Za?N;GxkJ_vDsr~AJickktq&lPyt0O8(9aYEFadkqSRHsz5iczQ4 z8Ff~jQ|HwMbx~bXm(>+@Rb5lp)eUu1-BN$4+v<*rRd>}rbzjA)2kN1Eq#mm$>Zy9B zo~sw?rFx}at2gScdZ*&md-XwmRG-vm^+kPE-_&>YL;Y0NBX0tgP$g2fDzQqUk}5l8 zJsKugDO5_8N~Kn5R9clzrB@kLMwLlrR#{Y5l}%+=IaE%SOXXI1R9=-&dHaYP&JkHZNgF2R!*vp za#nR!Jyl=1s0ON`YNT9MW7R}8Rn1g$)k3vYZmN}Pt=g!zs-1FI?Uje>pgO8f%2Rb# zT~t@)rMju^s)y>Sa%weMkJYxL{0~`I+3y}6BiSDMvc(T!n=y!OzBgNFAGYp2*=l>S zjq+rh?7`;e&i1kuTUZOWF3s5XH)VV5%C@!<+mD89aShnA7{*<5;c*UzX%;ou3xh=& zUQ5Hq{8~;KmbFJq9`~{hTZmzMSz*}DYIf&oUhm5`dnj9+g{|N;wst{meS_J8Rd8&l4FPdEUJ%uq`Ua)*~NVid<|lS=r(< zvb9dfb~rU#=2UE_le2wJ#ujJCmd{{8NqL;7!Nw-$aefBNZ_DEjCt~w7*ad@qNyyU- zG>p4on1?}0c$z+jW#(j9548;I{eB95zW#=7sZ<&sXWDj8rsr{o4Ew|K%slR(VIND8 zgU6jR?6(8+@VFUy*^U~<&CAc@ZWUlFUx+PFVYVbi*bW$MOHm$o+F+{;W--_xgH1Hd zUpB)$OfSguP|9E%4C{7OZl30toNVv1vF$Z%*KacLxDjdDexziZVK~lTHXN6>B;aY< z{_w+VGyOla)qBqt_nOV&Ih)rbwy1k-5C39|y~gHxiEa5AwrtUCn~$)aILOvxFWbbO zY!yP;N^N9ov6ijD3O4Uxw%PO9_RnU!J)Q0DWVR6#*!GQPtLn#g#+NO#4_ixbwtfBB z{Cl(c_Fx<1#g?TDTXZM3lO5Pbwr7iI$7bJ_?R6_QZ-Yg&>u<2s21{a?hY^NxmkjpCU>OY0=U}jX2D3G+ zTW5nUH<*{fni;mw5QFVB*vRI*y;L&nNBIr=Us^Yw=1YTpGVJdy+we5&8ICUv4acPj zcb;ZW54NEl+0J>g)$GbvttZ=pzHINj+1!S(jT+A8?a$^hmhJ9Dw*J%D_RVCAn8P;Q z@L3~Z5syo|lx>jVbI`f28%H4o3#vfZ5uz|4ufShOf!k$b-p#s zdsD-DXmWsG=Pkpz?^nY)bBoJ7&9isd9zA7i{DIBea6ROf;hL&*Ccci6-Ecj!k>UDa zsNp);i{kuzP9@oNZ3mCSStA=aMo`&nDKMdEleGK0_dug~{Uej>Bb+zewYj$4N4Gq^~ zcVyvlr483<_Zz-%5n#B68*TVrNOprwG<;10Q zhvo18{`a?CTkoU%^K-)g+s&sPZH2)`8|<0Eo*Q1vM8o`*w(#pb#%3AM zW)p3Az72+Xm_LkPOS{2rU;4A<>%+Fb2iu@-Y+b$BIvT8LcOI9rH{0R?Z25fIZjWJ` zIEBr9Hk#%3Vzvou*!FEfv-!M>?ZW{yOVy)jHmT2`S>|44bBjf@Y4V8e%QLoxFW4sW zILqTW9B0{goo!1Dn?nSe&B{==8N6<7EK7M@yuj*g zhUXj9l%MaIE8EltY!mCU)p2BNRgKNQ0-IYYwnW9)UKC_YnxCy`UN)cHY*})#eaOMK zH9OnoY;3s=HaRPg`;>)kjlt>}EQ7%wX6ENRZ?Llli!s;*gPF$NHH=GSn7@(+TVgN^ zn`I`O%?5*QWV5VivsuPw8D=mqHknFCbc(zJ!*!I6*3wX-r_K@x6eYTK0Y`1T+eYnc@?IPQ?vuu;2*(M%mvpd3;@gUpb zy=(<{vw3W1yRe0=+9tM?A#86~u{B)5HexAT&?2@I^V#g?vaO!YRw0c`1~ zvH4A5^P0@|VG^6)L^f}Og-zgbSq&4cw2b*g*w!&T6o_1ji_F%Jb z&*tmS=F^7F&y8(VbGF${*a8}{J#}I8b7l*4V%uAb&Ch|&u^QX0ifo@Muw}2zcBVAj zQ+u}b#o4YEWJ{Qnty%`QCP~?9{{7Rze*d{H{GIiuhyDKH_ms`a*nOzO}6W?Yy}^&C49~H`8%3roE>h1 zmRgz6BAp7MIWDY%7CF2rnoZr_Xpy=2{oRt2Ki63*uH$L;=FiZU5od6mW9j>BH9n$Q zF7f$a>>0y3Y#l!Dcf7*a zn$5~uY$GeO-LhxvU5IT%9=0WhYsPPQU$Gf)xSo~3a9t|DVc$HEj9+KYBy4vRv86Oz z?+N&Z#}}J!!?02{2p#o za11|R)M&PEerzX3umucb8*i{*pSu5}TdxypBLDcQ+t#0?YJFJ0SpPPWvQ>#y5|vch zsbng-N}*D!R4TPfqtdE$D!s~}GOA1}v&y2fs%$E|%As_?RaXwGhN`J*DMwXXIjK6z zS=CkbRDI>58mNYZm#?Pt{p< zQC*dn>ZZD@9;&D6rFyGAs;}y&`l|uTTMbl$)L`YKhNz)xn6hpv!_^2iQu!%=HA?-t z_4?0Gy|(WB2~}2b{pY75SwzSb~ z@#ooQUt`;Qo9#>-+m9z~zAxGA-?BNrXKV72E$S27sLyO24Q85V1;cCk63@?<+A!}G z49o12VOei6tfTIC__fr$&i3vC+prk6E=So?>|^`39?f#luunhkjpJ+*6=r+1)%sEA z_YcSA){jHKf4D5)_j}Oa#una>R@?CL`IF&vrsD!WwRJ4Pw~$$K@#Q0%N6ik< zJcKUf%RuMu@THJ4hT9)KdrijYbIdgbEi!f@n#GqdAKBRR>$KeL$B>iQYME3?MF5#`>{PY9P7%g+Wrr>c;lCjwuEV~_#Gi^%+lkm8D ziP;=&4VH+lfnl3>OTgpm|9wg5_q)r=AH4s0eq(d_!dAtw-zNXS<1W2pyYYtY(kr&8 z7i>44vE4Epmu5fWarqyzxfwp|KfTA}{O+=~h-GVQIDasmH@^Ifr@6~ukp??su-1li z*vW=@7-g9E{D$S(|31&3^8>b9hIO07u)TbE%G0c1*gh*5wrg+0{@`KQj{*(n=pzj0 z#TLW4cJHq|e?`Bu-7_3}91O>-Sc8o+90$`Ij-S2;duXt9hU2xD!AcvfromzjuVtjc z{xU3=3-NxrEIBPZnGaR>9D+1M3i z`&fi+cL}t}ex=cDrjHw#YVYj_nPv zC8c2=HuG|c?9R(G@?jaCzkt@UB~`@jGFPrbJLbKCWw+phoIc70I0 zOQbra4yz+7N*z_l)Nyq}om8h(w2D!u)fshGom1!41$9wfQkT^gbyZzc*VPSmQ{7U3 zsoUy~idA>jJ#}BjsR!zzdZZq!C+ewsrk<-8>ZN+6UaL3it$L^8)qC|peN>;+XZ1yW zRo~Qi^+Wwse{Q?hKfBOz)JfG*&Z@4er|K&g)j%~=jg+futeU8%s+nr8TBw%FO|??3 zRU6e-wNvh@z4A~UR7cfGd8*E;i|VSpR5#UK^-w)kPOT>EKap8nb7iD;mHqZncz5J) z|6YH&z4K|bZ@1&nZcqJ=R$xtvLz?t&AEiELMN71*Fk1By70`ORI-&h_yD3_?*B)pu zs`Wzi80Ld^w9_aw$9Ch;?k<{$HpFoX+Kxrj&_d@=N6S%gCYo)@K(u4a*wXZ78#|Jp z?|Kx!&dpVL{vJn9!q=H$2ruh>?f91@)wnePr+KhfXS7j2o1yt9u8g*EM=G?ESwka# zyA$azL!(Yw-=co|c$3AaZWBG*Z$=x`ZV_6Y*qLbK^6|J2 z2e#q34O!2k)voarZE=ckX!oLjqBX4i4y{^?t7uaX@jUnyn1thckEw*V^HLNZL*`xB zQ|q@YR)3lML)J(#`!_4l#x6UH_8|XVw34>5XhCf+qj|hOiB`VnF|<9!E~3@w_zCS& zT((0t@QB#!fc9(+zaPCy%kO_<^912EZCzHO)%&>>t;LZ&X#JlZLF@f32F>;DCA2fg zZlYBkbQf**vj=EYR;T=7w804@(7ImW{cr8Yoj5MdylrSl7j8z|8?hekLCUpgZ>Ft8dt7H3+F*xZ zv=aUc(Q>DrkGA;(9|vF5oP*XbIXLKbftKZ)ax zTh5~Gvg6~+krRB(dVb(OPSfK7ACo^;e~aUeM|?&bvh(jtoxlAga%!pV;opM(a_>Sr zw2W&~qUAi87H!zWjA$=2WJ9w!=0YpqCm-6y*@e)i?<$7&^-@W+Q_sty-TPJ%tz)8U zXm@|qKs)fFHrm(Ib8=FFL&&$)iCXZ_am_x?Wj^Zf36t^a>5t^fPt*X#c7bN0N?ZtEUd zc@kQyy=-|ZOvZ7kbJ=2UvDMG5<1`%{*k-!2wQRvQv=iIA9&9`NvlUZVK5rfuRGV#Y zb~eZ5yga}B;PqFf30vObyuC!|yq&p>;B9wSGv4OgWF3d=eZ?l;$K0y(zS(F4@6-J< zkHFVE(Q+8tfN4X~dTbbs=5%-<+J)2o(O#bC<7ecB-Z(D(qAyy|5yi25R(Bkir9@Y> z>483I{f>7;J9CuJW7miB`LAyTpEqlt`+1+D4+OG2R&^!wUqWPAZi+0I# z4w}cJ*=XNh2B1CgVS93wpJVazVM}_z&kR)_%;xcC2ENZ-1K8GGo{r=E%CJqFIt|A? z%fi-v%Tye9W&qp5I&1^;v-!WAg0B~8V*BU5=zsFqb+!yLl|PSOyU9{8KR;lQ>Proz zhLXF~NNOxKk^cO~YfYOi%VCZ*R|=HoN%N%zQjioZEtD2Xi=`#fQfZkKA}yCzNTE`g zv{G6nt(L;2HPTusLW-2uNm0^zX@j&;+9Yk3wn$s0ZPIorTG}D)ly*rm(r#&wv{#Ci z_DTDt15%uHP&y=;pKCKo=6%t8eevhfYdJE=;UTk>Man8!O6EgGb}5IHQ_3afmhwne zQeG*alwT?!{UupT1tlA)kW^SIA{CX2Nw!jP$xbRE*-Is*Qc`KDj8s-~kjhErr3z9- zsghJ#svn&d21mug5grCL&LsgC3#xk_~sXvkm^efq=u5a)JSS9HIY1| zrcyJhxzs{xDS1k*BrmD8)JAG6wUgRQ9i)y@C&^p#kvdCVq^?posk>y9dPqGbU#XYW zTk0eAmHJ8lJbImf-PU;7On>|JIs1CF#}~uVqQ3KGo9}`pIPS%aAhbny_>w1h=`0)< zx@j7kr;Uy_I&K_Vz^4&tw;l{ZyFYyZ+RD3q(A>ZHqB$k?Kv@&;>BN}%IIch>f2;`g;r+Ju zj!8Jp;bCLZD%Ts1w(Je>54IWG<2cJM&S)oReKq~|z$)LId!im%;{h%P8h5m1!TMy0 zQ+2eLy?3Dbue^cQD)~KHzsDKOm$<+Ea_Ep5twblbs8|ae=XdctzL)c#KcT&?laA(g z=rHsZ*9@LF&fvJqJ1?W9yu5+tkns-Mv$ZK`y>Hz|i`n@Q&ArNFw09kzpe?MD ziuUCY+rjKlaok)Rw#b(}&7}+2qBF8}Y{m1pehe>{dQ%_aJXnq7Wxc4)0~}YPB(J~6 z&v?Dp*nStMId&9pOII7*#&O4sCZh#e-a=cM<0hJQ1>WWh3`)Xre_gqbR=gjZZ6&tm z4r~p&vBh0x3!caG@N5Ckd#1a*%=`xMddO$X>vnZIZxcV$@8R-HEXLbzSa04RTrTiF z7U2CHUvHzuE3}AHX=q2cyh97z^bxH~{AaWwufL(~DD?NO$KRf+ryk32{Ah)f|3Y(qUJz|v zmcnSoDi%c>;%$qzAdr6)UgxMijw|!E6j}u*{?U8QKKz(U(Ixz-&B{1_6y?-SeiUWO zOMax}^jm(kU`r}L;?e#bKdun7iXU^Z>dcQv?9lj8_O0{yk*B_z0oTKTR`t=!k7|JC zG>RXsyV-^x%^H`t5l(Yz3|pOgjd9%d7`9}aCOEF?5VjeyY)8MawW{TTuUBa#Tf`2w z(06QA>hdFUZozEx-m)$C<;V5zKW3XYi67+~SFr^ym%4A+uEn*)anHtiqJ6E<3eEp2 z+t{&QI8H0r8m;gyHXqM6IIih4woU?^K6b|+v7ABmFa-C?*?1*;Ep)% zuNM4ISFTxl*GBk(cN8 zmLqW7`pd)6UM37htMHMxiK}gSJ8N)*w_Uq=yg&Gl=VQ;{oqW75+=S16iLLm0Dd{0U zf;(FANb}4J<#3s`vEys@^s@Z$s7)iZc1ab`s@}0iYvq##&0^386MfdMI_)Xi z8b`hd|3TwlT{oto6~31mugamheQt{88PCr%?p`1ADkJ#6(I_*$dW8n%DV4gb-j*A_CB zKaXDjdGz|vZ@vEW=(QXQGRXf)7E(qjlayJ?B4w2xO2s(U?juXoE&yLA!kV8d_XT5?ZdxH_^US zzJ-=xc^l1nQVQDE!w=C~TRuf=wfY6xwnwkf^ntI@T53G*QO9RE?wQ*ov=&e9qV>$c z%QNRwUVo{lFXJ>)QRe_4grIR6^7 zWQz#2O(!DJ8X0*WCZAr9<1SfjL<`Hb39Z6uwq?$|th?1_Grs0&ej3DPcarC!YC*QI zej9N9M!)1`Hf}Q8&}?kW=khx8&B9i1{5pJ}H=gh|aj_NK_no|*mCDCfdI;|i*H7?v zUBZs-$Cz-OzgmgBkL@nU)_w->e;FUH#MhhLm@Rl~7>>(Wm~DPwD2{uTneFV%6*%sG z9=82!mgBghb=l_J55aM<3)$Q}**5>hcID|Ze7$C8*q-fYYrT&x@B~}`$7~6?c^=|x zvF+={mZVsoo=16{@grNuio9-(z1glRwwLesc${q+-UcTPVe5W?tyC`FA1r#YwKcK% z+Vj3SWe(f@bhZbB`8cunDci|Gd|ayWiLK6TKGszz#>dYcTiJ9MJ|=fm9LvA9=5xS> zTWtM$^LeG>Yqloi_&oM0BcB^PE?{d_gwMB0>)FDc`TXu1&$hoMUu%@Q!Is~buU{@c zV_P?rub1wnvCSUL*JlqOvVCm71&`&`53_|9--_dG$FL1@jjY{&Q6p(0xz16!aMThDH6y$7&W8^tzaGTW8eY#$c0bzZ}^eLGu#iLKie zwxoM(J@2yRJ;&ypGcj zRWzING28ZRJP#Q&u;tpq)123Z&37zY?liV#oB6#s2k<)T+L70LOacqBuvTfL@WK1$E`fbuXk-Yzt3$2 zV(|4w-Qnfpmw}IwHP`Sl>%v7o_OxHl>(=y!w}}ep*b3P2H2cP}g-7uFOxVlYnUCU{ zZsbwB%khBcFR2dO;EBA3qL#*;c+kSn~?skL>fA?~TqZ#%5ce@BPO1T8h^b zmjafcW!bhE?fCOWX!qN(mA}6b$1R@AcHV>Si51(oo5A>chgY)w^8@>TfAo6PuW#zV z{**^0wRZpZ_l&>(ZvLZ;WcjbhuFe0`{M%Ij^`+M{5BpChYkoZQ*Aw05N&au0w8j7O zq`l3rEnmjJ|0}4^OyM-G@HNlzyJI91E{#v8dv(ims)@GT*{aE z5A(Y+FWgL0W+{u5RWiR$HYvN5L&_=Tl5$IVBr7Seluybp6_EattfhjIjZ{b~EESQ= zi?WzxD;1aQq!N<7R8lG>m6psax2)tKm6OU#6{L!i%z;)}svn&d21mug5g zrCL&LsgC3#xk~0=*!JgP^*;}*|9Mzlb_Ch^|2(YzKjZg=ubuZcUe?%ezZNfLGlj8b z4QD&6uoQ(YUCGnjyMoPP8Qa}OY;S|uRw~S50gp>n*x`jdE-Zx2eHEK=EnC8BwmOPs zR&OqkbDhApbO778PHfFQ*p}2{+f;$Afj!%^LTqW)Y=(kt&PCX^lxB;p%vQ51TS7&) zo{D+Dl#j=q`0)mh6Mder#hznxj$=E$m+j*|wj2A|?(AZ_8_xFApRI~J+x^e{y91A{ zXIs~u?OF-83GeuKKs3I>)-;~&${x1L+u6o$WE-Tg;?X?LbdasSV*WNLmWxjjUY;B3 zu^k@9c55SBja0Una=b0|8^E?Yip}pP+qJB`zjtzEd(nZd*EqHlit|{5-8}B}dA3WB z*hYV48=jYccW0y0Yz{TptQxYVHe<7G$=0F?+XKaWnN*m^ZF(Os{T-*n?R-f5Yzp=gi$>w3f`|VhTEy}{#P{JN@1N8R!Z@D`4peIS}5kdWeJ{# zcZy}*MzxL<>%E)e95-0;S*>#(exH7dZGL=K9@i`*TRX)*?W{Q8{`knp0_%5d)n2g` zP#gy%6zA}M_jsDS703Ca*Ld923v6{1=l)2=c{A_;PjgiaTfMDp*VeJsU&S_bDVu)~ zTfJFq&!(_FpTHJ8f^E`ZHrM`auYK9xbYrXG!{*R|ZF(EF#jV&jv|wx9jP1AwTb0Ia zhZSbgh{r`J?v;2p;BgKO*-j|N4OW=F!jkIq>rGJDCIgRqQje{b8=IxV-n;U+K6Ti- z)nt2LgYBUc+aX7`%9YvDE3h3e$5!2eZEYF0#--T?lwzx6&t{{T<`2a*;}telF%R<; z^FCg&Jd+jc!L}ODU$a_l-iqz|nc`UB@5$4=+KKH|FSZ%O+2%}S^ABJPU%^&JaZdG$ z=W!zx*9@jq9_OCUmYAKd&vq)VO-EMeaegh?_Vi-AGKQ`76gGVZ+sxT)j*6eFxhw8D zZiwV*K8s=VIl*@ACfn$jY)cgPDuaITxCS5C=H6p#aEk5ZR<_EDpHsdZ&EraSW-~Tm zD^Z>;yW;co_6$5OkK(gM=li^mnXa;(P~4aLsklcLuJ}3E+|B%Y-xbHD2{U-y%pq*S zifdDsx;$=nNwzjQ*w((|pM_Mt%hu;C+ln~0I-A(O2D1f>X3OWz)}}7oi{fkvnb;y; z@z21H-DG=mf~{FBoBbxXZmZdHEMsdJ%ywuVTc5dX&U4s)1h9>t#kP1l+cTXl%S5*F zW7(`mvf28v-5J2<--j)xCtIKHY#+O@d39!M=EJtrn{7ZRwwVgMt+1ONd7AMGo1?I` z3JX(M2Zgm$SRI9VE6h$|T@-e_123~gg|$%FOoi=f&#yOCVd)B6qp<4=d#JGCig}o< z828UZcmMuW`Ty6)uCvLrmVbUv_@76wWhCzNwsx(cSF3pf;O0%Q@X|^;+nkxlL z^Q8IG0x3uemKI9pO>wcbL|Q5>lR~8B(h4b53X@h!tEAOZxU@!ED@90=(mE+hS}$#o zHcFeM&C(WWtF%qpE=5Z_q@B_(DMs2Y?UD9MvC=+izjQ!~lMYIUq(6^d%R-RD!JkL3 z|7SdUt)*L)+42 z-!~rTkeQd~c?-6F?|GWZXV@IJvejC|)-Qt1@&=oI9-fCfb=ji(vZVx|=?7P!X^S_Z z>3eshY3^}s7mlLom5#CfOhD5L@HDkO`+1z-F18QRY*%C0`W$4lKE-BrjjhXlHs=>? zHQumQe#>?$jcu~Rt}CY5?E_Eq);qSX583P$+h8d-9+%S6<@X03`EI~USG3MK%>M%L zw_k?+bTKFX^X1>~ zzxuiGx_uwXW_O*VeKhNhCQ)ynFsT+8IcvjW* z_bWlZn>+{2kmnGZW7-=uQ0hg$X``yKbu7;omzT};D$auzJ)A9N2rp}o z1YUn3o#Svlq=v9<*~xZDah~3GoX43iuzgePV|DKExRHu;oK-51tNxs=z$>R9Ko~npYI_-cvEnXvH*hE3P$aDb~Y)XS}R!6y~ouw%R}D zX{IW!8D>7Q1ZzevS7Zoc9i zK40K4~ZYxDt=;fP>j2l&g14P#w9D}q0~p7W+ufnTPv1lCdG9~pkn>? zc**bOp5i)Wt>Rk4PO+V>QEZ>r71t=M6#K&^#W=C81v3OlK=Zi;KZq`SPGIVp~jX$tdKT=TtG9FtYY@`pG0eTFH{4}pr$ zY95MnPRLb$Jr9MQyu#yB6z?TOas8R7xTaN|H&ypr+bP~lkYaguQk-v3D%P!oVmk{| zY)gTPW5EW+@$8%8yy>MlCdVnxo2iO(T-Y~W?@5Yt$4JHb$V%}(ofY$*tk~ZJ6#M2T z#dTeXiRaI8E8D^)Y$Hdr6>W^BKPty|*A7jK`-|;LMz+Yye9y{t8k@nB??)PX@I5jI zOIN%PrnhDDpU!qRh|OUPTaX=F$^@PV{XNfn^haK1R;}W2-cx3E>KWVVe0h;g+kX>H|CEfTb-lyZ{4SclFNN)u!cHmd$~~TD&iiaG z3TvgXHVO-7)56&F7&dJOoBo1LJFc+44{*6?I-6efA&+xl)1R?v;Xiux+Wh;i|Mk1V`Ryhh162=lv+t%QfsM=)K+RIwU;_b9i>i^x8x&rmbyq?rEXGp$td-ZdP=@hFR8cG zN9rr}lln^oq=C{PX|Oaz8Y=lo!=&NT2x+7=N*XPVk<6RQIBC2zLGqU-N|U5Nk6vq< zNtQ#rbVNETB}m7l;x|Af{kZwx1 zq-5!~bVs@?rAYUr`_cpHq4Y?4EIpA@rKi#}>ACbmdMUkMQk=ippyG`&g~_ zJz!pCzx^`QVbhARnX2m3pPK+_BpZvk1JJ?%~5gu^n1+nm$sHo zuga$F-iOO2c*?P@k^BTmK zUXjh1z{^FCt%J+Ot|YI&6vZ}gQ2bLhE5(o0JQU}u4T|%vU8Ojj2i=*?L9ze&x$?M_ z`fQ!t**u!CIVjF!HVO++O!K5-oZtV?agM5KDlAR$db;A=Z%~-7xYkHftOq}Zg)1yg zvEGdaUblYr*mO5GN5wW6?!x2j6hCrGti|KPYp~fV_M;R>#keYLn!;4Cry3WeI2M>H z@Ov?qXR|8DW-80(r#NP%C_Z->6{eTq*VBr#h1;MolHxw!SQp;^RR0v+M)7)yiqB(4#c@8iCchVz zbyAGmpg89^RO8o6Q=I>76!T}Puuck7UF(M^)=_|B-8w3^CDrGZbj3cV`kb1mIDT3x z&SRE}b85OLuOqK+Y#yrfk>dQI`iyR)I8GQ9>mgjRzo#kg<*9zAk(!6+Jv^Q7_c&f) z)7P^Z6!!;Bvv{0o44YkVHiILZ_Kff0YP0x$q#nWd$WofP;Jv35#jlXCdcx!EQrV&v z_wtOBc$}WV^I%%c%O$1t0h~W8#jo5lrSQ0P3*H7(ZP?l=J|F3d&m;!L=N#2}GpFKu zDN%9#qPm_>Q5-`WE3S8=6yp*U$E-36yQ8=^U8}ebX{`7hw^(sMWV+&Wcw9DK?}49q zTk=r+slaXr$=n|ui3JHWV8Fs*6S-(?NLl~v|?P4!mJh6K=FE$ z6zk~Mfyewjtvr(V_m}y3Tl1Ix_kaKOee?6b<}dUAn~Z<|?O*?CTuIX`|2%f>CQGB9 zWRU7h4Wx#WyY%O=>p#Eo`p;w6nwC|L9hQ>$m*i)ca!5I)TvBc+k7Om~mGVjXr2^7l zlC@M&vXKf&g{2}=QK^_@D;1aQq!N<7R8lG>m6pm#WhDoxoK#+_AXStqNtLB4lA}~r za+0b^&Qf)$hE!9kCDoSdNG_7AR9AA7>PZIaf68OmHe;Pla(MdfSKXcUOuq&BX3MXQ z(VE?EhF0ojbF_=cd7OK84;ewb5pNt%0__H`|_dHF2Da=7QE~ z6VHS5MP4qR`&;5POONJdoic!5uS>S7IL*OFi=hq4WQmro)BVF5e1+xQjka~c95hR( zW@tX%xzG;wOgIE@MJs3@f)?ozhL(HwHMGa4%iw!C_qhw&hxqXnCGQp=C^XjaJ{+zP<)u7u{N-bzC?C?NzSXXrrzyLMu9V1=_*UtI#esTZ0x_ zAp)&s2R4hpc$$0OgyJ;oE9UQ(#>-{y;W0SP47H7DzOD_?mY(NzJ0Wid9JjWb3AdMW zW2d3b3n_-SZ+;N&52@4mHi)Hn-@~wZYConVqkSG(#6;t6H*bKJKF=3z&fCdo`|<>$ z^{`lmmQZ93n#cK#Xz7Qe(RLl&jaFcNESi0*eQ1k2>_wYowF51n)H<{uV-}(H$ukbk z>2O1|lu0?!W?$xWcZ+Xzk}eMDy>Rj20Js8SRbJ zX|#wwCba0Ld(Z;kY(~pBY7Lsl!=-4gyaLfej!r>4vSbKaOo}&J)Zj*F)!J1>8@99< z+L$`o(T0b-!hNOO!c%BB2dqQeWIq+na$G&MlKa!~c5t>vgV4(R2IG&@nmwI<5O#O1 zewXiPhZ@yBMB^+g4oCCYyBN)9?sl{f!KcvlBlpp6JAOr*AaqZ#MtMqBpi@Bh#4e!ED=T;X*T zH`;{j$Vm%DyE>;gT9vPP&|0%(#tKbK`ro`fgba zw9MWO$cN^A!WQkNYX!83-8IoZ7IR1Q>EVU;V?Y-)lS4nWp)*FHt@WFP<~ndX+W0oJ z(QF^jLwi?jAzILzC1~Z_EJsUq2}8RTy9&+nVmMm+`D@Y2eThJOQfwWXF%#bpDYlm_ zbN%%=&A2UWlQM0I@=~3SMC(swYbeVuGY&fXoGuhLtAMd zjb`t>6D?*%3|h`od(o~g-iOxz;Q_Rl*$<&**Z6+O_kHm=u5Z<&XhXUtpfzMTQhs1m3z|yZOiqlXcou$oH}>gJv>iuy|ohUj-fGHjD7^Km&)t5 zcwOgGnXgTk&({xY@Kwa-D4OAzW`bc_`?-bC_IE9V7QVea+Si#?(7x}lfo46sK3bu^ zUTD|e^hB%va17d~1vAm|zgd807_k&BN5>Gfpj&(|FXR2$IPU4~acKIY&S)WR>!58K zR}js;cPeg6ISNIfeHu|8?R4;*LmGS)tnGyR%91?!>%lOsNCmz(lh|}MjywGN2wMKi z572Cm^3S<`=J?A%@6)QY6Iv^u4rtepPeNOy>#In)j+0v~IojpgDQOqRptaAFW5pIJ89{4x*)p9!9gu7>_of;1RSe$JpLfI*Q{` zrm}53&UW-G+m=!Z_svL$)5o$k-}eI#3|Kbyrgwl)E5T)H!xV`;W^Hf)>ov;A{=`%fObHa|!C=Qmz! z=4(CkHI_j#Z%+-RKaXB(+H_eCGo+c)EGa;mEzObUN`cZmX}+{T3X+1Qh0-Evv9v^5 zDlL;jq~+2IDO3uRR!Xa+)l#^$Mp`RHNRiSyDN0%|ZICufo21Rs7HO-rP1-I+OFN{U z(k>}R+AZyo_DZqRKFR#g;LJbQi<8Wsd(EE%4ofB}UOFNjl@g?5(sAj8bW%DcotDl> zXQgw}dFg_bC|#5;NtdN7(pBl2bX`i4Zb&z!TT-%gTe>6Nl~Sa8(tYWH^iX;vJ(iwG zsnS#Fne<$GA-$AdNw1|e>5cSOdMCY?K1d&>Pg1({S^6SEiMMm?U6R)5h9w5r~0 zt6bQMRh@~`bj!hy=UP^ukK-QoUV@gp$x1Yb&db15U&N+t1U78k!=wc&TyJm&8$yqScycUJO$Yfkc_xvZJ)iX{+vvTL{?3@E%XW8c&kJJ3{ zX)N0D2mDWuA})=_am9{}LJK&+`anFH z^}=zzBH4zmX8Ur2ZEInEFFls9?XAx9e)kib?+sp_zKV6U>=m!u>P2~bx!Z-evl82Q z`y8K>_lIVqct6_yi1)t;AKs_WUF2hdy9Xa%mLK5bQipPUp1wGrkAw3q`Pf=1nvcn& zCh>9p#2!9BEIPpF9OG#|k4;SBb7O>(+rkhc9tjfa8v42ts>#gl*fXU>rBI&_c9ZTiJR$Ey8gt*0H_J zx){f$_^=fYXDf1pZD>}$uQ9M9+qkA|Y2DfC4`bUoi7je2+mc0W^H;K!-^ez7FI%qD zY&-6;CH!P_D7_Td`_?vW1!uD*pJXeXZyCN`OgFZj>)EQmVC!0e?|Ibe#a41DTQw8g zihFE+pV_WwS&qwPmnB=qA3V)vkJz>yWIHpR?LsZKV%K>+#B^bcKgQe3hFok*EAw{U zpadU#LX-LU`LP`zlc&V+IUqeZpF3_k@%d=pdp`d~xbitQK0lwQ&&2RGLr!P@jMp-F z6mEmA?tERB`w?H8I(v1;Y0f;=9_>z<7HHi*Hbm<>tsdIhFLlv|)pbQ%7+M=GWqx(E z*ke`DhF5k#v&&W-?R?I^(B4eTfi`hyCbV-cEYR|LW<`4ypBL?1NxsiF&`<%#y>CX^j(IQv#=c6vu_+El_&#^eo^*;PLAnF9~x9b=2^?bcDd@Ojd zWCp&MY{U5Ya_T1^mweyx@vN*RU+=Ce!`GkjwfH!1ZO!MuYmuQie`Rj0L@N=!8ts0i zHE13_YtarYi$F74u0tEsBMPnl(Di6N{@Q@nzB!w#4O_ine!W&_`F)PR#`70;EE3=6 zl%2fHTJPp%o&O%MqtOPo##h4ey|i1zc6bomlcsE+t=OjQ5tJGQMO zcz?KZAPkqw?4P`kO>4{+y?g~u^P~k^)j;0gry1C~g0EW_pJz+l!xj+97O(jH zuq}|s4Vu9=N@siS&sJ_c+x9VRA4akbAI26nh|RJO+kmcY&D*dIcV`<^jm@q!+hJR_ zsS4X|&*Qq5W1Hs4)~p8GLdEAX?bp{>`7^_>zmNF!r~d0t^Y`2R+ut+(`n&lL^KZP) zW+8w1^INaoWGU2>43hbn)<9|~xl4_t#!?f>Lux8DlbTB{q?VGW)JpP_T1#!Dwvu_# zx0gCd9i>i^x8x&rmbyq?rEXGp$td-ZdP=@hFR8cGN9rr}lln^oq=C{PX|Oaz8Y=lo z!=&Moc~clEjgm%7Vq^Z(0X}UB+nkmha0;Ji}9BHl; zD9w}ROADkRDOg%4Es_>XOQfaJGATq_F0GJ4r7&rwv`Shng-dIswNiu>DXo*Dr1jDU zX`{4B+AM96wo2Qi?NYR~L)t0rl47LY(jIBA6f5nM_Dct(IO(8tNIEQ;q4o%CdL_M<(xf-iTj`zjUiu(?ls-x6(r4+5^i}#M zeV2YnKPB^VB!grjWt1{WnWZdJR_V{9*Z+MUz23LivVnP({q8GnY-Tizb{Wx(6)n)p z-O7NLvl@?EmXTj?d(lid%`#p*56wnq!EvvBv!Ye}$=0wuFV9lvd7S$-elK+#c^<}} zk5>K0MYPSmNC;OC-bfH246PfxXHJUqt)#A1Z}zpufK68^W!$LJe<$rZR_wkuJ>?0S6zO{ z=i5hvdAr{9xDLM0=jH36g%xRt7QTk}vANrt;y9NoEzqj}<%!m%S1Yt4W%-;sVlbO! zbGA`e`Sse_u?08gd2sV-iSw|j8!wl`9h&2~{*CxrBfcW9hbDPEaGGOY@w#<6+X%;P z*yxV-brx?+!}>MAaTA*Jbyj941CHBSl(*~sIoxpE@Sm<|Wzt>HihbmLtixx%j=Y%qU$30J%--E# ztEN~-r;qTuZFPgUiGmq<8_eX!+itsAyv?sk=6$7~3-5mpYk0ripM#GR*~jwn#o=LH z+$Kh~i4i3phUlEx5oav?`TGqd68GgJ%7REqv}+9JeI@IJDV1oADZ(O(DKl zGOh*N?2&A>mar|~$u=≪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%0DV(q1@d|GYfH1aaqa3u|AmCxE^TJ>qAX|?TE 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%0AgI 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 JO$>kke*omih4KIZ diff --git a/Content/Characters/Base/BP_UHL_BaseCharacter.uasset b/Content/Characters/Base/BP_UHL_BaseCharacter.uasset deleted file mode 100644 index c42aba44827e751cdf4a21fb2f535232f235fbf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30562 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 diff --git a/Content/Characters/Enemy/ABP_UHL_Enemy.uasset b/Content/Characters/Enemy/ABP_UHL_Enemy.uasset deleted file mode 100644 index 8ea1b7a882481176e4e0ea1d50828f68b86d1865..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47676 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 D+m4E4 diff --git a/Content/Characters/Enemy/BP_UHL_Enemy_BlueprintsOnly.uasset b/Content/Characters/Enemy/BP_UHL_Enemy_BlueprintsOnly.uasset deleted file mode 100644 index bc26890fbc3c5a3bdaf99c9a836cbf418718d821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62150 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 L>F7+cIsE?zXg~&q diff --git a/Content/Characters/Enemy/BP_UHL_Enemy_GameplayFocus.uasset b/Content/Characters/Enemy/BP_UHL_Enemy_GameplayFocus.uasset deleted file mode 100644 index 1c4c8411c9ce3d77942e34d5ca84e3238905e6f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39938 zcmeHw2S8NE)A&2OC@P8-3#bTKklrlRJ9=-5iXL#lQSRUh&4!635($c^u@h;c!IEIW z-eOHuilQR+7JKZm|7TvgI}j0Le&zfA-|F$+o1NX+nVq(K@7>$?^^nzny?_6HvNAzv zDiOp}IAYO)&zf)l>hi`@`b~#(Q%j6@+1r`|?1J=$u_34Ma%yeoRd*VP4b%qMsC^MO zuidY!{W*)+Iz45`U=@G`PHY(G?qS{~eO!9gx3{a3H2^lJXWz-Q{GxxnSl4}h{oy-W za{xB;^fdkkC%>Eb0zB6n{ZhF*4PXOK2d~`iH+UUKT|dA2s|xNgfL%8~yIIR`UjNGJ zCx2Y)`PNz!V10D2{c=xxP3`P8(`R2zUM6G#%t7+zWR~k@mrFVe7m4-y_AmgLbHs|X z9G_i-*8SLJRz{ELOBMjTAGi7XZRh-_?HkP2I_=2oZ>Q+(dU?Vlq$U&5smuMHwSp;gWxy=#6ALAW8HZ;UW1RV6G5ERa*ZfEz0hNG?(p2> zYWf{F@YinWwlvs##|6)`N=L3-M11TA2cilCQX*>WRg}8G)zG0KY^$MxyhI*X%o}cH zVoBB$M407Ytd{Gc5m|JtY(#jn5$K;-LBW{6pjhuwf&u{4D%9z~^@yM-5kFZn!bK?J zh4@9r^P(igUmnB9bW*5e3u5^K9x=ypwg>e7<&*H(Zr5q#-zk!x$d_aUWr!ubBo|>) zvQWSiNQjX>#O{;23hOPGYeziqDnsqTQtY zXktT5)_hbPCy9g`73a?tVaF!#*ImahBApTwg=wxJWeHy>Al^Ufc()sZq1Pn9bCyO% zCi49G0s$|YNHH<+?*2h#C|}G693o)Qs8J}zNO!I{l$*$pb`c5_c+sw0371&o9#Eu< zb>6&KZd8UZj~5**^p}cac|i%h#6Vt*n8+=kFmf=UI44SZ$s)c$BI65mS`f>NX1Mnd z#0ZJKySs)OHpNC_vNj$9v4ks#;tOI)`oDkotr3b*);TGdlj^-gdMQFZ1YkJ=Zeoa- z=O;+aAm&^y2*AmaHKV2{6wC{SHB-`VXp>%pGm?2k2kpE|C~jw=Fp(KE(OG44HY#nT zUn)-|;z#p1Qb80c@y^c|j7QP5VyJJ@)B2K<1yM^uvY9*?pTvf_)(s@J3<*z0?WXVW zz32vAxXEH^q5^jJEWea?WQBwmD->lAFQ(@o#O5xbEeP-h4?%oqJ+=dww+t906iGmm zgpPK<6F81$6XMMmONf}RIe#I8G6&=%Oy!{l5&d4eZAM>9YZP&;*UmMlc`_bc61ieA zVfOBM2ssi)_q})-M0L=xZao!o8Sw@3qJ*MoVvj+7AW4;J6wFHk2PfeXr`8YH-;ZqB znqC}_aQ_y^=E{rVN)si-%=f}EC^-7sO~g%(^A$$(h>EK>Qxz(LqId#cpin3wcFtd| ziUvcskX4Ya?EQD$KygQddBx(WUc6qOi%f#ONw`74gCJT=><^xz+yQ}nF*;{*3Njbp zbnXf;b~GQ%*cJRW%92$59g{l0#-UJEl$-MBO5%tUPHVETbGCpB_81)`L5lkfd@rDc z*f^jjHFF%#Kk3s_jlDgLgzSRYvfeuWa>>~((spMSwAqOfT1KK=HzQE0&wP%fS6zie|rK7DxNIO0kFlycNDA7L~& z2?(@Y2|txbs#5ZRZ@JhhQjm@HtH&CiIDXV5#+WA$n)C!U9AV@LYkpMOzySP(;<3cR z@!u#Z0LBp_&V3$EJ2nv$+up56#1Z*Iyn|Hlpq4sZ2&vf1^IG~ICxX^-Ci*#@|M?CI z!A}Ac;S?niiikb;#=j;prIKW+1fv;gZXJ^Hd`QeRn15>SdkObV>I;qixlsw+Se~~q z3LPqNE)*cM;$$wUZ5K(#H^?a^O{!tf3&rDcpqO(Jp-0P1Fmiw!;(^S_K{)duGeG~8 z$W110KTFwxMoJ@)b^c)7#LQ`t$FOUAkcyO4oRiIs1VZZI!hZX3Va zODb_>FwGEax722#jDjJm2J@4Nt#{OSV@Dxi8nNi6{b4r6MDKxXEl}>5^E!F>^F&d+ zWHQXQ`}T?_hH?n)q83>2`FS$Az+gl}>hgvq(;HBALm?3qip*V!5YxnV*gKObI(bmG zL!4=lbiv-43R%KHdB@x5r@Er+V5(cl+=+cXH2=h9z~`s+MC|2r^U{yp=(kc~0XM$-`0VO_CKC z;;+}*uh6KPfSW8fCbUojAxf|6WdIBx(nuU|NAS zME2|IDrAMSPDxt&LMjnROoV(?C~(P0dk{jE1Qm9j)hm*56o7gygmOCmdJDQq*6=B6hDrA$_ltoVRGAF9` zeXoTMiVT|+?!;o&#NGh%GDinF$%UJkNVy><))A^}Y=)pXXbiF~A)Xzsi;;&0GRSO! z1hTvpb*e*9k$rd)E}0Ks&#G92zJanfn*|v8#($en?Nm;VRIX8D#KjWiEmI2&9UVD zWdFMHFm3BiR!_wCS_Nm7d^?;gqa*TZIbNc0$i~O=nLE*z;Xc=%y^D?z6hWT z(+)i}mN$SWp-x-GOQq{B0bW`QcqufDsYAT!E#NV9(WbE=-D%Wmi*z&TI>ejO0v-(_ zrqUBQc*8uOUHuQ&hv)YI^yN!5r+JJWz=+12;-ZyQ)y8``*+K9*KL~HWH z{-kZ}kI|h^^~dPMr|=k^_!QpEHjZyh8}YtvBi{Tr;zhO*FQ*N7mtj6~+lYsb3`NwGhM1|wVaFBvWL$IxJ8`xfxNYXy&y zE%vvd1-zF4r@;iqSjIQ&!#QRJSa5^0Ed{!g_0=3713H#R3OHmoPJszy*sL|7&rKER zpGTQm z&)91m17whz9os_Bg>Hk%f?}CLUzovh2YvqJ6ZDw&t?^e$BRx>y4d;)El{kOeG|omw zahZZf>20OYbC>`_Uw`b-8oe!aqq_?Hq3$rT2CL80ljFTT(0#p7 zpoctR?t)c#9ziQ_Uq*=l)>>(e-su+Tp$;k1TSwdIl$otjk=M0GuRl%ic{Bbn=VJI1 z(DVi(unna(diz_UhwBNHXE-g-h2OM+7@)L9?@}xDkS(MaL({v7rG4cJD0zHgJjB8fRCjwfa$IKyf#G$l>-c1F1$RCq?=@X7JUpk`& zdf0#S(i%N$8u^9-J>-wc;S}TFt`_Jqd@)Dtt~Gj$ej*;~{yRWc!;2OQ@{PG6=1?8s zgL^pGrZaqShZYO^2+V^J2XUEetVcY=XZpY~Vn29nsV@MxSg;RS!Nx%ESLopV+4q-; z&Ym0(4#5I23p;*)o^T=BYiMX{sJGW_r>WJUy_R;LF4~qQf3Vxl(bpO+N}4#68&MEsw}cFEU}c7RaDi~HQH&m2ZXJi2_=@YvXY9js;Uai z0Bai56Dr!OUG&YI)Vc<6)d!^Ln9p4JgT_GTE&I9!*8DlhB2x5KJI(GrdiLsVFxb$@ zc!;HywT-Qvy$jrj;pXn)85A568a8%ZcvLhmCN_>AFP2DC)6z3Czn(RF&fIV2W#=u* zU%X`L_sf>AEi5W7DP32#{->WSw*FFCwQc+U1HT?Tboj{8W3_dsPS>9~d#>Ti)oa&p z+`RS2?K_ViKY9A>`HR0^zCyl`Po_|uHRDSg_)=0)QC3k$zF10W@KM%QQPnq7>*5rk z&Q0k$ztHAau&=^A=}TEB~=Jo8Y{zI5uTk1CKBmu9MFi zu5rrgJdQWOrcVJu1Cfqahu7{)Q5NT0yL9LheLJHKKXnM0*ym!qdhXZ1zc!s}ax*yD{msaCy*6g# zm+5^MU);`3;yPr1>D~wC-(T?Y2&fG5k28R-JNo9|iI6nxqfB9XT5SIO{(|s-OF`t_Uda^X^`r5rs*wmxv zy10yS@$0u}dGLh`XIE9jhzA@0_9EfPmZy=4I*I+B-tly_8JVuLB4?S)9gU>nCI@^qd@PlWZWbw3RIKSV>CR6Dzf_8Q zC6xqfuwN~IsQ1^Dk|9P*u3l;E=(*V6uTHIUb}z4>CBK*~?!h1J8@4}OC3DyLqvAy> zJq>#NICoKQsk+1UGi5`DIA@n_>Bgy6Bl?=%f4aUQbw$+L@w>KeX0tG>y_?PAu zt48e-ry~Osh=kpX$Am=Zs`vQjd0krOfQ=gp&)=!9Ws5|;eCvs+IcIYZRe1^Lh8I;1 ztJLaaTK1j@?`i$8;O@(-ySn!}ykNsX;_NNMm8X-Ug1h&Q{`ugteg;Q1>;~@YTKfC5 ze*L@I^Y@RK@%vT5nBEi12Dd-k*JAz=%{51qCtNHqm=yP2_s6Cz+YUeW?EhQoweang z^B)Sirso%FR$ffJv3v2nj2|yXoG_`t1$akbY5jN?BlopB+adTF{Y`zR5mnUrEgN zYuR~!eAi>C|CCL?-n;t9=g`^*g)f{kG&_nMPChB$Wny>z*E;vHGc>GjR(n@__U)tx zzJB9-!ZWQZXI!tZI-AY8y5rBq6N67xx~VyIEaN=Ax5!>KD9>xrnxJvh2k-Ejrgo#- zqd{3lFM9QQJJeU>bl01Wx89b#Cp525l_vL2a3|Vt8Mj$Y-S9n89v*4%o6pb3_67$1 zdNAVc^lQ0;*9v#WyMU=jv>#K`&cn+iP`R#n_<*Oy1zaCN{+$F#fm#h)CoAOjsaKJ2 z?@*4`g8#IT|FpEmu|osjiI`khmQ$bAw<@42v(BhMU3<|&kBZt-PpN6IidTWT`A>X{ z1o^~{x#hZZ%iY*YgA4~Mt*EHp#ece&9khD!9eeAn;rH(EZ*>1DUv*zE;@ZLpAusnA zm#S#tgxo{BJon#x9Cy05`;Y@)@7?65+_%r7QB!M^*sj&Nenw-aEX-+bUg?^j^0oIOMipvBKG3#Vl`AE_e8u0=lsfr+`Ha-ixxVSj<~R?+nTX9{HH|?(}s8&6Z;;|?>+HA{le{aaXsH2 zs9*5rf^o%$`Yf%IoRT$cy`E|v{XA2z+;zcV;*k8TF!@+r)<+lS#;EO@>z@4lh#QM@Y5&fo%CQ`%N&@JIT#o!bU>Pq<@H{LLW#wwWqnogT5Q+jr=5Wuo|H|GN`cU*&jg zbUVCGtGH-cua2CNj~!l}u8DBi9{1S%PUG2imrg#mweX#^!^iT*>#bKU?y-xCi;9%T zms_vAz^~|F98_*FL|UMZbIf^NvdmAoou5x269FDxj;f=l-)|mtyp>k2;#XXUU{zdH zT;PmeZwgpffojCo+uJ+r<}KH*o*5B2wEB&q{vu!R=RMz4y<2?y#>0zwqo!W9`9WNK ze?r)IvB!`9=y1XL(z3%(H=YVxoqi~4aMkVi#HgCErzf9nTseO0;Pi8&?6w#`_j~i* z)Kf_>axfM}=szDAw>H~xbY@_!p=Y?7PEPHTJ28i_CGV5-CTffFp6{3}PVBPav zPYBRF7`-mra%CS)f(g)BYIi++`!-A31hSmvgd{^hUTI$## z?r>w)(8EQkF@sj-B^35`kh(q*#RmkgJd=kB52OhN(a~q}r*%GN{F)7Eh@Q%AFCPcv ztC)sF-7bf8q*y)W<^rv?Ybr7WD*Tnh%Ev6{sJVsv9Insm&$dW;R*3luOen2~4|@}y zAfi6Ij8C1q?OUL^u81wOtM#OOOBT+%f%b#4k!G%-v?LG8P^3Sol}o<@0~^NHkkAanG{D z&o&Joov`!K@k770k5hkBv7qw0!>ecemLJd^dg4OPqS%<`iT@5P0(;n@9p(R&6j&)eJYzYD~Hwu(P%j^iyS&*(R4i%c~dp zut#+xW_Ui?dN-o-%C0dQ!v^FO1`H^;P&eqst@2FU_N9ikhZnA}eQnTVN37ws;FZVY z44emQcy7Mlb@hzWTN9Q!Mcfwigfo<##9fZ}de@_W#Jkm-v#gN?q=sI=?p|)w!@gXFo`)HfYNZ@VM1V zft#8JJt7qB+4n@cPLkzb$CU8;i-S(xcWfs*=oZuK$8zvt8@m~Fntk?!&T z_%=czNP)-=Dh9DQv$c{P0Dii$iXNi$W7m^o%#1T9fT9 zl7rBI*0D?pB{RBipUQPaO{L>=F?JtmO|hmHoPc%dJrU`1Zl4ZB=D1|ko~ks z2{rr>=*$Ja5dleXei^DisEf=aDdlB{6VtEUZsH4Z(LE)#`3@>TdhN`hlfBcvV$qHDuOM4-ss(c{VYzv^J-- zb`6`b;1{c~zVr}>@}-LG8G#-4$_|K zQSr)uPv#nkoYRaNrWrr=R|y6&bQ|!t;k%+qJ4k(3hDE|qX;FdFV*6T1WWaY}a-Yh$ zW^l`Nka^gf%(PY3<}JzUvx>HE@QA1CZ#!y%moHEsaS?L#@-bPOU{en7&*7RK*Ync< zThIUBdj4Y@75~}wd_={o$Y-V1EHGph2|5TeSUfFI#Z)Q>mhszb{aK!?_>i{{W56Y- z2w}Njd7;E#DZtCau}e+B19G9wGBDe|+@`lbs~2n@crL;2W0g0*7+rSA#P`TD4|as_k?g$6l0UyI@8IqYbcJHL_upa`K7~C%2%^7^nQ!T^td(7oKzv5cMK8@5sKj*|n)xp_bL#3R_*g2S%k008PO7metKZsI1`r<(evg4YbHy{ zb#aVE-tQR>xmSX`#J%%&Y}UBF{Mov|=P6sajv3!KJAHlS_~F^hSLdpgCDwS_?Q1yu zy0pIPwNN>}OJlcHg>yR3sDE%_O~HGjPnc9_92ZL#$znSN_eZK0TtYdq>ei`!C?_gSG zO-8^~m6HbJ7yVTqQokWBO_MDh>A58@EN#&A(Fw=P?{$gSUE?!*?1jED`5`oK zQF>wW#;+w1th3a$qxS$6OYzRRieRJ-V-*OzSrQL;c4%{ewrXNBKZ!hqT_v0jpG zM3ip2Py$w1tq}B$vw{}EB4$+_>sgxDj<1g0kEz<)LqBt%sq&+qcI$&foF{DjW8OYr zlMykg<=3`ovwx{LuivkaKsU;oReI_p|!^ zI^a)>hV98xUTEPh;nVKsv-maf%L88aJ(aTf&aM98M;@`S`}4aTxXBu})94v4(4A{f z7y4cFejJ@P+F{6zHwgn?KCfP<9KXc&h3&h=XXdRju(Q~^w>HEqAm?Gy^lM87uN9OO zS?Nlxp8WXQ3^v~M`mHkNcP$>SOz(s0>0;8eDSVn4?4yyJaVz|ab^VIRWD_xUo*K$( ztGopj#Qg*HIS1;Ou?gGxE3&wU_lk`#d*oA%Z@BmLnI z53TLLb^E<+sL`-eRq>_lt5GwCAGqAN)OPgUYRiNT^X><_Ru0$gFz3joFq5xd6rXx* zG0xZW%+Q~#xs?mUv}}dbs@`oqlwNPUcF)`{Bi)ZK+R;;aRMfMLCr=tVAJx?#Z81Uk zUC*r-${MU+#%eXLJmYKf?&#_0_ASE29{^4&%S=CRR4J9xwM9t z{j5cs*qJNBUgvB!Dqc2ra;M*3oiVuf{qx~7M<-u?xA@$x?CWn*v(ASfUAQ>1>VXK> zeX>o|1tpX1*>;GJ|kc{^hD#GyWik312(U+Q?`Q$Lj6@9TPpLEqYH3BxFl* z?Ppg(Tv@Os9|%ivmnK{CiXl9>;%#AV&f2VjWj!E-Vg!YiY4ZTORu(^By6Nndl6&cg zvijhD_TD^PiYxUTTJoo4-w1>G?}^UpFVEQOWQL8q@}B58p(5qtJlBZHuS@ODuikno zYtPp0w&He9{_%n{_SZ}=ZE=b@>=cnyenMcCuuMbm;h|2I{cCr1PxbQBofk4aZo$e| zmt%GoUsyKJaM1GGzZ*VSw>rX0<%ZoRr+DkvhnA*1D^?z8Se|~XrUNXsVWn->6*Ojg z&_Vbfz`fb`0pxxI`GvsVBX>QjUcq+_^p-!lo~0CT+BL^^FioW5K^P_!cGFGC4GdW7 zXykQS8*E};Fh4gSqOkN>zjNaRXc)~ZWcqDzdq)$L|%dFnf>mBq6w9G=wt)_?DeXLsjX%^4F`COEWh^q2__HfeAV zl_%_X;?_vUt&PKBX>o}9F2TLYa^r%Q`RYrlg;d&=*4w6ke3A}v|4_bG<8q$+E+dw; zCInU;qBiwUW1Ho$ULj1bd3JoDWxd$GTIs&d4)$;z0+-)a6R}Y6j-K2GP{P=N$xdFz?;>ocNuy=Ih=o8P0!!qnDuJ!Jo*Ldqq#LpG=yW_k0 z4ZHl@a1`u?-qh55KJ;66L4j%Gp`Tr+n8JS1nHL*7{o1crZ;3FCZ}QsTQ9t+hqW6To znPkxQI|J7Y``x%|y?M>kdnckM7oE6h{0!FL5!{FEt7-+7`Tk~m1=njT{9zulAmy=s zOs<;RRl#>af&R)fFYGHmYm6%=U22P8V_j*IWfJ6)3#Z?=;TNkbt7XvcSD& zP*#COXp&_?()DWPbtMmUU=dvY!pD5o%0G>*mrvF!A37~9VC%#!6UR6-9GGE$qJf{f zyec?=`7HcA$x9}db%zTaohLlcK3L*|rjjEJx5Vcuz2pIHGj*M$ED>+hi+ zkwZMj{oIpl_9dB=>$sNAL(ygeesQaTpEjM561>4538<{nz(YVv^ zwwRg`)@wYimrv6n_G;K!Lg1PM`xtaT{Ct0<`(yHx#^k>;f)%!rUWeXNv)#{#k+}Z~ z+pn6_qZY#2-4o60c*)GitNBl1G29;arcX&Kh^tOLA+;!my@<9fz*R~O!y!X)?1XC% z-3QBIOX@Z(Gy-b_t5x#J%?l8X%|-Y^Ffg!Mc@a2=CRUvfUz{m^Jvrn3Is9_H>C-&A z0Qvai0>mwSg6N4T%oEqm9`@SjKH*1 zGpUnBw5wTWKpNDzxVbr-#m2Gi5=6c>!JHIPSo%<*Z(J-?u|0W7c5!aOk){bLUTHyb z?g?YVeQh(bKc@h!XX9CFXqZ(-co;_<8~~_E_*1V0op&Q_@(8iX*F(Kf;Mss86yg^10SeXlRoLf)5q!=S;@!Io^J7>rm<*^WdZNW3cQBERWe8gwJZf% zYtTIylXyZH*${xJ(@;63zsE7t4~~IHaxL#$5yp&yu_h%2%VO%h2@7(J*iTC{Hd!{y zEO@Sh>PbGI`tW?18(5nYMKe-#Ch?L%14a@-WUCk$6KbXleB$6-NCeQj%L0!@QE91;nIYyVr}257h@s(1 zQk8&yGSZRLZ>dg`9-B6OluJ_ajFGD194gwPoW_^(!HkE|E_ayoc+fo-q*jy^KdfQA zaO*q_pxZkWc7#1)4W7gb;(;0bwSpOU2JK`M<^XqvS{wM-!kG(TITM!fj}0GdfZISX zjGcceugtg=eW85TTCZhhq;;OV&^&WMf^vVUNN+NMbIO9dNGa)lDNl^Ya0fliBt5y@ zV<^I?c+7$)U?{qZ+Q!&23myrkYUN``PU68v(e_3tM1#pNcQ$Y@v%JSI<%E%leAK}} zHxu}Zf#?+j=W?mFhQrK3>zpz=rO2P09t*Ope`bCdt&)$}m5e7SPq|laxmJfBL+hN3 zps|d>Gme2-838sX|2G`;uqCKVi%{nlpcvm6zx}0i%(O=t2*}I?GYffM*c{HprPd`7 zLQ5b7@)*o`^dTBh@l&6^Mje(wW)nqf6Av&juf$_I)Fi<_s*MzmnAPb+yon^?F@QA! zA_^Pk3-eHY=s6bt>4U9d)In-!9oP;%XA;?KY_rITeW4X)LSJ$#W2EtSV-TZT=)*8Z zV?31mGe*M|YxNcCnb_L8Y#D3%bkyxd&%&2-#f*o^DEvY4@pO!rM^w4r`4nDndR$Du zEqgvj(@e=snaMOw!Q%;O+A%P9@;rnEi~oPdLoiut0C0)=B+v2XkUnkVf#J{}v`-59 ziGTG$b7MgJFiS!$!Ca8Z{=amln3#wZVxjj`pd%&1;EY`%4{b&pd4|YFT z%vpcB=1WJ(*a0O?S6T{jV6$SdM|pPfv3fmv9E@~Z)*mKY!fd;#wDtcXJ{UQ8f{r-D z*wG*1_&)|`@-L?T?|KAPY(u-r1l6HAHl3-L+%H+i2|cR_K>mLLDuRFD?(fNX9Zb?Gkh!{&v1n^GsxcEAYXTdjNJwN4d(h5 zP;U+}TexNshHaw9tXxCLIl(<2%ngh_t8KEvx{?LY>{Gh)PuYOts#P%-F*fkAdd#5| z|9x7QnbG&G#oW7cp2Y?nTLS@3!C$rRCbXwK1BE8fy+Z ziTdjbT51IviaKlue>tGLE^uZJ+UyMfTu5zq2Dlqs*}%0q&>GezdQ8sIG;3-LKf~M9 zzg*v>=P#2pP=_;BE_4M1#2pU5IiKWlEA z>W+NWW^L+)Sxr;fpA;-hpIk*pL*9ccAIvjRpYb2FTMdsj(hz3P&Wv15vVbQFvvo-^ z62^Fn5ts$iq1wr{k6Cqm-fkPC?-|iG{HzlQdW`!~YBi zOuTO%i*X)WtHb>-{3n+nlT&|ucb~~0A4(HDBLCeSe7u?lE&w$Z|4Ie9jupq~zWZAlOn6If7Z&gr?v(~T!t9w1S5{+cm zR`j(sc|D#`#I>R8Y-wCO`r3@9gA|YkMT?Fc(|sc=;GRqfiX1j+Zu#5TB3ksruzC6g^3?fL93)%Gc-_-DTsV#EM(l`N`e~8 zfA7pNGWzG__OG9rrW7p58OJ&O6b}rqmNJbqm(3{dM&Mk1T;o2}2V5C8)dz-xTpQ3g zGaB;m)CSA{Z|t%}i4Y|IUd0 zF{{LVIka=k*zu=3@i*I=-RzA&+xW4YvzwwC{!4$t-jMuJV-I}O2)^-%7frrOCkEci zLj5Q^-tG&v@J1?LwCrwQG5KqCM#kjLxgKJ?|CW4z7ykZUut>@yf9Teie7%kA9RSpw z$5!MW%T$%(+g{ui#G&vyI1}>DUqePvZMh}dki5sG<}1Biy?gf4Yx^u^fiHSpTA+7hXea^|92bz|AO22zw}0U zyh)yVH4fV7rydMJn{MGHQ~>=y>m*;UIc>p8MCpO69%behm{?S{whge?l7eC=E zo)&(hKZHj502_b&Q=6`Iq>p$YyFxz|NdrGaHcFyl%^P)Q8qxLSVIqCO{OT-T(kx^-FuZ>D z(2(@MXK42H_&=CbWCFt>7W4~E3fce`MX`;dKyurluSv1>wq9I6`NR>IxntfZWiD}; z#z=<5X;q(F)jGv)6yF^{lO_);8ncKeU{ZE85PwgXDT?h?5y(`2AdVhT$)THlP>Ih) zVerQCK_z+xe7Xmsg98>k!HjCTcvGUgICW8(KQdmCb)by!pQrL>_W+7hS2Y%d` zEFVl6{+jlHk5%I9Nc8ARMd>pzrgs{Jn2RSt^wkHX(6A=am5MH%lp$uwSWuC%D3WW{ zBX|Uv9q2OQd*2^c41Tm~d7Ty`w}DhYO*%qV!_s`*q~qvA)qPaPsIOR>H)iI9RAxl@ zK!KSdH9sOUY-UhJkzqCsYfg%kuPa^IqI_NG$`9l_macH7kBa14mG9S`U)~xMD{%Q~ z&550tdPZ6@OnA{9InqZwkfJyOC&Ou=DSbqfF`>_!Gld?JDWoclpszgWV>D9>N0NZS1$6QM?;7s=CucY(r-b4@f|Mci0DVN8r(GG8Fp zlL+-9rToNby%_qP&G5!hNrnkLqe+!E%O-8pSNX^EesJ1#@JYLAUG*av*}YvL%=$MVtH!zq>&G^cs1D?HH;k_D+L7QPBje=>^#}P6ZZJ z?e0J9?y~p%cF#?DuP@|vjv^BblrRbK%A362((+ zb=2hf(ao62d(2eO@DIZ+Q_;$i>Y7IQ7=z^G{+ql@0zH<`_Aaw(zp3evGS_=+@w_!R zdEopy#XUSH_(ICK3a=iE_tuDga_oQFJoOa-tG3-WPj;92og>1^*= z)xATnJ6X(Y3HIM?r#Rl<5|YPOS#5X!Db$9YQ(AGeCD>%Z!}34NPR*%7H_28$mIaW@ zhmU3f=wLpX1uzCcCgVW5dCJoH9|_>N*vIlg@3_#%@XY1AR`+L6vK4$)C$M{DR&58XHi8l(fb!zTNq7-nZ=JUT< zNFVV)M!RY_8BPPgD3|`F`;mh~r)8J1hHub(Bwq?~I1Z#jD4+1p7~zBE#*c zOb*9eq$M4CD6hzAL4M!;WwkHLTY?2J9l}xO5(mPCpCpba(j$M-NR#}lN4@G?FOV0* z6Y&I5Jc9L~%e7^r{x^A+aWp|+`uO>tr2uB^|2zv7D`c|=CzxVuT+W*8dhTA3_tIg1 zEId6Ybu}YqL}WZmCpcd{??r@@%V3WU_Z^pIEc1413HAk^g_&g}+t%_~o(0EiZxuRz z`DtsPZ;lL_80qwGOG~i-X3v7-jULQXKiZ?KXRbs4%5CW@LtBCwD@ai0SquT_%1e}R z^@4a&LP4}xlanaqO7x7xd_im?Z+NnZ7sVID&z2bztWdfGD}|1loGNNblM00kjOwN) zret)-BU3(W+CFQ~@C#N8%&MMY?6cS1i;o@{-1nA=&k`b|+~e$#<4i}$HIu}l!8Kpg zwgmf6=pZvjTxT}l8(?@~aPazrqR232tH>BOFrYD2;V8lTS+L;pp$mCNeV0R4jHUtD z+LxQkkA<6F;8*lek3I(yk2r5+!};iwBlrLnm{i~_QQhY=5Dl5Pe^70VxB~r zY(jSB2%Eh;J-jbLPb%g`>+uD8E+QV>mm~YBK-oqw;*XHMfbhL%Mg08a3PUd)V~A8X|!Knl<=318suh zh)R2tq+$s*m`LW%F+YlTQZQm5Bti2*?}5iyo`5F;V_+ntNM3FV=y%Beoq4f*0o~!> z&;du7sej=F{re{8KQ}RG2Bd#ytl9*ws6XKU zjoHNXNMSZxp-M)CU_i&B4<9z0<7DgP;>xkGhIifC+B%s#JK4H$Y&mRKS5uCa6MW%B z;u6IbY%>E#Df9;A$Nzdk06&I^1_uD!<8mV znw%#hCKM_>Q&F$g?@I5TPPxkk0?z8GR?&laasHUU zQqV)#gCul$>A`x52tg5iFf%9$iU=VDizo{(mHq$joOK*`B`^IjbI$qi=Rg1XX8JGe zzCArZKYx4!A<^N4Ou>j02G8f_hvO5b8&ffF^Lk32lw*3wwoFA~p#Oj0xEWPY1>T>V=T$Fy@(Z zjd_OLlES@t)&gsOkZie22ro)2E!N^DZ&p#f+$uUT*Ioi+TZz%CR)(%Qc1eGij*3~YNLE#5u zcfz8EI!@9iR_St3!FiU-PM26sTbajA9gHN(-p(XY(jRe1PPeQ#yCh~i)X>5lGMTQ( zIS{9kS;ZzN_`P)SVg;6N@9CYuw!<0KoFkhq@XePAP64%3vfrNUPjh3+Sk+=-? zu;yCAW<}cKAIL1|;W20_m>%v$OI!~N!in?v8b{7k>+zh`dcPna^%}1y655-5Ge2M{ zQy-`)pu<^#5nL_u6%fFL*J)0p!|yTHo#$G}nZUzX+IW1uns_nb4@n)b^gqVi>JPUl zUfnvzQ{1n3;QL>4sX~H57hIj7*Kiqx=niF*1_=iTiUlCJ2gaY2zQJ@uW|jfMAaJf* zvNvoTY;X(n$WGDsVNj62Ugg4%`nmw#X09Cfb!zO(B+FE29dd73Cilf(hPCd*Zq6iW zzWN1&_=S^OhfQ6>O|AF`X;IxF+f{f7-j%R%{35i&6O^#CI4q^Z{GWcr0-lxt*&hu` nlHb7ShyTo*KYKfL#RD%8o>K$%{>kb0#={ZA&$4nAKI;DkWtnUn diff --git a/Content/Characters/Enemy/BP_UHL_Enemy_Sight_360.uasset b/Content/Characters/Enemy/BP_UHL_Enemy_Sight_360.uasset deleted file mode 100644 index 9fa69fa93a808e62fc0ec7bbca041ae9e1472773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40945 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 Ba6$k8 diff --git a/Content/Characters/Enemy/M_GameplayFocus.uasset b/Content/Characters/Enemy/M_GameplayFocus.uasset deleted file mode 100644 index 23d48ed2fe19134f6492a998d32e23c2e371257f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13031 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 Na%#V(0aOsA9ssC~mY@It diff --git a/Content/Characters/Player/AbilitySet_Test.uasset b/Content/Characters/Player/AbilitySet_Test.uasset deleted file mode 100644 index 757165767342a26c7ef2849f871f8e917cd0669f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1546 zcmbtUO=uHA6rR?^pR^S%{!maMqO_)Vw{4ml6qIbTv0@uz+E5Tgr*UXjw@KJtTcd&% z59w7@deTGHi-+RDn}-rmP%qMpXb*ZRhzG?(D?L=>dz+oOi3=8dFgx#k?{D_adsDpS zd$3X}mCmmt#8Xem66{EIu)e0BE`E{jE;TH4&4ivug*LznZbA;hE+#V?qiP>hb4=@3 zMl`DB#c-NxG-WVN7vn0;GffPQD5_%Q2bpnhi0KA664C(cI>rZ@fs|g@gMm(|vo|8k za(6Hgjdc0_(Vl?6D;$)iuoUpi6=Sd`5}eUxIqyXV$Ok*F!>|$)jc0P*%LDg5c^|et z`RqP6J=}8R{b=;&+p~$nT%iSXV;nq)8zQ;L{)IjD%^efc z!AEQ};K{!JKN-kAPvIn14GEJV{e)_6D6>`HTDw)S^Hf=s1#X9@;>0m72Oo_{U* z97327#`ycjoLWSHnYd=12)&$ae1P-LcIaNAx-TGLIf||`L%N)~pfa=D049yFVlX@7 ztlW|^$UL%bW&~5)$~FJY*-ExTptz=t!Alpyyf~VU|59r>l+Q7TQsGZHH7LO48{)U* q1$j*mr0I#DBE0I;KORpCM_$ZhAL83!r}2-$)2=sj2Rbbf?SBJ#l|XC& diff --git a/Content/Characters/Player/AbilitySet_UHL_DefaultCharacter.uasset b/Content/Characters/Player/AbilitySet_UHL_DefaultCharacter.uasset deleted file mode 100644 index 41245ca943ed1cba7f498aaee6c7148c5a9cb562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2612 zcmb_eO>7%g5T4d)DQQa~B`r`YS_BQL8{0K83W^l)U)(4m7#vF+5aGpnq)XRpYjK$NN{!jHH_0wPf%fhYnl2m}XGRVo#TLum>G!hHKtsChNfA3TFr@%VNB)akRam(H*Me(#&n>E6I?%)9GK zq7=`;tfot$?vrX!>I2G%F7$FRzF+7fXG+}&rd3gvdN4YosES$6NOL&5Z(ukf9}(lK zS;es-qHR2$hd-uWYlwF898QE1ozX~V{LVzUGm(tP!@a$oU7=(m)^*42$!Mqw<|EUG zYx(Ss@+((ZBAVnG<0BsLel~k_&!M^4@!!l<(^GAw@3y^N@wJp<$NfFgBj3E>hi}-y zLDulkN25PKw7P|Net$L@@!v01DGb>W2}CS8(V0^{myxrQO_~0iv6#nsa5xWfxEByd zu$w%xR^A6QIbA85!Ia3$BFAt@j2SeS{UX1Mg?2O*X#{F<4O|k__H&yHo2qEU-ZJvZ z1CiOQz}9t9PU{7JZ)TbLre+oR_4tbyG*c*=)TvVWwsI4My3kBHno;saRl3OPVW|7W zhAh7~8Z2m%&ihVog!g+#9+f$>>L>cc`@d{wc3R{Ph%q@($O%<>LYPWH8{|hdiXtbe z#Vk)iH)HDK9^DYVK7TE<-Pptny3E@4>0)0;4^&)PQXAu=)3bL!(|4nXT_;;X&Hd%LgZ~V_ZxfmqlIC%#`HZ5S$NjRTu`fzgFzv0wjB9KKA&F zxALxWoQC7Hz4^@aiojt8A3C{3*#OJ6%Am@Rz6mZQx<{HKAxuH14}VZu#|$UU$Vg4J zUR~Q)aYy&OB{wqPt~NX0sK52;2~-Gos#;L!mgeXB*E1J%jXe=M=4NM&XLo5SZjN!t zT#y&%7Cm|l=x@etv6su@{$$(@%iy*;GEAx%NNu6ND}vvsU&^W|yg+V&=9gfQQXstV zC#@CH5f|+2y%T)9{+IK2(5vL=Twn#Sz83=ir5U?}xwQnYU)AsNy%cm#3@a%sq4O` M&p&PtIZWXH18(F`zyJUM diff --git a/Content/Characters/Player/BP_UHL_Player.uasset b/Content/Characters/Player/BP_UHL_Player.uasset deleted file mode 100644 index 2bff915217dd05b942f3be8f43b215459f559cbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165885 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 s61ufdE3ZLLOpT9DDTPpXdf+gmTOtlyN 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∓c@+(r3s@}JQMZG ztO^f28PmBA@*stk5fxG#d03scc1h#2mt3pYkN5kgesL3#%9$h8-WKL`$VN> zz?_CR^m5`0zjfYnWK5V$@af2qOs*2#FkFX`;mz?2j99RvSNW}z94Sa&hAueD`ds_; z^Z{LP7K<#Xa4`Vm;1$j!;J2=@8H!R|+(lbaTvzA>?>67Lb%oj$ON}~jiHO};KO>^{ zUte4l_Xwt{Oko|HZP*Inn)c(hDCAdQ}c~ zZ(RYUNkV>(6U8^K+aJRoIhE(gUAWD0>H46ua@Ekpx2}+n_(PWZ)UnZ@^sI8G{dhW7b>k`rC3N7IZrNRLPq4FQeH>VMV>JfHdv>cYd9H2dvJ?3;#$wYFn`wMS$=q z+rNp2FFx#=SK;JShs|NLl)4!<+?Fd#4#oyQSWhvTU1}{RgI4Q;*VJ5ko!+X}In^$W z&7!tBOt4*-mVZO0AhSygyjrKW8#H>o$pCw?!9L^;SX;2!wHAw0Z7`XOZe5`@NWbQD zZN5Bx-=iI-ZoU3fAN|u-)CdODn$%L6mI;F7PtIE8V8w7<0bW!zSPih0WYe1*@cNtC zWwF`Jurs~GpmxG0Tm@cHvS{F)H?764w`nalo!O-|Xw-0KvT4jZSgYbSUnJ`aZ9sc} zyt3%;hsXaIIV)0KvGd|;%b7w8qIpl(Pn%D>^pSI8y|=5DOO9TKWk_L}tOAIMBZWyE zi3?{XO;kEL4cS+}w6WfiNk8RwoIBxU_oa<49Y!9cu;RR~fb@?0@I>3;vHHl-N1Q8{ zPPi{p4#sBHC?!D;cgMOy7?2F>3LVl1d60S)t^;5kysjDZeoG2l11%|VP>14@LN2V~ z-nk`(dQC?hy87i45gV-MAE;O5nRaqZ3OXQH`gLJB*j>1!P#0J$$fF9#e)f@h`|h_* zw{4l>89byy^@(z@drJx+C_X5S_1Ic0if`M+dB1*Ltyc8>GfSJcY*(YH9PHkb0+VQv zaq!*@3Pg!lJze#ihx593-0*%`>(Nh3-!BKdx1^Ad^h1{Vm!|io{W#)=Ywd@Q`KqN| z+oIH^uzO1i_m&g_+g-?JcXCOyd3`!ZS+{+V@Nl!(ZSSGkNnu63q<}QZeLWuGtFHDh zxg=|dYxb()-+ViNM^B}0hD|o*%94W>!zBfnJ!*_v7ksx4rhs-mergc*;jozDt2Rcx zQ{yb~#L{6kYhZ&O*zy}ToYupAYuF`PZ?!nAIwyP(L#-*gB?TOxDLtxyT9aBT(=sIa z1vzVxgB8Oi1<;Pps0IbWHtn#YWYB^Em|)&-!;jwRTm{!WJm+ACZ{+D=cO4y^z()h% zxdpS;>C&3DRxq)mdsLw<=uhcUg@R~)Np$UzIh*%8mmglG+feexN-RSPE6z&_NN?l= zQQdy{^IZE^{!UrFv+m62FZA%KG zM-@7x!&4E+f(jP{Fb=+RW)kpQSJ)P4T_FPMP+V6yS@uq@D^xwazW>^9R<#?uZ`oH1 zOFy?qysiL*kbrNAU#X$5HojfU$k$gNKRB*NLz^7zE?QThoaOsS0Y#ZMNj<_Lf%QEZk@4{2b|MHY~5b(^V18Do?=yF1tn=MxJ$(|3s)~WHne-} z%m-h4{!hn@>vFI!C_YBKfT^HM@KZSj*MlNqoQq1x_cSQ=u~OuA+K_`4<&GJsP3ev$ zNWW6oz<5*LA@ls6R>*8b(L5FB(TAXfY+A}t8l#mBrsq;l@tqqMuobIbpjV0w;4zBe z*D^k$31r?w&!54#D<1gvMOu0yyrh}MB_?ON`@qY=H^B`%_`rLoj!ZY~ z8_>5emyw*7Mc(PnPR6%0v(w0{Ztj$1FT73}a#Kv{)j;#<<#$|@XD;n@zGkaNOw35+ zefS5#2*<|%ef3YNp^45#SGz5bOgsOp9PAdFBGWRdFUY@;nj+HMdfW91TSi{D&W`^i z{h^biR?5MOqA4`9k`@Jya|Naj;N>OG(#UiXX%^D6?4(R-Bt6(yMvm zpU@QX6FUx1ir39`@g$_DC1#a#rKH2QYmISJffP@3*Z?3QISckHXrdAxjT|j1$mdjS zB|ZtFi-0c~GrWA8$=6imy8@&?|xPg7D~%j znc=+UZ=+sbFldu?W{H`@hW!0)yd11J+n}m9as^*#%|GuBOF!oU#D{Y5d zAqzY*@6#vOXS8$9JELmUDtp#fVu9m83xnL|SaPthd35qGG#GMqfTpn03x5Mb9KK06 z6vImMYZ=JLh8t_jx9+jP{_Zmu8|7&${w@dm1q-9Whc~~MZc%{@lf;Z^A7DNgqy#2^ z+!!zJT<>$a+6K`tU#Srpx94xPcU5gTzW?_7m1^#6WZv$lHD$f~zC(CGo)v9N9muvK zN*BPkW;}Lw^N>eR$8J2{rq;lt2WyH2!FZEXogZ72iA zI*R^D4RQ(DKi#<0A}Vv@s;G%GKGdxIJZ+R%naqY-0ZG3d`Sq%!R8;JH1J{)@j`)z1 zgB7I>wFVlwfsVX2*E`rYRr`^EqO>7=Aw=$FKc%+HY)H=b_ zQ7Xxq*%0z!2x~MdV^~(li5;dmx4%69Svgoy+7NzXJgMZ29Z_+Iqo@Da$sBuf{Vj}# zPQs8!(GL~KhT47c=91HK<)Ytte9*XG3y4$ia%zhUD}fj13_l(oew4!HUv` zngERps&qYW8hIvWQi~q(b1EI{5r{WTQ}#mv$JE^Y1sD%i%E;c^cw|Pqr5}G%xk>es zQF1oa7D$pl%_#>fN*lr_5v5O)qbT$9L&%48Of3g1N*m&U#*oLX3mpFsM#HAsq5*%SQI=nioPU6bQh1`UmJwGe66K{86 z@Vhm_jBXE~9^yI$cFrNs1G-eu&is18x3NoKZpd9)*y3460#d-{0TFP%V&mK{DRE;Q z6JP7zVgAv2gXLgMK!7fpZ%NlF4j0;7o(cSMsB>?RQQ6HqUvo}BweFAD&0Bs!IxwB# z;I%YF0AN9CL(5a&g+3xm7EHVG;L>^>U*B|K)4;du{7jmMvXpYqwx%*mqs) zWoOC3n1E1DL_y33{1&nb-}q}ooxA#c6H|KkfY=q&e(TwN!;JMvhmvhz8V2O!>#ql9 z)_rVR%!WTZy-?B$p}`zAY8&9+cdV zY^Y9vU~;PNG&vmN7EPOSPO>|DP7-WijUR}CjimeG?PuJ`m~0*hn+m39hI36@sQS^I z_$ZhSvGCh6s_hhtF3XrBp6cOtOz6cmiClq<_MEh{SdCjA_2Cy<%q&d7qB@38SP+#)4xH6v`& zZPGb6`$A5RJ7oZF3!R(>dnUTseo5h^c(SiLiYyCuMhBUtlke`prs(cL9>DFBlAb{F zCNL@$>PSlVda({S2eqX%gN>v;T%&f$-bQS*Xi{4QQ0sxu{G?{Ue#=-V?B+~%Zsu8o z?b~tNaGoRnc5iBS7VfnV#Po^uqnnBqIX(g0aPCWn!1e&x^v1YI>nHdAa2NbQ}Sj*<{u_OEoKg8`+dU>;kZR7F=^P% zJdJ-0Mbx6PiQ&%Q1<)vt`gn~7T{GbTt9*i-iCh=+O(P%ySi&ZN-?)N(*R%QEp0g4% zlQX={h}DC)g3nxm31?-v;Zb4Oi<~tQ{H#GD?9WabI@o)525Gw-ue4a)37u??nw-Yj zGd<8kY$@5E4ESsZ?5Iv3w!x}zntxTG$A^wCgpLA;D@$5Z!8r=DQnh?BQHKcl?ll#_jH}D9y{X`rxGb zb0BG=qrWw2hRkOAx(T0sb#jq&e)zR{)ys}_Dze#Lj?LdGFkcn801Y+Nx9III=-X8mNZ5KN)eso zH4DVT2GA=rjs5JDQ%dMS6J+S<9q|)Q6gU5Bv~n>Gh=%MFT4)|o)HTA7eUu4?eD&}z z*y=xURN(P_GKk5VMAMP1`{+4FmEZ_NARcAl!06aJghPT@F8JZP#)Z#GcJ9Fn!pKNQw6o&Z!2UDg=0RR91 diff --git a/Content/Characters/Player/DA_AbilitySet.uasset b/Content/Characters/Player/DA_AbilitySet.uasset deleted file mode 100644 index 9fa9158b753d80302a0c3fe170c311f33ec5e091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1685 zcmbsqO-K}B^!eA%s!?inNlj3!%w4nDGK64vW;dnPOj$hI=k}FT)9y0!^|R7J=#X>? zNhpLmM0Si07DP}8b%`K^i1H8}_97T~kP<4l_jYGz$K9c%-tf))zV|=x=bPDU`|hoz zQmIoV0Ip(yWyAzUxW0}&PA>Q-m&@l5-1j{Xy7wS$%LV{1Vox}#bEb81Ezb3jI;=B2 z;gLs}&LV>AhNn+s39fq--;i%u)l`uf-~!dq0IpH8j?jqC8W6WDZHnacO7ann59{O11JUh!nu?W-DQ6|(_w3l7r zMw~@BREflR4GMV%BDxwE9yzA-@QLAbJR)GFyY=WU8_%IMFuT*WB$JE-)1hv;q75nh z47;catF~~p{Z5SOn^P_5RsQvFo(?#)Q;;eshl zFi4Kg+}ehOOiudwX;sJE#B^9(SPpGMhM8V4j*V~Mnmbzt?(ToU$xpZ|lnV|TUDuCO z?DP3ljK&(>&`EOnxFz)gjD zAm4s-Po0_tniO+Vvm^`W+p-wA$>wG?&mUERfa0Z65%m4VU)KM6{ADZ_zR8ATYZSKC zN6c@r84{@#N;DzWVF=v?eMjnaYbe|hYBW90=DgmpnQ$0K_nHoD{{M+}=lZ!|nw!&i zX&px72=o!O2pVv$>!wai)9VLTZ5Dqpx4%t~xjSFYQKQlD+u_pZj+3QtUhd6Y@&F|N E8&X$sq5uE@ diff --git a/Content/Characters/Player/DA_AbilitySystem_UHL_Player.uasset b/Content/Characters/Player/DA_AbilitySystem_UHL_Player.uasset deleted file mode 100644 index 53e1de9ab927d2fba9a5634488f13a3308415a7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3106 zcmb7GZ){XW5Fco<(o#UApsi3_TdNfAO4}=76ZHOYZSB8_8{^KziB;u zw)ydQycq?lbPS)vQ)<^U96 zca5X6yt1ll?S=|hmB(3L>2Xw4m6f@jUa!YlM&>{|{)(?IpS=i2 zrKN2f9HpDM%9+krIc$|;9$<6jP%)dZBD1 z0qX*ap)fVJX&vTn8Ym=-8(AnO)-k+i582kp`l9Q7t@(Bg7HA3vIHtkp*<@04#|zv) zy&2~ZAKqAoY#;N#$hvq#(9cw5Co_~_fIOjxn4g>!9->e~a}6cXrGvBil~bg@#n58< zt4FmWQh>Z(i-IyZeD`5wWBAMS5&004m3#Wqr;8CFW56BMc$>LPn5LeJuMZa`7ytMyA~ za>Ze|gMn>I7ksVM4pK1SA{VB9%z3fM!$X7qi@Ww0r2yHY5xDTpU5iUnVW$K3{Ln}T zl?Ng!3q*IZY>?}SD7+-amn1b(Wp62F>Ss|~ zNmMF)1!82yOK_*zEO~3q&~#izHNdIs+;H^S!ru5*8M{Gdcm8mR^U(^~7@noJRC*G2WXpLCpiwGovLrVkM?7xqRPql|O7LxqZPPXajN)tm(5(}@ZPn*5lQ4Nz2&wqlKE8Hi`d8M-{~sJ?r%(U@ diff --git a/Content/Core/GM_UnrealHelperLibrary.uasset b/Content/Core/GM_UnrealHelperLibrary.uasset deleted file mode 100644 index db69b223d5b0017b68da0bb0d73b241eeecf6da1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21509 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 diff --git a/Content/Data/CT_RandomChance_Scalable.uasset b/Content/Data/CT_RandomChance_Scalable.uasset deleted file mode 100644 index fb1ea81b22223a0895666cadb6934ba146eacaec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2320 zcmbVOeQXp(6d$0i6|7c1+A4w}#t-PnU0F`6hW0*shZnEc(hp;_+D@-iy0YE9?9LTV z|7a71@TW#YfrtT=n2`R_ME@XYq69@_S{02N5gQVaK%@Ru2}tpLZ+2%{E-j6|ySFzgdGGC;JO1jrcdq1ex$Z@TEM7>+Uoax!@N4F`wGYSMJv;ba>HeuRRS(<^yqy)R zx?gMV9i9BX?8uK_OqCn~-XHyA=P!ldnqG3c_E6}fSj{8AE4z&l1x8Iw*115@R(N239M zSP5-V{IzwB(MVYFhy781EL^Lse_UBF&Of6E$O*adb^RQ2*d(a<($Qv|902=gifx|!g%sp4X3K$b)+4(M*1oossiwIvs&7$s zMs@~w#P0-l$TVrT#WWzWJWJwZ=hRZ!TTsKSQ+)Bc&&&l?q@+Th&y*z(u!nlco)ga@EkuxhHDxUvZN> zu5)Iln~YvYIxlV*K^J41LAh)7+WV8&mjKrTyt?x0DNNJTENhX_#uLT3NE&d;=|!KH z;NhElUSg>mIzqpEFtrNUEi|>2Zea-nsz!ZTxRj&=%u3S~BTIR9*D?ed7LV(Fs;=^^ z?LFC6aqLUXVvEW0B+1GXhtcQONF>@7F?5Slos-VQ#OXT(H{R5hfbdh3ltuL-bgfMt zNNY^Q2K*;~H~wx4Ha9aKkNxEB8O*B8V#F|6hkYt?C0eZvNN7h=KJFUepv?%H4~ON4G#l<-TO@v^jrnkLix>9~_#^q~m-G#J zQZK%jbCJ`dgcwx0x+Gq1#W*5e&%>14Y;nf4qimhrv>`ClH&LkhR(&6Jd z!_Iu4r{8$>J7Rap*X0Uef`v36p>B-5rv`6Xv)xeNMNTYm?=8Vt5b_nX8)c2h4sM^V zJ7SA}{srjZH?j>=(fNUWQ{}m(f$cyN+%|STyfr0aC?p`1ff1LI1D5$kpqE4*@Rmhd zY!7a>5sXa@3Fp|wkn)vO0Z+71LWUbA#>Y3pIyf<&sD~lAZ|`0hhl9XtfQu-oC`tn! z9?4S$aNPmrazjJd(2%_DW7|Q>w=5LMLdRB$^q)7nk#r}vB4G}%DWo;<%=>@fIQ+L6 fxqNuI=E=`aVZGyB?xn%Wy3GY&eX`c?FcJSRp#8E2 diff --git a/Content/Data/DT_Abilities.uasset b/Content/Data/DT_Abilities.uasset deleted file mode 100644 index 43b460398839814991dc405cee8034c954cf794a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2379 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 NXp`gn?3{J*{|D@O)bs!V diff --git a/Content/Gyms/Angles/BP_GetPointAtRelativeAngle.uasset b/Content/Gyms/Angles/BP_GetPointAtRelativeAngle.uasset deleted file mode 100644 index 544360d5b0bebf6ce6a085a2b461be0565bd11cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76685 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 diff --git a/Content/Gyms/Angles/BP_GetRelativeAngle.uasset b/Content/Gyms/Angles/BP_GetRelativeAngle.uasset deleted file mode 100644 index 529ef5030c7e81f3bc0e23723e14c364b17c2a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2718 zcmcImT}TvB6uz4F<4-@P;X@@p$ZF=UtFAu;(f+urVQPwmL~P@Fv$b({nH{wi1Su4K zs0hUfNig)G0x9Svg3`)|>_uNH45SBxqzzaE{&dRVW~@FsI^+CP)Autuy;@|6P6LOAHFWM4m1YNGNIS$^2^P7 zeMza=q%&)cg$2dNvf_MGi8;T(RH84^`jz8g^aPq6zQykCUJ)699=}KMb-$kNUzz%1 ze)jp~yH77F-)C=psK1vsX&H>!7`~qVHVJ*B9Rv~&qd1baa5y#vX1Tcy<+@yeOc@u= z)2WNRazf4&t;d9x!y+$rPpNuw&;Y<%6GWcW!r^-G)ZlOlCzHj)yxPH0IP#g~Lolgj zY?qi8TIH}Yti214&B0YOZPevtY?P!3?*3Fz($w2{yHn5@9XxHQX=9tbV78p(skvvd1IX&{J!`#mfM7)%BTV9i+U@Ec4U(YMff z`DO;pO!NZN&I(p*2oSJHHCi)rP@$$Y{PE@F8pN5Lq5@-L1cog2JRU@JVwmb^vz>=< zIe7AQd9`XM2z(JIE=zyf-oJCdfjdXXsqa1#gpBkZ(n*#@A`@Ck53dFi>LrT9fELpZ zNs^)7ZjlwxV!9$Fi5>X?dYEKN3Z;j8QIe#G2O^Qgljhhe hpXRN#i5~T_SMyk;@i~=K$71Q}xY_49`93D<{{buJbrJvo diff --git a/Content/Gyms/Angles/BP_RelativeAngle.uasset b/Content/Gyms/Angles/BP_RelativeAngle.uasset deleted file mode 100644 index 28e6e1f6a920d7f3ee62c2a97217396b16d9ef6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56347 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%0ASTNKggK1Y`|nHIZzB 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 diff --git a/Content/Gyms/Gym_UHL_AI.umap b/Content/Gyms/Gym_UHL_AI.umap deleted file mode 100644 index f72c80b21493108f60d9c5a35801e61748dd1ed8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215706 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 Vh-772_O5ew@83T$-oi7%|G&*VpXmSq diff --git a/Content/Gyms/Gym_UHL_GAS.umap b/Content/Gyms/Gym_UHL_GAS.umap deleted file mode 100644 index 705170d83ef34ae209482aed3c116bd7db584b95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20875 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 QAa`o7=XQ)S2?FH*31`ajt^fc4 diff --git a/Content/Gyms/Gym_UHL_InvokeGameplayAbility.umap b/Content/Gyms/Gym_UHL_InvokeGameplayAbility.umap deleted file mode 100644 index b1b7b34f85a3a96055b77ff2b574c1f9d525a5e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255726 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 BQfmMJ diff --git a/Content/Gyms/Gym_UHL_PlayAnimMontage_StressTest.umap b/Content/Gyms/Gym_UHL_PlayAnimMontage_StressTest.umap deleted file mode 100644 index ad0164228d0481d70d2d28fefadb212d35d45dc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218626 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 D%rTEu diff --git a/Content/Input/Actions/IA_DebugMenu.uasset b/Content/Input/Actions/IA_DebugMenu.uasset deleted file mode 100644 index e6dcd9ac9acb6e3f07453eb063d56965af266b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1492 zcmbVMT}V_>5FT~yM^_N-@1Y+G%1Yh!>Z&VJv{!daNYiq&UedGI)9%*o?s9+3l^%p5 zBzou%dMYBUN0EvkdMK%0?4=%p@<9lED5#z!B&u!Z?%mtnRWKSjcjnA|Gjq<&oI7=X z_w9vrIz3PXP*MmmkDRCg*VowO+-LE|eCdpEH}Ev%*@-%TF+d%1Z&*<|lMiq?$<>4L zh|1KIw?j!9x;G%{@r0szI|BXfJYqyUxniIPKp8HB0wX=aTw9U1H2Xq+f3w)o6s)fg zi2hK$Ac#V!p{Xt86a7M?4Msd1$HTcS=N1x>0?29g;3^ER|M;-~omXX>aMR7C(=5slCL|`uM;O(+i=E+Gl1UsY^wiiI1bL50 zYCNfX+Y%}dABvpfk`4wh0S_)U1F`3`2?{c_oYn`~?n8y(c=w3t=e}^e$9+M?5 zVl=DPTLBD}6UzzSW^M8@RBR$TlW0l+C$a~{y)(XLwpo5G+kis0c21pBrnvcyUNj9s ztZa>S7;;zypj&0-3!)~aP=RsjvsQ6?L_HHibSRs0HmIe`T7TGo`~6Mf|M}+kd!wG#mv1T9Mmuyy7@GC> NxTc@&qGwA)_&*%|BMJZj diff --git a/Content/Input/Actions/IA_Jump.uasset b/Content/Input/Actions/IA_Jump.uasset deleted file mode 100644 index fac64cda0861b95e543d4684d0fda8422637b0b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmX@utTpe)|Ns9Jm>C$jm>3v70%;In1md?D8=ky$n(~GFmf<4D-EMjsK(X^I3=G;p zT0bWWwa6zksVK3iQr|PLptMBaF}Wl&Kd)Hd(=pzwG`9e#n1O*Chzmew z0znnf8bu&&VqofIZfx#mYGh(z?&xT4Y-s3g=HzB*Zs=m*VrXFuR}56oAO&<6&}y*e zTTnMX0@5J-35XTaw(XD9-Ql__t(J(<ZiN&e9rh3L;c?O16I*V|~12utxZRV9@Ach#wVKS@` zF&GI9(*K~a0@#d`d|^JyD+}ZVBqnDkrl~`FO5b{5S#^T8se_9JSl|K8 u!U>QAP!Xt#VEJb}RAR7F>iO=^a=Y7g6FJG; zIdgu#IdkUB%pHGs<7f9~W@dWJi5ATx`ki}F8MoU5qcMXFcapf z;a*Wfp}Jt*)e*WtCaLXM5OV_ufy}3Jnnw?Ij+IsMsJ6B% z60F@L6H*v*bI{jd>50DDG*U#*P8RiC-+39#3q1e!g|^K7a$aYUuqRpYvPbs>j}=`P znccd^=`%AF9sO0UWNEXeC33>06{GKCJNov~2kP|$7W+Eg+@l_Unxzpd+jg?MMItTt zW>S)-uU-A+xnkOF+ms`!QQtyqCr*8c=_1MWP;R=8?@u%>Vqv@1uO3vTZcxon1B1v{ zOiN0-TmD@o7P71F4H-9cUdoT({I;6KyG49Z9FlEXTqM-D1xg?$hNO`aaYC~!<{$)J$cgA%!W%|RKF1ze_ z=w5X5OGt~WizEj`GA{eAEYY>omnQ#D*^VE5?G6epoDhaV=37UOA#JlNd+5!v=a)c; z;vOpOqgP?IwYy{oyjs( zQ@b=pi!cS<$e#J=aTYjxK*o;Y>ZK3IIlB{^K9|Tl2vrZ7;u>9Hvjhy6^6ma+JA@4? zWmj#Rm9)ctflA>mx6S6XTj}V~xiQa$=e0v_Kwi5CygplMf1h#&i@87O@HorG2zLt_ zh@oa-K{oA?!45e>kBw~N2I}z!WQ%fN7aM}P@bBm0BeyPomxJ=jBjEp&hmSqs_ri)F zAJHdd7yd=1?4d%7c%!d2`~JSY1ArSNC5$@bZsx!Fey^BDm!g0vrkq*06BS zTgd0VB9Ob;mmM&j`x!yR_zpcR?ThC{52WYP^I6(;B_~^Fy_)+O1cZP=xYs~#QY-AC z{X~M#uXgv?Ym=q)^j^?n vJbVxiHUw0|t>mA{IR82w|LbJdxBc5I$igakdg$=ap^l1+V;k`9fMEYGXP3Ln diff --git a/Content/Input/Actions/IA_LookStick.uasset b/Content/Input/Actions/IA_LookStick.uasset deleted file mode 100644 index d47487e4ab3bcffa7b28f629e17e74087e217d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2136 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 RzZAQ^Y1g)e@?jtN{{xcBi8cTL diff --git a/Content/Subsystems/DebugSubsystem/DCC_AbilitySystem_Default.uasset b/Content/Subsystems/DebugSubsystem/DCC_AbilitySystem_Default.uasset deleted file mode 100644 index 9a5a6694e2423e421f4033c7f94302db33415f03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27239 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 diff --git a/Content/Tools/ConvertToORM/ExampleTextures/DefaultMaterial_AO.uasset b/Content/Tools/ConvertToORM/ExampleTextures/DefaultMaterial_AO.uasset deleted file mode 100644 index 44c358e1ee2e01a36f921d5747df49e9eb905ebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14428 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 diff --git a/Content/Tools/ConvertToORM/ExampleTextures/DefaultMaterial_roughness.uasset b/Content/Tools/ConvertToORM/ExampleTextures/DefaultMaterial_roughness.uasset deleted file mode 100644 index 8d7a3b0a3d062474d0d0531b96d0ce92264dd004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16380 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 diff --git a/Content/Tools/ConvertToORM/TG_ConvertToORM.uasset b/Content/Tools/ConvertToORM/TG_ConvertToORM.uasset deleted file mode 100644 index 79b394cb030a13818fcf312386cc11077a65ea72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17888 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 diff --git a/Content/Tools/EUW_UHL_Utils.uasset b/Content/Tools/EUW_UHL_Utils.uasset deleted file mode 100644 index c5a750f2b95dea322fe3473cc846c18b07c9ddac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134987 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 WCEUIue7tMF1=Eun$-T=2$p1e>HYC&l diff --git a/Content/UI/UI_DebugMenu.uasset b/Content/UI/UI_DebugMenu.uasset deleted file mode 100644 index ded7848df494b1a45381423d76dfad7f04ad5618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23328 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 PE*k#WFQ!T70RH~~*76VL diff --git a/Content/UI/WBP_DrawDebugBar_Test.uasset b/Content/UI/WBP_DrawDebugBar_Test.uasset deleted file mode 100644 index dbb45c1da581b7e6b0f4d8d8685d36da04a2e072..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58993 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 ZohX;xi_Uy3ej{^6hbJE#mZAZ`{~y4`RV@Gj diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 4f0497d1..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Pavel Penkov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Resources/Icon128.png b/Resources/Icon128.png deleted file mode 100644 index e7f78e47d90ea68df48323bd47ea75f239c5aefe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GG!XV7ZFl&wk0|WD1 zPZ!6KiaBrRMo*fjAmC;=)izZ)GS6&csG+`bXy4)!bMy8Uulh9MqqwG}S;rPR#TE&N zY4NMI8L}N23I!ZwSOnM^kC4NB{{0o#3gO4!_sn^0u}rRh4a5Kcwg3Om-=Dj``P~K9 zj%J2O3Jn%|Y>m$wFI`vAEdNmQefRE9LBE%rs=uvYem`_aH-q7^+rocKK6%%F-}3k6 z4$G(e-tHDEXIheBdvfdV=-fLpF(r)Q=M=Yoc{063wET8bkNqi+){56fK%J`U_iq{M zoO)oy)Z?~NyFi?A&7+MUogEtVDsuk_xN!#FW&HZn&lJbmRPQM;~h_C)ywfoh1nZ#$ao#wCmH@!`N z=I;G@>mv&St(X7*c4uMu-zuYU1_So(jUc~qDDW{sy@|vW@;(%HetUG<9){=a4lCR3 zcJ6OphX@Y##;qr3?@WEB^W;U~`dLS=-UE6DD6;nW3SU0mmDjtzwya~>uB%{k zLnbk0j2HN)#~ygI&(wTN^^4Ezcl0pmo}8_`F>1X?o|41*Cue1Xc+1Q$%@18KxTA|< zwf}?5AH%P&W({X*nP7KwZ``SZaJSPceNU&mPLTO^@=d!z7%*%X=)=5cz#-BOV*>+V z8S92WE2qX9REtm8tQTMUYnyu6BZ{VXrv*3GlI?}gBI!32@r=bdM~W%APWd{J}Tyga&7W@q^O zo$HLBC^MBTTDq}lzl&K@uF`?2cUsQHl)dHJCb~dbgxqFpYe9TPjKRIpIr|Q7pRlCHtbuuiz@o|;?=3WMW&bg~6 zx$aFUbDf~IM^j|krnk8Z)Wh!i2{HB - - diff --git a/Source/CommonMaps/CommonMaps.Build.cs b/Source/CommonMaps/CommonMaps.Build.cs deleted file mode 100644 index de27ea43..00000000 --- a/Source/CommonMaps/CommonMaps.Build.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class CommonMaps : ModuleRules -{ - public CommonMaps(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicDependencyModuleNames.AddRange(new string[] - { - "Core", - "DeveloperSettings", - "PropertyEditor", - } - ); - - PrivateDependencyModuleNames.AddRange(new string[] - { - "CoreUObject", - "Engine", - "Slate", - "SlateCore", - "UnrealEd", - "AssetTools", - "ToolMenus", - "DesktopWidgets", - } - ); - } -} diff --git a/Source/CommonMaps/Private/CommonMaps.cpp b/Source/CommonMaps/Private/CommonMaps.cpp deleted file mode 100644 index 1b42fb17..00000000 --- a/Source/CommonMaps/Private/CommonMaps.cpp +++ /dev/null @@ -1,301 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "CommonMaps.h" -#include "AssetSelection.h" -#include "CommonMapsDeveloperSettings.h" -#include "FileHelpers.h" -#include "AssetRegistry/AssetRegistryModule.h" - -#define LOCTEXT_NAMESPACE "FCommonMapsModule" - -namespace CommonMapsFunctionLibrary -{ - static bool HasPlayWorld() - { - return GEditor->PlayWorld != nullptr; - } - - static bool HasNoPlayWorld() - { - return !HasPlayWorld(); - } - - static void OpenCommonMap_Clicked(const FString MapPath) - { - constexpr bool bPromptUserToSave = true; - constexpr bool bSaveMapPackages = true; - constexpr bool bSaveContentPackages = true; - constexpr bool bFastSave = false; - constexpr bool bNotifyNoPackagesSaved = false; - constexpr bool bCanBeDeclined = true; - if (FEditorFileUtils::SaveDirtyPackages(bPromptUserToSave, bSaveMapPackages, bSaveContentPackages, bFastSave, - bNotifyNoPackagesSaved, bCanBeDeclined)) - { - if (ensure(MapPath.Len())) - { - GEditor->GetEditorSubsystem()->OpenEditorForAsset(MapPath); - } - } - } - - // Recursive helper to either add entries or deeper sub-menus. - static void PopulateRecursive( - FMenuBuilder& Builder, - TArray Assets, // captured by value - const FString RootPath, // e.g. "/Game/GameName/Characters" - int32 MaxDepth, // SubmenuDepth - int32 CurrentDepth // 0 on first call - ) - { - // Base case: we have descended MaxDepth levels, so just list maps here - if (CurrentDepth >= MaxDepth) - { - for (const FAssetData& Asset : Assets) - { - const FString AssetPathString = Asset.GetSoftObjectPath().ToString(); - const FText DisplayName = FText::FromString(Asset.AssetName.ToString()); - - Builder.AddMenuEntry( - DisplayName, - FText::FromString(AssetPathString), - FSlateIcon(), - FUIAction( - FExecuteAction::CreateStatic(&CommonMapsFunctionLibrary::OpenCommonMap_Clicked, AssetPathString), - FCanExecuteAction::CreateStatic(&CommonMapsFunctionLibrary::HasNoPlayWorld), - FIsActionChecked(), - FIsActionButtonVisible::CreateStatic(&CommonMapsFunctionLibrary::HasNoPlayWorld) - ) - ); - } - return; - } - - // Otherwise, bucket by the folder name at this level - TMap> Buckets; - const FString Prefix = RootPath + TEXT("/"); - - for (const FAssetData& Asset : Assets) - { - // Only World assets - if (Asset.AssetClassPath.GetAssetName() != FName("World")) - continue; - - // "/Game/Root/Folder1/Folder2" => "Folder1/Folder2" - FString Rel = Asset.PackagePath.ToString(); - if (Rel.StartsWith(Prefix)) - { - Rel = Rel.Mid(Prefix.Len()); - } - else - { - Rel.Empty(); - } - - // Split into ["Folder1","Folder2",...] - TArray Parts; - Rel.ParseIntoArray(Parts, TEXT("/"), /*CullEmpty=*/ true); - - // Grab the segment at our current depth (0-based) - FString Key = Parts.IsValidIndex(CurrentDepth) ? Parts[CurrentDepth] : TEXT(""); - Buckets.FindOrAdd(Key).Add(Asset); - } - - // Create one submenu per bucket, capturing each subgroup by value - for (auto& Pair : Buckets) - { - const FString& FolderName = Pair.Key.IsEmpty() ? TEXT("") : Pair.Key; - TArray SubAssets = MoveTemp(Pair.Value); - int32 NextDepth = CurrentDepth + 1; - - Builder.AddSubMenu( - FText::FromString(FolderName), - FText(), // no extra tooltip - FNewMenuDelegate::CreateLambda( - [SubAssets, RootPath, MaxDepth, NextDepth](FMenuBuilder& SubMenuBuilder) - { - // recurse with copies only - CommonMapsFunctionLibrary::PopulateRecursive( - SubMenuBuilder, - SubAssets, - RootPath, - MaxDepth, - NextDepth - ); - } - ) - ); - } - } - - static TSharedRef GetCommonMapsDropdown() - { - FMenuBuilder MenuBuilder(true, nullptr); - - for (const FCommonMapCategory& MapCategory : GetDefault()->MapsCategories) - { - TAttribute SectionText; - SectionText.Set(FText::FromName(MapCategory.Name)); - MenuBuilder.BeginSection(NAME_None, SectionText); - - for (const FSoftObjectPath& Map : MapCategory.Maps) - { - if (!Map.IsValid()) - { - continue; - } - - const FText DisplayName = FText::FromString(Map.GetAssetName()); - MenuBuilder.AddMenuEntry( - DisplayName, - FText::Format(LOCTEXT("CommonPathDescription", "{0}"), FText::FromString(Map.ToString())), - FSlateIcon(), - FUIAction( - FExecuteAction::CreateStatic(&CommonMapsFunctionLibrary::OpenCommonMap_Clicked, Map.ToString()), - FCanExecuteAction::CreateStatic(&CommonMapsFunctionLibrary::HasNoPlayWorld), - FIsActionChecked(), - FIsActionButtonVisible::CreateStatic(&CommonMapsFunctionLibrary::HasNoPlayWorld) - ) - ); - } - - if (MapCategory.bAutoSearchMapsInFolder) - { - // 1) Normalize root (assume always "/Game/..."), strip trailing slash - FString RootPath = MapCategory.SearchFolder.Path.TrimStartAndEnd(); - RootPath.RemoveFromEnd("/"); - - // Gather all map assets under that path - FAssetRegistryModule& AR = FModuleManager::LoadModuleChecked("AssetRegistry"); - TArray AllAssets; - AR.Get().GetAssetsByPath(FName(*RootPath), AllAssets, /*bRecursive=*/ true); - - // Kick off the recursive submenu build at depth=0 - CommonMapsFunctionLibrary::PopulateRecursive( - MenuBuilder, - MoveTemp(AllAssets), - RootPath, - MapCategory.SubmenuDepth, - /*CurrentDepth=*/ 0 - ); - } - - MenuBuilder.EndSection(); - } - - return MenuBuilder.MakeWidget(); - } - - static bool CanShowCommonMaps() - { - return HasNoPlayWorld() && !GetDefault()->MapsCategories.IsEmpty(); - } - - static void RegisterGameEditorMenus() - { - UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar.PlayToolBar"); - FToolMenuSection& Section = Menu->AddSection("PlayGameExtensions", TAttribute(), - FToolMenuInsert("Play", EToolMenuInsertType::Default)); - - - FToolMenuEntry CommonMapEntry = FToolMenuEntry::InitComboButton( - "CommonMapOptions", - FUIAction( - FExecuteAction(), - FCanExecuteAction::CreateStatic(&CommonMapsFunctionLibrary::HasNoPlayWorld), - FIsActionChecked(), - FIsActionButtonVisible::CreateStatic(&CommonMapsFunctionLibrary::CanShowCommonMaps)), - FOnGetContent::CreateStatic(&CommonMapsFunctionLibrary::GetCommonMapsDropdown), - LOCTEXT("CommonMaps_Label", "Common Maps"), - LOCTEXT("CommonMaps_ToolTip", "Some commonly desired maps while using the editor"), - FSlateIcon(FAppStyle::GetAppStyleSetName(), "Icons.Level") - ); - CommonMapEntry.StyleNameOverride = "CalloutToolbar"; - Section.AddEntry(CommonMapEntry); - } -} - -void FCommonMapsModule::StartupModule() -{ - ExtendContextMenu(); - - if (!IsRunningGame()) - { - if (FSlateApplication::IsInitialized()) - { - UToolMenus::RegisterStartupCallback( - FSimpleMulticastDelegate::FDelegate::CreateStatic(&CommonMapsFunctionLibrary::RegisterGameEditorMenus)); - } - } - - // customization of "SearchFolder" to make "meta=(RelativePath)" work - // FPropertyEditorModule& PropEd = FModuleManager::LoadModuleChecked("PropertyEditor"); - // PropEd.RegisterCustomPropertyTypeLayout( - // "CommonMapCategory", - // FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FCommonMapCategoryCustomization::MakeInstance) - // ); -} - -void FCommonMapsModule::ExtendContextMenu() -{ - UToolMenu* WorldAssetMenu = UToolMenus::Get()->ExtendMenu("ContentBrowser.AssetContextMenu.World"); - if (!WorldAssetMenu) return; - - FToolMenuSection& Section = WorldAssetMenu->AddSection("AssetContextCommonMaps", - LOCTEXT("CommonMapsOptionsMenuHeading", "Common Maps")); - - Section.AddSubMenu(FName("Common Maps"), - LOCTEXT("AddToCommonMapsFromMenu", "Add to Common Maps"), - LOCTEXT("AddToCommonMapsFromMenuTooltip", "Add this map into Common Maps list."), - FNewMenuDelegate::CreateRaw(this, &FCommonMapsModule::CreateCategorySelectionSubmenu), - FToolUIActionChoice(), - EUserInterfaceActionType::None, - false, - FSlateIcon(FAppStyle::GetAppStyleSetName(), "Icons.Star")); -} - -void FCommonMapsModule::AddToCommonMapsFromMenu(FName CategoryName) -{ - TArray SelectedAssets; - AssetSelectionUtils::GetSelectedAssets(SelectedAssets); - if (auto* Settings = GetMutableDefault()) - { - for (const auto& AssetData : SelectedAssets) - { - if (FCommonMapCategory* CurrentCategory = Settings->MapsCategories.FindByKey(CategoryName)) - { - CurrentCategory->Maps.Add({ AssetData.GetSoftObjectPath() }); - } - else - { - Settings->MapsCategories.Add(FCommonMapCategory(CategoryName, { AssetData.GetSoftObjectPath() })); - } - } - - Settings->SaveConfig(CPF_Config); - FMessageDialog::Open(EAppMsgType::Ok, FText::FromString("All maps added to Common Maps!")); - } -} - -void FCommonMapsModule::CreateCategorySelectionSubmenu(FMenuBuilder& MenuBuilder) -{ - const UCommonMapsDeveloperSettings* DevSettings = GetDefault(); - if (!DevSettings) return; - - for (const FCommonMapCategory& Category : DevSettings->MapsCategories) - { - MenuBuilder.AddMenuEntry( - FText::Format(LOCTEXT("CategoryLabel", "{0}"), FText::FromName(Category.Name)), - FText::Format(LOCTEXT("CategoryTooltip", "Add this map to \"{0}\" category."), FText::FromName(Category.Name)), - FSlateIcon(), FUIAction(FExecuteAction::CreateRaw(this, &FCommonMapsModule::AddToCommonMapsFromMenu, Category.Name))); - } -} - - -void FCommonMapsModule::ShutdownModule() -{ - UToolMenus::UnRegisterStartupCallback(this); -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FCommonMapsModule, CommonMaps) diff --git a/Source/CommonMaps/Private/CommonMapsDeveloperSettings.cpp b/Source/CommonMaps/Private/CommonMapsDeveloperSettings.cpp deleted file mode 100644 index 6fc623a0..00000000 --- a/Source/CommonMaps/Private/CommonMapsDeveloperSettings.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "CommonMapsDeveloperSettings.h" - diff --git a/Source/CommonMaps/Public/CommonMaps.h b/Source/CommonMaps/Public/CommonMaps.h deleted file mode 100644 index 04001dbd..00000000 --- a/Source/CommonMaps/Public/CommonMaps.h +++ /dev/null @@ -1,19 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Modules/ModuleManager.h" - -class FCommonMapsModule : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; - -private: - void ExtendContextMenu(); - void AddToCommonMapsFromMenu(FName CategoryName); - void CreateCategorySelectionSubmenu(FMenuBuilder& MenuBuilder); -}; diff --git a/Source/CommonMaps/Public/CommonMapsDeveloperSettings.h b/Source/CommonMaps/Public/CommonMapsDeveloperSettings.h deleted file mode 100644 index ad6e8586..00000000 --- a/Source/CommonMaps/Public/CommonMapsDeveloperSettings.h +++ /dev/null @@ -1,58 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "CommonMapsDeveloperSettings.generated.h" - -USTRUCT(BlueprintType) -struct FCommonMapCategory -{ - GENERATED_BODY() - -public: - FCommonMapCategory() = default; - explicit FCommonMapCategory(FName CategoryName_In, const TArray& InPaths) - : Name(CategoryName_In), Maps({ InPaths }) {}; - - UPROPERTY(EditAnywhere, Category="CommonMapCategory") - FName Name = ""; - - UPROPERTY(EditAnywhere, Category="CommonMapCategory") - bool bAutoSearchMapsInFolder = false; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CommonMapCategory", meta=(ContentDir, EditCondition="bAutoSearchMapsInFolder", EditConditionHides)) - FDirectoryPath SearchFolder; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CommonMapCategory", meta=(EditCondition="bAutoSearchMapsInFolder", EditConditionHides)) - int32 SubmenuDepth = 1; - - UPROPERTY(EditAnywhere, Category="CommonMapCategory", meta=(AllowedClasses="/Script/Engine.World", TitleProperty="Name")) - TArray Maps = {}; - - bool operator==(const FCommonMapCategory& Other) const - { - return Name == Other.Name; - } - bool operator==(const FName& Other) const - { - return Name == Other; - } -}; - -/** - * TODO: add rescan folders button - */ -UCLASS(config="Game", DefaultConfig, DisplayName="Common Maps") -class COMMONMAPS_API UCommonMapsDeveloperSettings : public UDeveloperSettings -{ - GENERATED_BODY() - -public: - virtual FName GetCategoryName() const override { return FName("Plugins"); } - -#if WITH_EDITORONLY_DATA - UPROPERTY(Config,EditAnywhere, Category="Common Maps", meta=(ForceInlineRow)) - TArray MapsCategories; -#endif -}; diff --git a/Source/UHLAI/Private/Components/UHLAIPerceptionComponent.cpp b/Source/UHLAI/Private/Components/UHLAIPerceptionComponent.cpp deleted file mode 100644 index 52cf949a..00000000 --- a/Source/UHLAI/Private/Components/UHLAIPerceptionComponent.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Components/UHLAIPerceptionComponent.h" - -#include "Perception/AISense_Sight.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLAIPerceptionComponent) - -void UUHLAIPerceptionComponent::HandleExpiredStimulus(FAIStimulus& StimulusStore) -{ - Super::HandleExpiredStimulus(StimulusStore); - - TSubclassOf StimulusClass = UAIPerceptionSystem::GetSenseClassForStimulus(GetWorld(), StimulusStore); - if (StimulusClass == UAISense_Sight::StaticClass()) - { - if (OnSightStimulusExpired.IsBound()) - { - OnSightStimulusExpired.Broadcast(StimulusStore); - } - } -} diff --git a/Source/UHLAI/Private/Composite/BTC_RandomSelector.cpp b/Source/UHLAI/Private/Composite/BTC_RandomSelector.cpp deleted file mode 100644 index d818acda..00000000 --- a/Source/UHLAI/Private/Composite/BTC_RandomSelector.cpp +++ /dev/null @@ -1,160 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Composite/BTC_RandomSelector.h" - -#include "BehaviorTree/BTTaskNode.h" -#include "BehaviorTree/BTCompositeNode.h" -#include "BehaviorTree/BehaviorTreeComponent.h" -#include "BehaviorTree/BlackboardComponent.h" -#include "Misc/EngineVersionComparison.h" -#include "GameFramework/Actor.h" -#include "VisualLogger/VisualLogger.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BehaviorTree/BTAuxiliaryNode.h" -#include "Kismet/KismetMathLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTC_RandomSelector) - -UBTC_RandomSelector::UBTC_RandomSelector(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "RandomSelector"; -} - -void UBTC_RandomSelector::RemoveUnusedChances() -{ - if (ChancesArray.Num() > GetChildrenNum()) - { - int32 CountToRemove = ChancesArray.Num() - GetChildrenNum(); - ChancesArray.RemoveAt(ChancesArray.Num() - CountToRemove, CountToRemove); - } -} - -int32 UBTC_RandomSelector::GetNextChildHandler(FBehaviorTreeSearchData& SearchData, int32 PrevChild, EBTNodeResult::Type LastResult) const -{ - // success = quit - int32 NextChildIdx = BTSpecialChild::ReturnToParent; - - if (PrevChild == BTSpecialChild::NotInitialized) - { - // newly activated: start from first - NextChildIdx = GetRandomChildIdx(); - } - else if (LastResult == EBTNodeResult::Failed && (PrevChild + 1) < GetChildrenNum()) - { - // failed = choose next child - NextChildIdx = GetRandomChildIdx(); - } - - return NextChildIdx; -} - -FString UBTC_RandomSelector::GetStaticDescription() const -{ - // Chances Array - FString Result = ""; - - float ChancesSum = 0.0f; - FString ChancesString = ""; - for (int32 i = 0; i < Children.Num(); i++) - { - FBTCompositeChild ChildNode = Children[i]; - - FString Name = ""; - if (ChildNode.ChildComposite) - { - Name = ChildNode.ChildComposite->NodeName; - } - else if (ChildNode.ChildTask) - { - Name = ChildNode.ChildTask->NodeName; - } - if (!ChancesArray.IsValidIndex(i)) continue; - - float CurrentChance = ChancesArray[i]; - ChancesSum += CurrentChance; - Result += FString::Printf(TEXT("- %s: %.2f \n"), *Name, CurrentChance); - } - - FString SumWarning = ChancesSum != 1.0f ? FString(TEXT("⚠️")) : FString(); - Result = FString::Printf(TEXT("%s \n\nSum: %.2f %s \nChances: \n%s"), *Super::GetStaticDescription(), ChancesSum, *SumWarning, *Result); - Result += GetErrorOrWarning(); - - return Result; -} - -#if WITH_EDITOR -FName UBTC_RandomSelector::GetNodeIconName() const -{ - return IsValidSelector() ? FName("BTEditor.Graph.BTNode.Composite.Selector.Icon") : FName("Graph.ConnectorFeedback.Error"); -} -#endif - -#if UE_VERSION_NEWER_THAN(5, 4, 0) -void UBTC_RandomSelector::InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, - EBTMemoryInit::Type InitType) const -{ - InitializeNodeMemory(NodeMemory, InitType); -} - -void UBTC_RandomSelector::CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, - EBTMemoryClear::Type CleanupType) const -{ - CleanupNodeMemory(NodeMemory, CleanupType); -} -#endif - -FString UBTC_RandomSelector::GetErrorOrWarning() const -{ - if (!IsValidSelector()) - { - if (GetChildrenNum() > ChancesArray.Num()) - { - return FString::Printf(TEXT("\n ❌ERROR❌ \nAdd chances for rest child nodes")); - } - // if RandomSelector have only one child, unreal somehow can crash randomly in different places Anims/AI/random components - if (Children.Num() <= 1) - { - return FString::Printf(TEXT("\n ❌ERROR❌ \nUse with at least two childs, one child can lead to random crash in child nodes")); - } - } - - if (GetChildrenNum() < ChancesArray.Num()) - { - return FString::Printf(TEXT("\n ⚠️WARNING⚠️ \nNot all chances have their child nodes")); - } - - return FString(); -} - -int32 UBTC_RandomSelector::GetRandomChildIdx() const -{ - int32 ResultIdx = BTSpecialChild::ReturnToParent; - - TArray ChancesRanges = {}; - - float SumChances = 0.0f; - for (int32 i = 0; i < GetChildrenNum(); i++) - { - float MinValue = SumChances; - - float Chance = ChancesArray.IsValidIndex(i) ? ChancesArray[i] : 999999.0f; - SumChances += Chance; - - FFloatRange ChanceRange = FFloatRange(MinValue, SumChances); - ChancesRanges.Add(ChanceRange); - } - - float RandomFloat = UKismetMathLibrary::RandomFloatInRange(0.0f, SumChances); - - for (FFloatRange ChanceRange : ChancesRanges) - { - if (ChanceRange.Contains(RandomFloat)) - { - ResultIdx = ChancesRanges.IndexOfByKey(ChanceRange); - } - } - - return ResultIdx; -} diff --git a/Source/UHLAI/Private/Core/UHLAIActorSettings.cpp b/Source/UHLAI/Private/Core/UHLAIActorSettings.cpp deleted file mode 100644 index d010faf3..00000000 --- a/Source/UHLAI/Private/Core/UHLAIActorSettings.cpp +++ /dev/null @@ -1,7 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Core/UHLAIActorSettings.h" - -// Add default functionality here for any IUHLActorSettings functions that are not pure virtual. -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLAIActorSettings) \ No newline at end of file diff --git a/Source/UHLAI/Private/Core/UHLAIDebugSettings.cpp b/Source/UHLAI/Private/Core/UHLAIDebugSettings.cpp deleted file mode 100644 index 33285cac..00000000 --- a/Source/UHLAI/Private/Core/UHLAIDebugSettings.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "Core/UHLAIDebugSettings.h" - diff --git a/Source/UHLAI/Private/Core/UHLBlackboardValueType.cpp b/Source/UHLAI/Private/Core/UHLBlackboardValueType.cpp deleted file mode 100644 index bcf93eea..00000000 --- a/Source/UHLAI/Private/Core/UHLBlackboardValueType.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Core/UHLBlackboardValueType.h" \ No newline at end of file diff --git a/Source/UHLAI/Private/Core/UHLMathOperations.cpp b/Source/UHLAI/Private/Core/UHLMathOperations.cpp deleted file mode 100644 index 3453f3d7..00000000 --- a/Source/UHLAI/Private/Core/UHLMathOperations.cpp +++ /dev/null @@ -1,211 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "Core/UHLMathOperations.h" - -#include "BehaviorTree/BehaviorTreeComponent.h" -#include "BehaviorTree/BlackboardComponent.h" - - -void FOperationOnBBValue::SetCurrentBBKeyValueType(EBlackboardValueType CurrentBBKeyValueType_In) -{ - CurrentBBKeyValueType = CurrentBBKeyValueType_In; -} - -int32 FOperationOnBBValue::CalculateIntResult(UBehaviorTreeComponent& OwnerComp, int32 CurrentValue) const -{ - int32 Result = CurrentValue; - - UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - if (!BlackboardComponent) return Result; - - if (MathOperation == EUHL_MathOperations::Set) - { - Result = IntValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Add) - { - Result = CurrentValue + IntValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Multiply) - { - Result = CurrentValue * IntValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Divide) - { - Result = CurrentValue / IntValue.GetValue(OwnerComp); - } - - return Result; -} - -float FOperationOnBBValue::CalculateFloatResult( - UBehaviorTreeComponent& OwnerComp, float CurrentValue) const -{ - float Result = CurrentValue; - - UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - if (!BlackboardComponent) return Result; - - if (MathOperation == EUHL_MathOperations::Set) - { - Result = FloatValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Add) - { - Result = CurrentValue + FloatValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Multiply) - { - Result = CurrentValue * FloatValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Divide) - { - Result = CurrentValue / FloatValue.GetValue(OwnerComp); - } - - return Result; -} - -FVector FOperationOnBBValue::CalculateVectorResult( - UBehaviorTreeComponent& OwnerComp, FVector CurrentValue) const -{ - FVector Result = CurrentValue; - - UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - if (!BlackboardComponent) return Result; - - if (MathOperation == EUHL_MathOperations::Set) - { - Result = VectorValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Add) - { - Result = CurrentValue + VectorValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Multiply) - { - Result = CurrentValue * VectorValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Divide) - { - Result = CurrentValue / VectorValue.GetValue(OwnerComp); - } - - return Result; -} - -FRotator FOperationOnBBValue::CalculateRotatorResult( - UBehaviorTreeComponent& OwnerComp, FRotator CurrentValue) const -{ - FRotator Result = CurrentValue; - - UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - if (!BlackboardComponent) return Result; - - if (MathOperation == EUHL_MathOperations::Set) - { - Result = RotatorValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Add) - { - Result = CurrentValue + RotatorValue.GetValue(OwnerComp); - } - else if (MathOperation == EUHL_MathOperations::Multiply) - { - Result = (CurrentValue.Euler() * RotatorValue.GetValue(OwnerComp).Euler()).ToOrientationRotator(); - } - else if (MathOperation == EUHL_MathOperations::Divide) - { - Result = (CurrentValue.Euler() / RotatorValue.GetValue(OwnerComp).Euler()).ToOrientationRotator(); - } - - return Result; -} - -FString FOperationOnBBValue::ToStringIntValue(FString KeyName) const -{ - FString Result = ""; - if (MathOperation == EUHL_MathOperations::Set) - { - Result = FString::Printf(TEXT("Set \"%s\" to %s"), *KeyName, *IntValue.ToString()); - } - else if (MathOperation == EUHL_MathOperations::Add) - { - Result = FString::Printf(TEXT("Add \"%s\" to %s"), *IntValue.ToString(), *KeyName); - } - else if (MathOperation == EUHL_MathOperations::Multiply) - { - Result = FString::Printf(TEXT("Multiply \"%s\" by %s"), *KeyName, *IntValue.ToString()); - } - else if (MathOperation == EUHL_MathOperations::Divide) - { - Result = FString::Printf(TEXT("Divide \"%s\" by %s"), *KeyName, *IntValue.ToString()); - } - return Result; -} - -FString FOperationOnBBValue::ToStringFloatValue(FString KeyName) const -{ - FString Result = ""; - if (MathOperation == EUHL_MathOperations::Set) - { - Result = FString::Printf(TEXT("Set \"%s\" to %sf"), *KeyName, *FloatValue.ToString()); - } - else if (MathOperation == EUHL_MathOperations::Add) - { - Result = FString::Printf(TEXT("Add \"%s\" to %s"), *FloatValue.ToString(), *KeyName); - } - else if (MathOperation == EUHL_MathOperations::Multiply) - { - Result = FString::Printf(TEXT("Multiply \"%s\" by %sf"), *KeyName, *FloatValue.ToString()); - } - else if (MathOperation == EUHL_MathOperations::Divide) - { - Result = FString::Printf(TEXT("Divide \"%s\" by %sf"), *KeyName, *FloatValue.ToString()); - } - return Result; -} - -FString FOperationOnBBValue::ToStringVectorValue(FString KeyName) const -{ - FString Result = ""; - if (MathOperation == EUHL_MathOperations::Set) - { - Result = FString::Printf(TEXT("Set \"%s\" to %sf"), *KeyName, *VectorValue.ToString()); - } - else if (MathOperation == EUHL_MathOperations::Add) - { - Result = FString::Printf(TEXT("Add \"%s\" to %s"), *VectorValue.ToString(), *KeyName); - } - else if (MathOperation == EUHL_MathOperations::Multiply) - { - Result = FString::Printf(TEXT("Multiply \"%s\" by %sf"), *KeyName, *VectorValue.ToString()); - } - else if (MathOperation == EUHL_MathOperations::Divide) - { - Result = FString::Printf(TEXT("Divide \"%s\" by %sf"), *KeyName, *VectorValue.ToString()); - } - return Result; -} - -FString FOperationOnBBValue::ToStringRotatorValue(FString KeyName) const -{ - FString Result = ""; - if (MathOperation == EUHL_MathOperations::Set) - { - Result = FString::Printf(TEXT("Set \"%s\" to %sf"), *KeyName, *RotatorValue.ToString()); - } - else if (MathOperation == EUHL_MathOperations::Add) - { - Result = FString::Printf(TEXT("Add \"%s\" to %s"), *RotatorValue.ToString(), *KeyName); - } - else if (MathOperation == EUHL_MathOperations::Multiply) - { - Result = FString::Printf(TEXT("Multiply \"%s\" by %sf"), *KeyName, *RotatorValue.ToString()); - } - else if (MathOperation == EUHL_MathOperations::Divide) - { - Result = FString::Printf(TEXT("Divide \"%s\" by %sf"), *KeyName, *RotatorValue.ToString()); - } - return Result; -} diff --git a/Source/UHLAI/Private/Data/TurnSettings.cpp b/Source/UHLAI/Private/Data/TurnSettings.cpp deleted file mode 100644 index 9358100b..00000000 --- a/Source/UHLAI/Private/Data/TurnSettings.cpp +++ /dev/null @@ -1,230 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Data/TurnSettings.h" -#include "Animation/AnimMontage.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(TurnSettings) - -void FTurnSettings::Cleanup() -{ - TurnRangesGroups.Empty(); -} - -void FTurnSettings::SetupPreset_Default_90_180() -{ - bTurnOnlyWithAnims = false; - bStopMontageOnGoalReached = true; - // order is important because ranges might overlap - TurnRangesGroups = { - { - "180deg", - { - { - { "Turn 180 L", FFloatRange(-225, -115) }, - { "Turn 180 R", FFloatRange(115, 225) }, - } - } - }, - { - "90deg", - { - { - { "Turn 90 L", FFloatRange(-115, -45) }, - { "Turn 90 R", FFloatRange(45, 115) }, - } - } - }, - }; -} - -void FTurnSettings::SetupPreset_BigEnemy_90_180() -{ - bTurnOnlyWithAnims = true; - bStopMontageOnGoalReached = true; - // order is important because ranges might overlap - TurnRangesGroups = { - { - "180deg", - { - { - { "Turn 180 L", FFloatRange(-225, -135) }, - { "Turn 180 R", FFloatRange(135, 225) }, - } - } - }, - { - "90deg", - { - { - { "Turn 90 L", FFloatRange(-135, -45) }, - { "Turn 90 R", FFloatRange(45, 135) }, - } - } - }, - }; -} - -void FTurnSettings::SetupPreset_45_90_180() -{ - bTurnOnlyWithAnims = true; - bStopMontageOnGoalReached = true; - // order is important because ranges might overlap - TurnRangesGroups = { - { - "180deg", - { - { - { "Turn 180 L", FFloatRange(-225, -135) }, - { "Turn 180 R", FFloatRange(135, 225) }, - } - } - }, - { - "90deg", - { - { - { "Turn 90 L", FFloatRange(-135, -67.5) }, - { "Turn 90 R", FFloatRange(67.5, 135) }, - } - } - }, - { - "45deg", - { - { - { "Turn 45 L", FFloatRange(-67.5, -22.5) }, - { "Turn 45 R", FFloatRange(22.5, 67.5) }, - } - } - }, - }; -} - -void FTurnSettings::SetupPreset_15_45_90_180() -{ - bTurnOnlyWithAnims = true; - bStopMontageOnGoalReached = true; - // order is important because ranges might overlap - TurnRangesGroups = { - { - "180deg", - { - { - { "Turn 180 L", FFloatRange(-225, -135) }, - { "Turn 180 R", FFloatRange(135, 225) }, - } - } - }, - { - "90deg", - { - { - { "Turn 90 L", FFloatRange(-135, -67.5) }, - { "Turn 90 R", FFloatRange(67.5, 135) }, - } - } - }, - { - "45deg", - { - { - { "Turn 45 L", FFloatRange(-67.5, -30) }, - { "Turn 45 R", FFloatRange(30, 67.5) }, - } - } - }, - { - "15deg", - { - { - { "Turn 15 L", FFloatRange(-30, -7.5) }, - { "Turn 15 R", FFloatRange(7.5, 30) }, - } - } - }, - }; -} - -void FTurnSettings::SetupPreset_15_30_45_90_180() -{ - bTurnOnlyWithAnims = true; - bStopMontageOnGoalReached = true; - TurnRangesGroups = { - { - "180deg", - { - { - { "Turn 180 L", FFloatRange(-225, -135) }, - { "Turn 180 R", FFloatRange(135, 225) }, - } - } - }, - { - "90deg", - { - { - { "Turn 90 L", FFloatRange(-135, -67.5) }, - { "Turn 90 R", FFloatRange(67.5, 135) }, - } - } - }, - { - "45deg", - { - { - { "Turn 45 L", FFloatRange(-67.5, -30) }, - { "Turn 45 R", FFloatRange(30, 67.5) }, - } - } - }, - { - "30deg", - { - { - { "Turn 30 L", FFloatRange(-37.5, -22.5) }, - { "Turn 30 R", FFloatRange(22.5, 37.5) }, - } - } - }, - { - "15deg", - { - { - { "Turn 15 L", FFloatRange(-22.5, -7.5) }, - { "Turn 15 R", FFloatRange(7.5, 22.5) }, - } - } - }, - }; -} - -void UTurnSettingsDataAsset::Cleanup() -{ - TurnSettings.Cleanup(); -} - -void UTurnSettingsDataAsset::SetupPreset_Default_90_180() -{ - TurnSettings.SetupPreset_Default_90_180(); -} - -void UTurnSettingsDataAsset::SetupPreset_BigEnemy_90_180() -{ - TurnSettings.SetupPreset_BigEnemy_90_180(); -} - -void UTurnSettingsDataAsset::SetupPreset_45_90_180() -{ - TurnSettings.SetupPreset_45_90_180(); -} - -void UTurnSettingsDataAsset::SetupPreset_15_45_90_180() -{ - TurnSettings.SetupPreset_15_45_90_180(); -} - -void UTurnSettingsDataAsset::SetupPreset_15_30_45_90_180() -{ - TurnSettings.SetupPreset_15_30_45_90_180(); -} diff --git a/Source/UHLAI/Private/Decorators/BTD_Base.cpp b/Source/UHLAI/Private/Decorators/BTD_Base.cpp deleted file mode 100644 index d24c6749..00000000 --- a/Source/UHLAI/Private/Decorators/BTD_Base.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Decorators/BTD_Base.h" - -#include "BlueprintNodeHelpers.h" -#include "BehaviorTree/BlackboardComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTD_Base) - -UBTD_Base::UBTD_Base(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - bIsObservingBB = false; -} - -void UBTD_Base::InitializeProperties() -{ - if (HasAnyFlags(RF_ClassDefaultObject)) - { - UClass* StopAtClass = UBTD_Base::StaticClass(); - BlueprintNodeHelpers::CollectPropertyData(this, StopAtClass, PropertyData); - - bIsObservingBB = BlueprintNodeHelpers::HasAnyBlackboardSelectors(this, StopAtClass); - } - else - { - // Make sure if the users started to observe a BB key after we instantiated this node, that this value get propagated correctly - bIsObservingBB = GetClass()->GetDefaultObject()->bIsObservingBB; - } -} - -void UBTD_Base::PostInitProperties() -{ - Super::PostInitProperties(); - - InitializeProperties(); -} - -FString UBTD_Base::GetPropertiesDetails() const -{ - FString ReturnDesc = ""; - UBTD_Base* CDO = (UBTD_Base*)(GetClass()->GetDefaultObject()); - if (bShowPropertyDetails && CDO) - { - UClass* StopAtClass = UBTD_Base::StaticClass(); - FString PropertyDesc = BlueprintNodeHelpers::CollectPropertyDescription(this, StopAtClass, CDO->PropertyData); - if (PropertyDesc.Len()) - { - ReturnDesc += TEXT(":\n\n"); - ReturnDesc += PropertyDesc; - } - } - return ReturnDesc; -} - -void UBTD_Base::RequestAbort(UBehaviorTreeComponent& OwnerComp, const EAbortType Type) -{ - switch (Type) - { - case EAbortType::NoAbort: - // Nothing to abort, continue - break; - case EAbortType::ActivateBranch: - OwnerComp.RequestBranchActivation(*this, false); - break; - case EAbortType::DeactivateBranch: - OwnerComp.RequestBranchDeactivation(*this); - break; - case EAbortType::Unknown: - checkf(false, TEXT("If decorator is active, it must know whether it needs to abort or not")) - break; - } -} - -EBlackboardNotificationResult UBTD_Base::OnBlackboardKeyValueChange(const UBlackboardComponent& Blackboard, - FBlackboard::FKey ChangedKeyID) -{ - UBehaviorTreeComponent* BehaviorComp = Cast(Blackboard.GetBrainComponent()); - if (BehaviorComp) - { - const EAbortType Type = EvaluateAbortType(*BehaviorComp); - if (Type != EAbortType::Unknown) - { - RequestAbort(*BehaviorComp, Type); - } - } - return BehaviorComp ? EBlackboardNotificationResult::ContinueObserving : EBlackboardNotificationResult::RemoveObserver; -} - -void UBTD_Base::PostLoad() -{ - Super::PostLoad(); - - if (GetFlowAbortMode() != EBTFlowAbortMode::None && bIsObservingBB) - { - ObservedKeyNames.Reset(); - UClass* StopAtClass = UBTD_Base::StaticClass(); - BlueprintNodeHelpers::CollectBlackboardSelectors(this, StopAtClass, ObservedKeyNames); - ensure(ObservedKeyNames.Num() > 0); - } -} - -void UBTD_Base::OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - UBlackboardComponent* BlackboardComp = OwnerComp.GetBlackboardComponent(); - if (BlackboardComp) - { - for (int32 NameIndex = 0; NameIndex < ObservedKeyNames.Num(); NameIndex++) - { - const FBlackboard::FKey KeyID = BlackboardComp->GetKeyID(ObservedKeyNames[NameIndex]); - if (KeyID != FBlackboard::InvalidKey) - { - BlackboardComp->RegisterObserver(KeyID, this, FOnBlackboardChangeNotification::CreateUObject(this, &UBTD_Base::OnBlackboardKeyValueChange)); - } - } - } -} - -UBTD_Base::EAbortType UBTD_Base::EvaluateAbortType(UBehaviorTreeComponent& OwnerComp) const -{ - // if (PerformConditionCheckImplementations == 0) - // { - // return EAbortType::Unknown; - // } - - if (FlowAbortMode == EBTFlowAbortMode::None) - { - return EAbortType::NoAbort; - } - - const bool bIsOnActiveBranch = OwnerComp.IsExecutingBranch(GetMyNode(), GetChildIndex()); - - EAbortType AbortType = EAbortType::NoAbort; - if (bIsOnActiveBranch) - { - if ((FlowAbortMode == EBTFlowAbortMode::Self || FlowAbortMode == EBTFlowAbortMode::Both) && CalculateRawConditionValue(OwnerComp, /*NodeMemory*/nullptr) == IsInversed()) - { - AbortType = EAbortType::DeactivateBranch; - } - } - else - { - if ((FlowAbortMode == EBTFlowAbortMode::LowerPriority || FlowAbortMode == EBTFlowAbortMode::Both) && CalculateRawConditionValue(OwnerComp, /*NodeMemory*/nullptr) != IsInversed()) - { - AbortType = EAbortType::ActivateBranch; - } - } - - return AbortType; -} diff --git a/Source/UHLAI/Private/Decorators/BTD_CheckGASGameplayTagsOnActor.cpp b/Source/UHLAI/Private/Decorators/BTD_CheckGASGameplayTagsOnActor.cpp deleted file mode 100644 index d507fe0d..00000000 --- a/Source/UHLAI/Private/Decorators/BTD_CheckGASGameplayTagsOnActor.cpp +++ /dev/null @@ -1,120 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Decorators/BTD_CheckGASGameplayTagsOnActor.h" - -#include "AbilitySystemComponent.h" -#include "AbilitySystemInterface.h" -#include "BehaviorTree/BlackboardComponent.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Object.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTD_CheckGASGameplayTagsOnActor) - -UBTD_CheckGASGameplayTagsOnActor::UBTD_CheckGASGameplayTagsOnActor(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "GAS Gameplay Tag Condition"; - INIT_DECORATOR_NODE_NOTIFY_FLAGS(); - - // Accept only actors - ActorToCheck.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTD_CheckGASGameplayTagsOnActor, ActorToCheck), AActor::StaticClass()); - - // Default to using Self Actor - ActorToCheck.SelectedKeyName = FBlackboard::KeySelf; - - bAllowAbortNone = true; - bAllowAbortLowerPri = true; - bAllowAbortChildNodes = true; -} - -bool UBTD_CheckGASGameplayTagsOnActor::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const -{ - const UBlackboardComponent* BlackboardComp = OwnerComp.GetBlackboardComponent(); - if (BlackboardComp == nullptr) - { - return false; - } - - IAbilitySystemInterface* AbilitySystemInterface = Cast(BlackboardComp->GetValue(ActorToCheck.GetSelectedKeyID())); - if (AbilitySystemInterface == nullptr) - { - return false; - } - UAbilitySystemComponent* ASC = AbilitySystemInterface->GetAbilitySystemComponent(); - if (!IsValid(ASC)) return false; - - switch (TagsToMatch) - { - case EGameplayContainerMatchType::All: - return ASC->HasAllMatchingGameplayTags(GameplayTags); - - case EGameplayContainerMatchType::Any: - return ASC->HasAnyMatchingGameplayTags(GameplayTags); - - default: - { - UE_LOG(LogBehaviorTree, Warning, TEXT("Invalid value for TagsToMatch (EGameplayContainerMatchType) %d. Should only be Any or All."), static_cast(TagsToMatch)); - return false; - } - } -} - -void UBTD_CheckGASGameplayTagsOnActor::DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const -{ - Super::DescribeRuntimeValues(OwnerComp, NodeMemory, Verbosity, Values); -} - -FString UBTD_CheckGASGameplayTagsOnActor::GetStaticDescription() const -{ - return FString::Printf(TEXT("%s: %s"), *Super::GetStaticDescription(), *CachedDescription); -} - -#if WITH_EDITOR -void UBTD_CheckGASGameplayTagsOnActor::BuildDescription() -{ - CachedDescription = TEXT("\n") + GameplayTags.ToMatchingText(TagsToMatch, IsInversed()).ToString() - .Replace(TEXT("),"), TEXT("\n - ")) - // .Replace(TEXT(": "), TEXT("")) - .Replace(TEXT("=("), TEXT("\n - ")) - .Replace(TEXT("(GameplayTags"), TEXT("")) - .Replace(TEXT("(TagName="), TEXT("")) - .Replace(TEXT(")))"), TEXT("")) - .Replace(TEXT("\""), TEXT("")) - .Replace(TEXT("=)"), TEXT("")); - // CachedDescription = FString::Printf(TEXT(" %s"), *GameplayTags.ToStringSimple(true)); -} - -void UBTD_CheckGASGameplayTagsOnActor::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - if (PropertyChangedEvent.Property == NULL) - { - return; - } - - BuildDescription(); -} -#endif - -void UBTD_CheckGASGameplayTagsOnActor::InitializeFromAsset(UBehaviorTree& Asset) -{ - Super::InitializeFromAsset(Asset); - - UBlackboardData* BBAsset = GetBlackboardAsset(); - if (ensure(BBAsset)) - { - ActorToCheck.ResolveSelectedKey(*BBAsset); - } - -#if WITH_EDITOR - BuildDescription(); -#endif // WITH_EDITOR -} - -void UBTD_CheckGASGameplayTagsOnActor::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) -{ - Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds); - - RequestAbort(OwnerComp, EvaluateAbortType(OwnerComp)); -} - diff --git a/Source/UHLAI/Private/Decorators/BTD_GameplayEffectCooldown.cpp b/Source/UHLAI/Private/Decorators/BTD_GameplayEffectCooldown.cpp deleted file mode 100644 index 17ce6e40..00000000 --- a/Source/UHLAI/Private/Decorators/BTD_GameplayEffectCooldown.cpp +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (c) 2024 NextGenium - - -#include "Decorators/BTD_GameplayEffectCooldown.h" - -#include "Engine/World.h" -#include "AIController.h" -#include "AbilitySystemBlueprintLibrary.h" -#include "AbilitySystemComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTD_GameplayEffectCooldown) - -UBTD_GameplayEffectCooldown::UBTD_GameplayEffectCooldown(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "GameplayEffect Cooldown"; - INIT_DECORATOR_NODE_NOTIFY_FLAGS(); - - // aborting child nodes doesn't makes sense, cooldown starts after leaving this branch - bAllowAbortChildNodes = false; -} - -bool UBTD_GameplayEffectCooldown::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const -{ - // FBTGameplayEffectCooldownDecoratorMemory* DecoratorMemory = CastInstanceNodeMemory(NodeMemory); - // const double RecalcTime = (OwnerComp.GetWorld()->GetTimeSeconds() - CoolDownTime.GetValue(OwnerComp)); - // return RecalcTime >= DecoratorMemory->LastUseTimestamp; - - AAIController* OwnerController = OwnerComp.GetAIOwner(); - AActor* OwnerActor = OwnerController ? OwnerController->GetPawn() : nullptr; - if (!OwnerActor) return true; - - UAbilitySystemComponent* ASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(OwnerActor); - if (!ASC) return true; - - FGameplayEffectQuery const ActiveGameplayEffectsQuery = FGameplayEffectQuery::MakeQuery_MatchAnyOwningTags(FGameplayTagContainer(CooldownGameplayEffectTag)); - TArray EffectsTimeRemaining = ASC->GetActiveEffectsTimeRemaining(ActiveGameplayEffectsQuery); - if (EffectsTimeRemaining.Num() > 0) - { - return EffectsTimeRemaining[0] > 0.0f ? false : true; - } - return true; -} - -void UBTD_GameplayEffectCooldown::OnNodeDeactivation(FBehaviorTreeSearchData& SearchData, EBTNodeResult::Type NodeResult) -{ - FBTGameplayEffectCooldownDecoratorMemory* DecoratorMemory = GetNodeMemory(SearchData); - DecoratorMemory->LastUseTimestamp = SearchData.OwnerComp.GetWorld()->GetTimeSeconds(); - DecoratorMemory->bRequestedRestart = false; -} - -void UBTD_GameplayEffectCooldown::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) -{ - // FBTGameplayEffectCooldownDecoratorMemory* DecoratorMemory = CastInstanceNodeMemory(NodeMemory); - // if (!DecoratorMemory->bRequestedRestart) - // { - // const double RecalcTime = (OwnerComp.GetWorld()->GetTimeSeconds() - CoolDownTime.GetValue(OwnerComp)); - // if (RecalcTime >= DecoratorMemory->LastUseTimestamp) - // { - // DecoratorMemory->bRequestedRestart = true; - // OwnerComp.RequestExecution(this); - // } - // } -} - -FString UBTD_GameplayEffectCooldown::GetStaticDescription() const -{ - return ""; - // // basic info: result after time - // return FString::Printf(TEXT("%s: lock for %s s after execution and return %s"), *Super::GetStaticDescription(), - // *CoolDownTime.ToString(), *UBehaviorTreeTypes::DescribeNodeResult(EBTNodeResult::Failed)); -} - -void UBTD_GameplayEffectCooldown::DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const -{ - Super::DescribeRuntimeValues(OwnerComp, NodeMemory, Verbosity, Values); - - // FBTGameplayEffectCooldownDecoratorMemory* DecoratorMemory = CastInstanceNodeMemory(NodeMemory); - // const double TimePassed = OwnerComp.GetWorld()->GetTimeSeconds() - DecoratorMemory->LastUseTimestamp; - // - // if (TimePassed < CoolDownTime.GetValue(OwnerComp)) - // { - // Values.Add(FString::Printf(TEXT("%s in %ss"), - // (FlowAbortMode == EBTFlowAbortMode::None) ? TEXT("unlock") : TEXT("restart"), - // *FString::SanitizeFloat(CoolDownTime.GetValue(OwnerComp) - TimePassed))); - // } -} - -uint16 UBTD_GameplayEffectCooldown::GetInstanceMemorySize() const -{ - return sizeof(FBTGameplayEffectCooldownDecoratorMemory); -} - -void UBTD_GameplayEffectCooldown::InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const -{ - FBTGameplayEffectCooldownDecoratorMemory* DecoratorMemory = InitializeNodeMemory(NodeMemory, InitType); - if (InitType == EBTMemoryInit::Initialize) - { - DecoratorMemory->LastUseTimestamp = TNumericLimits::Lowest(); - } - - DecoratorMemory->bRequestedRestart = false; ; -} - -void UBTD_GameplayEffectCooldown::CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const -{ - CleanupNodeMemory(NodeMemory, CleanupType); -} - -#if WITH_EDITOR - -FName UBTD_GameplayEffectCooldown::GetNodeIconName() const -{ - return FName("BTEditor.Graph.BTNode.Decorator.Cooldown.Icon"); -} - -#endif // WITH_EDITOR - diff --git a/Source/UHLAI/Private/Decorators/BTD_InAngle.cpp b/Source/UHLAI/Private/Decorators/BTD_InAngle.cpp deleted file mode 100644 index 706ad078..00000000 --- a/Source/UHLAI/Private/Decorators/BTD_InAngle.cpp +++ /dev/null @@ -1,180 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Decorators/BTD_InAngle.h" - -#include "AIController.h" -#include "Utils/UnrealHelperLibraryBPL.h" -#include "BehaviorTree/BlackboardComponent.h" -#include "BehaviorTree/BTCompositeNode.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Object.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Vector.h" -#include "Components/CapsuleComponent.h" -#include "GameFramework/Character.h" -#include "GameFramework/Controller.h" -#include "DrawDebugHelpers.h" -#include "Kismet/KismetMathLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTD_InAngle) - -UBTD_InAngle::UBTD_InAngle(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "InAngle"; - INIT_DECORATOR_NODE_NOTIFY_FLAGS(); - - // Accept only actors and vectors - Target.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTD_InAngle, Target), AActor::StaticClass()); - Target.AddVectorFilter(this, GET_MEMBER_NAME_CHECKED(UBTD_InAngle, Target)); - - bAllowAbortNone = true; - bAllowAbortLowerPri = true; - bAllowAbortChildNodes = true; -} - -bool UBTD_InAngle::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const -{ - float CurrentAngle = GetCurrentAngle(OwnerComp, NodeMemory, bDrawDebug); - - return bDebugForceFalseCondition ? false : IsInAngle(CurrentAngle); -} - -void UBTD_InAngle::InitializeFromAsset(UBehaviorTree& Asset) -{ - Super::InitializeFromAsset(Asset); - - UBlackboardData* BBAsset = GetBlackboardAsset(); - if (ensure(BBAsset)) - { - Target.ResolveSelectedKey(*BBAsset); - } -} - -void UBTD_InAngle::InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, - EBTMemoryInit::Type InitType) const -{ - InitializeNodeMemory(NodeMemory, InitType); -} - -void UBTD_InAngle::CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const -{ - CleanupNodeMemory(NodeMemory, CleanupType); -} - -FString UBTD_InAngle::GetStaticDescription() const -{ - return Super::GetStaticDescription(); -} - -void UBTD_InAngle::DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, - EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const -{ - Super::DescribeRuntimeValues(OwnerComp, NodeMemory, Verbosity, Values); - Values.Add(FString::Printf(TEXT("CurrentAngle: %.2f"), GetCurrentAngle(OwnerComp, NodeMemory))); -} - -#if WITH_EDITOR -FName UBTD_InAngle::GetNodeIconName() const -{ - return FName("GenericCommands.Redo"); -} -#endif - -float UBTD_InAngle::GetCurrentAngle(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, bool bDrawDebug_In) const -{ - float CurrentAngle = 0.0f; - - const UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - if (!BlackboardComponent) return CurrentAngle; - - AAIController* OwnerController = OwnerComp.GetAIOwner(); - AActor* OwnerActor = OwnerController ? OwnerController->GetPawn() : nullptr; - ACharacter* OwnerCharacter = IsValid(OwnerController) ? OwnerController->GetCharacter() : nullptr; - AActor* TargetActor = nullptr; - bool bTargetActorRequiredButNotSet = false; - - FVector TargetVector = FVector::ZeroVector; - if (Target.SelectedKeyType == UBlackboardKeyType_Object::StaticClass()) - { - UObject* BBValue = BlackboardComponent->GetValueAsObject(Target.SelectedKeyName); - TargetActor = IsValid(BBValue) ? Cast(BBValue) : nullptr; - bTargetActorRequiredButNotSet = !IsValid(TargetActor); - TargetVector = IsValid(TargetActor) ? TargetActor->GetActorLocation() : FVector::ZeroVector; - } - if (Target.SelectedKeyType == UBlackboardKeyType_Vector::StaticClass()) - { - TargetVector = BlackboardComponent->GetValueAsVector(Target.SelectedKeyName); - } - - if (!IsValid(OwnerActor) || bTargetActorRequiredButNotSet) return CurrentAngle; - - CurrentAngle = UUnrealHelperLibraryBPL::RelativeAngleToVector(OwnerActor, TargetVector); - - if (bDrawDebug) - { - FVector LineStart = OwnerActor->GetActorLocation(); - FVector LineEnd = TargetVector; - FVector TextLocation = (LineEnd - LineStart) / 2 + LineStart; - bool bInAngle = IsInAngle(CurrentAngle); - - FAngleRange* InAngleRange = nullptr; - - if(IsValid(OwnerCharacter)) - { - float CapsuleSizeMultiplier = 6.0f; - float AngleLineLength = OverrideDebugLinesDistance > 0.0f - ? OverrideDebugLinesDistance - : OwnerCharacter->GetCapsuleComponent()->GetScaledCapsuleRadius() * CapsuleSizeMultiplier; - for (FAngleRange IncludeRange : IncludeRanges) - { - bool bInThisAngle = UKismetMathLibrary::InRange_FloatFloat(CurrentAngle, IncludeRange.Range.GetLowerBoundValue(), IncludeRange.Range.GetUpperBoundValue(), true, true); - float RangeAngle = IncludeRange.Range.GetLowerBoundValue() > 0.0f - ? IncludeRange.Range.GetUpperBoundValue() / 2 - : IncludeRange.Range.GetLowerBoundValue() / 2; - - // TODO bDebugUseSuccessColorFromRange - // if (bInThisAngle) - // { - // InAngleRange = &IncludeRange; - // } - - FVector StartRangeLine = LineStart + OwnerCharacter->GetActorForwardVector().RotateAngleAxis(IncludeRange.Range.GetLowerBoundValue(), FVector(0, 0, 1)) * AngleLineLength; - FVector EndRangeLine = LineStart + OwnerCharacter->GetActorForwardVector().RotateAngleAxis(IncludeRange.Range.GetUpperBoundValue(), FVector(0, 0, 1)) * AngleLineLength; - // FVector RangeDirection = LineStart + CachedOwnerCharacter->GetActorForwardVector().RotateAngleAxis(RangeAngle, FVector(0, 0, 1)) * AngleLineLength * 0.3f; - - // DrawDebugCone(OwnerComp.GetWorld(), CachedOwnerCharacter->GetActorLocation(), RangeDirection, 500.0f, RangeAngle, 2.0f, 2, IncludeRange.DebugColor, false, -1, -1, 1.0f); - DrawDebugLine(OwnerComp.GetWorld(), LineStart, StartRangeLine, bInThisAngle ? FColor::Green : IncludeRange.DebugColor, false, -1, -1, 4.0f); - DrawDebugLine(OwnerComp.GetWorld(), LineStart, EndRangeLine, bInThisAngle ? FColor::Green : IncludeRange.DebugColor, false, -1, -1, 4.0f); - // DrawDebugDirectionalArrow(OwnerComp.GetWorld(), LineStart, RangeDirection, 15.0f, bInThisAngle ? FColor::Green : IncludeRange.DebugColor, false, -1, -1, 3.0f); - } - } - - FColor AngleTextColor = bInAngle ? FColor::Green : FColor::Red; - // if (InAngleRange != nullptr) - // { - // AngleTextColor = InAngleRange->DebugColor; - // } - - DrawDebugLine(OwnerComp.GetWorld(), LineStart, LineEnd, bInAngle ? FColor::Green : FColor::Red, false, -1, -1, 2.0f); - DrawDebugSphere(OwnerComp.GetWorld(), LineStart, 4.0f, 16, FColor::Blue, false, -1, -1, 2.0f); - DrawDebugSphere(OwnerComp.GetWorld(), LineEnd, 4.0f, 16, FColor::Blue, false, -1, -1, 2.0f); - DrawDebugString(OwnerComp.GetWorld(), TextLocation, FString::Printf(TEXT("Angle: %.2f"), CurrentAngle), nullptr, AngleTextColor, 0, true); - DrawDebugString(OwnerComp.GetWorld(), OwnerActor->GetActorLocation(), FString::Printf(TEXT("ParentNode:\n%s \n\nNodeName:\n%s"), *GetParentNode()->NodeName, *GetMyNode()->NodeName), nullptr, FColor::White, 0, true); - } - - return CurrentAngle; -} - -bool UBTD_InAngle::IsInAngle(float CurrentAngle) const -{ - bool bInThisAngle = false; - for (FAngleRange IncludeRange : IncludeRanges) - { - bInThisAngle = UKismetMathLibrary::InRange_FloatFloat(CurrentAngle, IncludeRange.Range.GetLowerBoundValue(), IncludeRange.Range.GetUpperBoundValue(), true, true); - if (bInThisAngle) - { - break; - } - } - return bInThisAngle; -} diff --git a/Source/UHLAI/Private/Decorators/BTD_InRange.cpp b/Source/UHLAI/Private/Decorators/BTD_InRange.cpp deleted file mode 100644 index 59f75798..00000000 --- a/Source/UHLAI/Private/Decorators/BTD_InRange.cpp +++ /dev/null @@ -1,178 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Decorators/BTD_InRange.h" - -#include "AIController.h" -#include "BehaviorTree/BlackboardComponent.h" -#include "BehaviorTree/BTFunctionLibrary.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Object.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Vector.h" -#include "Components/CapsuleComponent.h" -#include "GameFramework/Character.h" -#include "DrawDebugHelpers.h" -#include "Kismet/KismetMathLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTD_InRange) - -UBTD_InRange::UBTD_InRange(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "InRange"; - INIT_DECORATOR_NODE_NOTIFY_FLAGS(); - - // Accept only actors and vectors - Target.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTD_InRange, Target), AActor::StaticClass()); - Target.AddVectorFilter(this, GET_MEMBER_NAME_CHECKED(UBTD_InRange, Target)); - - bAllowAbortNone = true; - bAllowAbortLowerPri = true; - bAllowAbortChildNodes = true; -} - -#if WITH_EDITOR -FName UBTD_InRange::GetNodeIconName() const -{ - return FName("SoftwareCursor_UpDown"); -} -#endif - -float UBTD_InRange::GetCurrentDistance(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, bool bDrawDebug_In) const -{ - float CurrentDistance = 0.0f; - - const UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - if (!BlackboardComponent) return CurrentDistance; - - AAIController* OwnerController = OwnerComp.GetAIOwner(); - AActor* OwnerActor = OwnerController ? OwnerController->GetPawn() : nullptr; - AActor* TargetActor = nullptr; - bool bTargetActorRequiredButNotSet = false; - - FVector TargetVector = FVector::ZeroVector; - if (Target.SelectedKeyType == UBlackboardKeyType_Object::StaticClass()) - { - UObject* BBValue = BlackboardComponent->GetValueAsObject(Target.SelectedKeyName); - TargetActor = IsValid(BBValue) ? Cast(BBValue) : nullptr; - bTargetActorRequiredButNotSet = !IsValid(TargetActor); - TargetVector = IsValid(TargetActor) ? TargetActor->GetActorLocation() : FVector::ZeroVector; - } - if (Target.SelectedKeyType == UBlackboardKeyType_Vector::StaticClass()) - { - TargetVector = BlackboardComponent->GetValueAsVector(Target.SelectedKeyName); - } - - if (!IsValid(OwnerActor) || bTargetActorRequiredButNotSet) return CurrentDistance; - - ACharacter* OwnerCharacter = IsValid(OwnerController) ? OwnerController->GetCharacter() : nullptr; - CurrentDistance = bCalculateDistanceIn2D - ? FVector::Dist2D(OwnerActor->GetActorLocation(), TargetVector) - : FVector::Distance(OwnerActor->GetActorLocation(), TargetVector); - - if (bIncludeSelfCapsuleRadius && IsValid(OwnerCharacter)) - { - CurrentDistance -= OwnerCharacter->GetCapsuleComponent()->GetScaledCapsuleRadius(); - } - - // TODO cache TargetCharacter when possible (on BBValue change?) - ACharacter* TargetCharacter = Cast(TargetActor); - if (IsValid(TargetCharacter) && bIncludeTargetCapsuleRadius) - { - CurrentDistance -= TargetCharacter->GetCapsuleComponent()->GetScaledCapsuleRadius(); - } - - if (bDrawDebug_In) - { - FVector LineStart = OwnerActor->GetActorLocation(); - FVector LineEnd = TargetVector; - FVector TextLocation = (LineEnd - LineStart) / 2 + LineStart; - bool bInRange = UKismetMathLibrary::InRange_FloatFloat(CurrentDistance, Min, Max); - - if (bIncludeSelfCapsuleRadius && IsValid(OwnerCharacter)) - { - UCapsuleComponent* OwnerCharacterCapsule = OwnerCharacter->GetCapsuleComponent(); - DrawDebugCapsule(OwnerComp.GetWorld(), OwnerCharacterCapsule->GetComponentLocation(), - OwnerCharacterCapsule->GetScaledCapsuleHalfHeight(), - OwnerCharacterCapsule->GetScaledCapsuleRadius(), - OwnerCharacterCapsule->GetComponentRotation().Quaternion(), FColor::Blue, - false,DebugLifetime, 0, 2.0f); - LineStart = (LineEnd - LineStart).GetSafeNormal() * OwnerCharacterCapsule->GetScaledCapsuleRadius() + OwnerCharacter->GetActorLocation(); - } - - if (bIncludeTargetCapsuleRadius && IsValid(TargetCharacter)) - { - UCapsuleComponent* TargetCharacterCapsule = TargetCharacter->GetCapsuleComponent(); - DrawDebugCapsule(OwnerComp.GetWorld(), TargetCharacterCapsule->GetComponentLocation(), - TargetCharacterCapsule->GetScaledCapsuleHalfHeight(), - TargetCharacterCapsule->GetScaledCapsuleRadius(), - TargetCharacterCapsule->GetComponentRotation().Quaternion(), FColor::Blue, - false,DebugLifetime, 0, 2.0f); - LineEnd = (LineStart - LineEnd).GetSafeNormal() * TargetCharacterCapsule->GetScaledCapsuleRadius() + TargetVector; - } - - DrawDebugLine(OwnerComp.GetWorld(), LineStart, LineEnd, bInRange ? FColor::Green : FColor::Red, false, DebugLifetime, -1, 2.0f); - DrawDebugSphere(OwnerComp.GetWorld(), LineStart, 5.0f, 16, FColor::Blue, false, DebugLifetime, DebugLifetime, 2.0f); - DrawDebugSphere(OwnerComp.GetWorld(), LineEnd, 5.0f, 16, FColor::Blue, false, DebugLifetime, DebugLifetime, 2.0f); - DrawDebugString(OwnerComp.GetWorld(), TextLocation, FString::Printf(TEXT("Distance%s: %.2f"), bCalculateDistanceIn2D ? TEXT("(2D)") : TEXT("(3D)"), CurrentDistance), nullptr, bInRange ? FColor::Green : FColor::Red, DebugLifetime < 0 ? 0 : DebugLifetime, true); - DrawDebugString(OwnerComp.GetWorld(), OwnerCharacter->GetActorLocation(), FString::Printf(TEXT("ParentNode:\n%s \n\nNodeName:\n%s"), *GetParentNode()->NodeName, *GetMyNode()->NodeName), nullptr, FColor::White, DebugLifetime < 0 ? 0 : DebugLifetime, true); - } - - return CurrentDistance; -} - -void UBTD_InRange::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) -{ - Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds); - - RequestAbort(OwnerComp, EvaluateAbortType(OwnerComp)); -} - -bool UBTD_InRange::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const -{ - float CurrentDistance = GetCurrentDistance(OwnerComp, NodeMemory, bDrawDebug); - bool bIsInRange = UKismetMathLibrary::InRange_FloatFloat(CurrentDistance, Min, Max); - return bIsInRange; -} - -void UBTD_InRange::InitializeFromAsset(UBehaviorTree& Asset) -{ - Super::InitializeFromAsset(Asset); - - UBlackboardData* BBAsset = GetBlackboardAsset(); - if (ensure(BBAsset)) - { - Target.ResolveSelectedKey(*BBAsset); - } -} - -void UBTD_InRange::InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, - EBTMemoryInit::Type InitType) const -{ - InitializeNodeMemory(NodeMemory, InitType); -} - -void UBTD_InRange::CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, - EBTMemoryClear::Type CleanupType) const -{ - CleanupNodeMemory(NodeMemory, CleanupType); -} - -FString UBTD_InRange::GetStaticDescription() const -{ - FString NodeDescription = GetPropertiesDetails(); - // NodeDescription += FString::Printf(TEXT("Target: %s\n"), *Target.SelectedKeyName.ToString()); - // NodeDescription += FString::Printf(TEXT("Min: %2f\n"), Min); - // NodeDescription += FString::Printf(TEXT("Max: %2f\n"), Max); - // NodeDescription += FString::Printf(TEXT("bIncludeSelfCapsuleRadius: %hs\n"), BTOA(bIncludeSelfCapsuleRadius)); - // NodeDescription += FString::Printf(TEXT("bIncludeTargetCapsuleRadius: %hs\n"), BTOA(bIncludeTargetCapsuleRadius)); - return FString::Printf(TEXT("%s%s"), *Super::GetStaticDescription(), *NodeDescription); -} - -void UBTD_InRange::DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, - EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const -{ - Super::DescribeRuntimeValues(OwnerComp, NodeMemory, Verbosity, Values); - - // no need to cache value its only works in editor - Values.Add(FString::Printf(TEXT("CurrentDistance: %.2f"), GetCurrentDistance(OwnerComp, NodeMemory, false))); -} diff --git a/Source/UHLAI/Private/Decorators/BTD_LoopRandomCount.cpp b/Source/UHLAI/Private/Decorators/BTD_LoopRandomCount.cpp deleted file mode 100644 index 6c27451a..00000000 --- a/Source/UHLAI/Private/Decorators/BTD_LoopRandomCount.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Decorators/BTD_LoopRandomCount.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTD_LoopRandomCount) - -UBTD_LoopRandomCount::UBTD_LoopRandomCount(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "Loop_RandomCount"; - NumLoops = 3; -} - -FString UBTD_LoopRandomCount::GetStaticDescription() const -{ - return FString::Printf(TEXT("Loops: %d-%d loops"), Range.Min, Range.Max); -} - -void UBTD_LoopRandomCount::OnNodeActivation(FBehaviorTreeSearchData& SearchData) -{ - NumLoops = FMath::RandRange(Range.Min, Range.Max); - Super::OnNodeActivation(SearchData); -} diff --git a/Source/UHLAI/Private/Decorators/BTD_RandomChance.cpp b/Source/UHLAI/Private/Decorators/BTD_RandomChance.cpp deleted file mode 100644 index c3f16a42..00000000 --- a/Source/UHLAI/Private/Decorators/BTD_RandomChance.cpp +++ /dev/null @@ -1,157 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Decorators/BTD_RandomChance.h" - -#include "BehaviorTree/BTCompositeNode.h" -#include "Engine/Engine.h" -#include "UObject/UObjectGlobals.h" -#include "UObject/UnrealType.h" -#include "BehaviorTree/BlackboardData.h" -#include "Kismet/KismetMathLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTD_RandomChance) - -UBTD_RandomChance::UBTD_RandomChance(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - bAllowAbortNone = false; - bAllowAbortLowerPri = false; - bAllowAbortChildNodes = false; - - ScalableChanceLevelInBB.AddFloatFilter(this, GET_MEMBER_NAME_CHECKED(UBTD_RandomChance, ScalableChanceLevelInBB)); - -#if WITH_EDITOR - FProperty* StructProp = FindFProperty( - GetClass(), GET_MEMBER_NAME_CHECKED(UBTD_RandomChance, ChanceChangePerStep)); - - FStructProperty* StructProperty = CastField(StructProp); - if (StructProperty) - { - FProperty* PotentiallyFloatProperty = StructProperty->Struct->FindPropertyByName(GET_MEMBER_NAME_CHECKED(FOperationOnBBValue, FloatValue)); - FStructProperty* FloatProperty = CastField(PotentiallyFloatProperty); - if (FloatProperty) - { - FloatProperty->SetMetaData(TEXT("ClampMin"), TEXT("0.0")); - FloatProperty->SetMetaData(TEXT("ClampMax"), TEXT("1.0")); - FloatProperty->SetMetaData(TEXT("UIMin"), TEXT("0.0")); - FloatProperty->SetMetaData(TEXT("UIMax"), TEXT("1.0")); - } - } -#endif -} - -bool UBTD_RandomChance::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const -{ - float CurrentChance = GetCurrentChance(OwnerComp); - bool bResult = UKismetMathLibrary::RandomBoolWithWeight(CurrentChance); - - float DrawDebugTime = DebugSettings.DrawDebugTime.GetValue(OwnerComp); - FString ResultString = bResult ? "Success" : "Fail"; - FString ScalabilitySetting = ""; - if (ScaleType == EScalableChanceType::ScalableFloat) - { - UBlackboardData* BBAsset = GetBlackboardAsset(); - if (BBAsset->IsValid()) - { - float ScaleLevel = OwnerComp.GetBlackboardComponent()->GetValueAsFloat(ScalableChanceLevelInBB.SelectedKeyName); - ScalabilitySetting = FString::SanitizeFloat(ScaleLevel); - } - } - else if (ScaleType == EScalableChanceType::BBDependantWithSteps) - { - UBlackboardData* BBAsset = GetBlackboardAsset(); - if (BBAsset->IsValid()) - { - float ScaleLevel = OwnerComp.GetBlackboardComponent()->GetValueAsFloat(StepsCount.SelectedKeyName); - ScalabilitySetting = FString::SanitizeFloat(ScaleLevel); - } - } - - if (DebugSettings.bEnableDebug) - { - GEngine->AddOnScreenDebugMessage(-1, - DrawDebugTime, bResult ? FColor::Green : FColor::White, - FString::Printf(TEXT("[UBTD_RandomChance] %s on \"%s\" with chance %.2f scaled by %s (%s)"), *ResultString, *GetParentNode()->GetName(), CurrentChance, *ScalabilitySetting, *UEnum::GetDisplayValueAsText(ScaleType).ToString()) - ); - } - - return bResult; -} - -FString UBTD_RandomChance::GetStaticDescription() const -{ - // TODO BB value preview? - // float CurrentChance = bUseBlackboardValue ? GetBlackboardAsset()->GetKey(ChanceInBB.GetSelectedKeyID()) : Chance; - return FString::Printf(TEXT("Chance - %.2f%% (%s)"), Chance * 100.0f, *Chance.ToString()); -} - -void UBTD_RandomChance::InitializeFromAsset(UBehaviorTree& Asset) -{ - Super::InitializeFromAsset(Asset); - - ChanceChangePerStep.SetCurrentBBKeyValueType(EBlackboardValueType::Float); -} - -#if WITH_EDITOR -FName UBTD_RandomChance::GetNodeIconName() const -{ - // return FName("CodeView.ClassIcon"); - return FName("GraphEditor.StructGlyph"); -} -#endif - -float UBTD_RandomChance::GetCurrentChance(UBehaviorTreeComponent& OwnerComp) const -{ - float Result = 0.0f; - switch (ScaleType) - { - case EScalableChanceType::None: - { - Result = Chance.GetValue(OwnerComp); - break; - } - case EScalableChanceType::ScalableFloat: - { - float ScalableChanceLevel = 0.0f; - UBlackboardData* BBAsset = GetBlackboardAsset(); - if (BBAsset->IsValid()) - { - ScalableChanceLevel = OwnerComp.GetBlackboardComponent()->GetValueAsFloat(ScalableChanceLevelInBB.SelectedKeyName); - } - ScalableChanceLevel = ScalableChanceLevelInBB.IsNone() ? 0.0f : ScalableChanceLevel; - Result = ScalableChance.GetValueAtLevel(ScalableChanceLevel); - break; - } - case EScalableChanceType::BBDependantWithSteps: - { - Result = Chance.GetValue(OwnerComp); - float StepsCountValue = 0.0f; - UBlackboardData* BBAsset = GetBlackboardAsset(); - if (BBAsset->IsValid()) - { - StepsCountValue = OwnerComp.GetBlackboardComponent()->GetValueAsFloat(StepsCount.SelectedKeyName); - } - // for every step calculate float value - int32 StepsCountInt = FMath::RoundToInt(StepsCountValue); - for (int32 i = 0; i < StepsCountInt; i++) - { - Result = ChanceChangePerStep.CalculateFloatResult(OwnerComp, Result); - } - break; - } - default: - break; - } - - // clamp if MaxChance defined it could be 0.6f or something like that - if (ScaleType != EScalableChanceType::None) - { - Result = FMath::Clamp(Result, 0.0f, MaxChance.GetValue(OwnerComp)); - } - - // clamp anything chance range 0.0f-1.0f - Result = FMath::Clamp(Result, 0.0f, 1.0f); - - return Result; -} \ No newline at end of file diff --git a/Source/UHLAI/Private/Decorators/BTD_TimeLimitRandom.cpp b/Source/UHLAI/Private/Decorators/BTD_TimeLimitRandom.cpp deleted file mode 100644 index 367ac294..00000000 --- a/Source/UHLAI/Private/Decorators/BTD_TimeLimitRandom.cpp +++ /dev/null @@ -1,121 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Decorators/BTD_TimeLimitRandom.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTD_TimeLimitRandom) - -#if UE_VERSION_NEWER_THAN(5, 4, 0) -struct FBTimeLimitRandomMemory -{ - bool bElapsed = false; -}; -#endif - -UBTD_TimeLimitRandom::UBTD_TimeLimitRandom(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "TimeLimit_Random"; - TimeLimit = 5.0f; - -#if UE_VERSION_NEWER_THAN(5, 4, 0) - INIT_DECORATOR_NODE_NOTIFY_FLAGS(); - bTickIntervals = true; - - // time limit always abort current branch - bAllowAbortLowerPri = false; - bAllowAbortNone = false; - FlowAbortMode = EBTFlowAbortMode::Self; -#endif -} - -FString UBTD_TimeLimitRandom::GetStaticDescription() const -{ - // basic info: result after time - return FString::Printf(TEXT("TimeLimit: %s after %.1fs-%.1fs"), - *UBehaviorTreeTypes::DescribeNodeResult(EBTNodeResult::Failed), TimeLimitRange.Min, TimeLimitRange.Max); -} - -#if UE_VERSION_NEWER_THAN(5, 4, 0) -void UBTD_TimeLimitRandom::DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const -{ - Super::DescribeRuntimeValues(OwnerComp, NodeMemory, Verbosity, Values); - - const FBTAuxiliaryMemory* DecoratorMemory = GetSpecialNodeMemory(NodeMemory); - if (OwnerComp.GetWorld()) - { - const float TimeLeft = DecoratorMemory->NextTickRemainingTime > 0.f ? DecoratorMemory->NextTickRemainingTime : 0.f; - Values.Add(FString::Printf(TEXT("%s in %ss"), - *UBehaviorTreeTypes::DescribeNodeResult(EBTNodeResult::Failed), - *FString::SanitizeFloat(TimeLeft))); - } -} - -#if WITH_EDITOR -FName UBTD_TimeLimitRandom::GetNodeIconName() const -{ - return FName("BTEditor.Graph.BTNode.Decorator.TimeLimit.Icon"); -} -#endif -#endif - -void UBTD_TimeLimitRandom::OnNodeActivation(FBehaviorTreeSearchData& SearchData) -{ - TimeLimit = bUseIntegers - ? FMath::RandRange((int32)TimeLimitRange.Min, (int32)TimeLimitRange.Max) - : FMath::RandRange(TimeLimitRange.Min, TimeLimitRange.Max); - Super::OnNodeActivation(SearchData); -} - -#if UE_VERSION_NEWER_THAN(5, 4, 0) -void UBTD_TimeLimitRandom::OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - Super::OnBecomeRelevant(OwnerComp, NodeMemory); - - SetNextTickTime(NodeMemory, TimeLimit); -} - -void UBTD_TimeLimitRandom::OnCeaseRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - Super::OnCeaseRelevant(OwnerComp, NodeMemory); - - reinterpret_cast(NodeMemory)->bElapsed = false; -} - -bool UBTD_TimeLimitRandom::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const -{ - return !reinterpret_cast(NodeMemory)->bElapsed; -} - -void UBTD_TimeLimitRandom::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) -{ - ensureMsgf(DeltaSeconds >= TimeLimit || FMath::IsNearlyEqual(DeltaSeconds, TimeLimit, UE_KINDA_SMALL_NUMBER), - TEXT("Using SetNextTickTime in OnBecomeRelevant should guarantee that we are only getting ticked when the time limit is finished. DT=%f, TimeLimit=%f"), - DeltaSeconds, - TimeLimit); - - // Mark this decorator instance as Elapsed for calls to CalculateRawConditionValue - reinterpret_cast(NodeMemory)->bElapsed = true; - - // Set our next tick time to large value so we don't get ticked again in case the decorator - // is still active after requesting execution (e.g. latent abort) - SetNextTickTime(NodeMemory, FLT_MAX); - - OwnerComp.RequestExecution(this); -} - -uint16 UBTD_TimeLimitRandom::GetInstanceMemorySize() const -{ - return sizeof(FBTimeLimitMemoryRandom); -} - -void UBTD_TimeLimitRandom::InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, const EBTMemoryInit::Type InitType) const -{ - InitializeNodeMemory(NodeMemory, InitType); -} - -void UBTD_TimeLimitRandom::CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, const EBTMemoryClear::Type CleanupType) const -{ - CleanupNodeMemory(NodeMemory, CleanupType); -} -#endif diff --git a/Source/UHLAI/Private/Services/BTS_GameplayFocus.cpp b/Source/UHLAI/Private/Services/BTS_GameplayFocus.cpp deleted file mode 100644 index 7e78421a..00000000 --- a/Source/UHLAI/Private/Services/BTS_GameplayFocus.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Services/BTS_GameplayFocus.h" - -#include "GameFramework/Actor.h" -#include "BehaviorTree/BlackboardComponent.h" -#include "BehaviorTree/BehaviorTreeComponent.h" -#include "BehaviorTree/BehaviorTreeTypes.h" -#include "BehaviorTree/Services/BTService_DefaultFocus.h" -#include "AIController.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTS_GameplayFocus) - -UBTS_GameplayFocus::UBTS_GameplayFocus(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "Set Gameplay Focus"; - FocusPriority = EAIFocusPriority::Gameplay; -} - -#if UE_VERSION_NEWER_THAN(5, 4, 0) -void UBTS_GameplayFocus::InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const -{ - InitializeNodeMemory(NodeMemory, InitType); -} - -void UBTS_GameplayFocus::CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const -{ - CleanupNodeMemory(NodeMemory, CleanupType); -} -#endif diff --git a/Source/UHLAI/Private/Tasks/BTT_ClearFocus.cpp b/Source/UHLAI/Private/Tasks/BTT_ClearFocus.cpp deleted file mode 100644 index 2615335b..00000000 --- a/Source/UHLAI/Private/Tasks/BTT_ClearFocus.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/BTT_ClearFocus.h" -#include "AIController.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTT_ClearFocus) - -UBTT_ClearFocus::UBTT_ClearFocus(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "ClearFocus"; -} - -EBTNodeResult::Type UBTT_ClearFocus::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - TObjectPtr AIOwner = OwnerComp.GetAIOwner(); - if (!AIOwner.Get()) - { - AIOwner.Get()->ClearFocus(EAIFocusPriority::Gameplay); - } - - return Super::ExecuteTask(OwnerComp, NodeMemory); -} diff --git a/Source/UHLAI/Private/Tasks/BTT_DebugPrintBBValue.cpp b/Source/UHLAI/Private/Tasks/BTT_DebugPrintBBValue.cpp deleted file mode 100644 index 5a2004f1..00000000 --- a/Source/UHLAI/Private/Tasks/BTT_DebugPrintBBValue.cpp +++ /dev/null @@ -1,132 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/BTT_DebugPrintBBValue.h" - -#include "UHLAIBlueprintLibrary.h" -#include "BehaviorTree/BlackboardComponent.h" -#include "BehaviorTree/BlackboardData.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Enum.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_NativeEnum.h" -#include "Kismet/KismetSystemLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTT_DebugPrintBBValue) - -UBTT_DebugPrintBBValue::UBTT_DebugPrintBBValue(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "DebugPrintBBValue"; -} - -EBTNodeResult::Type UBTT_DebugPrintBBValue::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - UKismetSystemLibrary::PrintString( - nullptr, GetBBKeyDescription(OwnerComp), - true, true, - Color, Duration, Key - ); - return Super::ExecuteTask(OwnerComp, NodeMemory); -} - -FString UBTT_DebugPrintBBValue::GetBBKeyDescription(UBehaviorTreeComponent& OwnerComp) -{ - const UBlackboardData* BlackboardAsset = GetBlackboardAsset(); - BlackboardKey.ResolveSelectedKey(*BlackboardAsset); - - const FBlackboardEntry* EntryInfo = BlackboardAsset ? BlackboardAsset->GetKey(BlackboardKey.GetSelectedKeyID()) : NULL; - - UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - - EBlackboardValueType BBValueType = UUHLAIBlueprintLibrary::BlackboardKeyToBBValueType(BlackboardKey); - - FString Description = FString(); - - switch (BBValueType) - { - case EBlackboardValueType::Bool: - { - bool BoolValue = BlackboardComponent->GetValueAsBool(BlackboardKey.SelectedKeyName); - Description = FString::Printf(TEXT("\"%s\" is %hhd"), *BlackboardKey.SelectedKeyName.ToString(), BoolValue); - } - break; - case EBlackboardValueType::Int: - { - int32 IntValue = BlackboardComponent->GetValueAsInt(BlackboardKey.SelectedKeyName); - Description = FString::Printf(TEXT("\"%s\" is %d"), *BlackboardKey.SelectedKeyName.ToString(), IntValue); - } - break; - case EBlackboardValueType::Float: - { - float FloatValue = BlackboardComponent->GetValueAsFloat(BlackboardKey.SelectedKeyName); - Description = FString::Printf(TEXT("\"%s\" is %f"), *BlackboardKey.SelectedKeyName.ToString(), FloatValue); - } - break; - case EBlackboardValueType::String: - { - FString StringValue = BlackboardComponent->GetValueAsString(BlackboardKey.SelectedKeyName); - Description = FString::Printf(TEXT("\"%s\" is %s"), *BlackboardKey.SelectedKeyName.ToString(), *StringValue); - } - break; - case EBlackboardValueType::Name: - { - FName NameValue = BlackboardComponent->GetValueAsName(BlackboardKey.SelectedKeyName); - Description = FString::Printf(TEXT("\"%s\" is %s"), *BlackboardKey.SelectedKeyName.ToString(), *NameValue.ToString()); - } - break; - case EBlackboardValueType::Vector: - { - FVector VectorValue = BlackboardComponent->GetValueAsVector(BlackboardKey.SelectedKeyName); - Description = FString::Printf(TEXT("\"%s\" is %s"), *BlackboardKey.SelectedKeyName.ToString(), *VectorValue.ToString()); - } - break; - case EBlackboardValueType::Rotator: - { - FRotator RotatorValue = BlackboardComponent->GetValueAsRotator(BlackboardKey.SelectedKeyName); - Description = FString::Printf(TEXT("\"%s\" is %s"), *BlackboardKey.SelectedKeyName.ToString(), *RotatorValue.ToString()); - } - break; - case EBlackboardValueType::Enum: - { - UEnum* Enum = (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Enum::StaticClass()) - ? ((UBlackboardKeyType_Enum*)(EntryInfo->KeyType))->EnumType - : ((UBlackboardKeyType_NativeEnum*)(EntryInfo->KeyType))->EnumType; - uint8 EnumValue = BlackboardComponent->GetValueAsEnum(BlackboardKey.SelectedKeyName); - - FString EnumStringValue = Enum->GetNameStringByValue(EnumValue); - Description = FString::Printf(TEXT("\"%s\" is %s"), *BlackboardKey.SelectedKeyName.ToString(), *EnumStringValue); - } - break; - case EBlackboardValueType::NativeEnum: - { - UEnum* Enum = (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Enum::StaticClass()) - ? ((UBlackboardKeyType_Enum*)(EntryInfo->KeyType))->EnumType - : ((UBlackboardKeyType_NativeEnum*)(EntryInfo->KeyType))->EnumType; - uint8 EnumValue = BlackboardComponent->GetValueAsEnum(BlackboardKey.SelectedKeyName); - FString EnumStringValue = Enum->GetNameStringByValue(EnumValue); - Description = FString::Printf(TEXT("\"%s\" is %s"), *BlackboardKey.SelectedKeyName.ToString(), *EnumStringValue); - } - break; - case EBlackboardValueType::Object: - { - FBlackboardKeySelector ObjectValue = BlackboardKey; - Description = FString::Printf(TEXT("\"%s\" is %s"), *BlackboardKey.SelectedKeyName.ToString(), *ObjectValue.SelectedKeyName.ToString()); - } - break; - case EBlackboardValueType::Class: - { - UClass* ClassValue = BlackboardComponent->GetValueAsClass(BlackboardKey.SelectedKeyName); - Description = FString::Printf(TEXT("\"%s\" is %s"), *BlackboardKey.SelectedKeyName.ToString(), ClassValue ? *ClassValue->GetName() : TEXT("")); - } - break; - - default: - break; - } - - return FString::Printf(TEXT("%s"), *Description); -} - -FString UBTT_DebugPrintBBValue::GetStaticDescription() const -{ - return FString::Printf(TEXT("%s: %s"), *Super::GetStaticDescription(), *BlackboardKey.SelectedKeyName.ToString()); -} diff --git a/Source/UHLAI/Private/Tasks/BTT_DebugPrintString.cpp b/Source/UHLAI/Private/Tasks/BTT_DebugPrintString.cpp deleted file mode 100644 index 8c7849ba..00000000 --- a/Source/UHLAI/Private/Tasks/BTT_DebugPrintString.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/BTT_DebugPrintString.h" -#include "Kismet/KismetSystemLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTT_DebugPrintString) - -UBTT_DebugPrintString::UBTT_DebugPrintString(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "DebugPrintString"; -} - -EBTNodeResult::Type UBTT_DebugPrintString::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - UKismetSystemLibrary::PrintString( - nullptr, GetFinalString(), - true, true, - Color, Duration.GetValue(OwnerComp), Key.GetValue(OwnerComp) - ); - return Super::ExecuteTask(OwnerComp, NodeMemory); -} - -FString UBTT_DebugPrintString::GetStaticDescription() const -{ - return FString::Printf(TEXT("%s: \"%s\""), *Super::GetStaticDescription(), *GetFinalString()); -} - -FString UBTT_DebugPrintString::GetFinalString() const -{ - FString Result = ""; - for (FValueOrBBKey_String PrintString : PrintStrings) - { - Result.Append(PrintString.ToString()); - } - return Result; -} diff --git a/Source/UHLAI/Private/Tasks/BTT_FireGameplayEvent.cpp b/Source/UHLAI/Private/Tasks/BTT_FireGameplayEvent.cpp deleted file mode 100644 index d570c9b3..00000000 --- a/Source/UHLAI/Private/Tasks/BTT_FireGameplayEvent.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/BTT_FireGameplayEvent.h" - -#include "AbilitySystemComponent.h" -#include "AbilitySystemGlobals.h" -#include "AbilitySystemInterface.h" -#include "BehaviorTree/BlackboardComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTT_FireGameplayEvent) - -UBTT_FireGameplayEvent::UBTT_FireGameplayEvent(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - Target.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTT_FireGameplayEvent, Target), AActor::StaticClass()); - Instigator.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTT_FireGameplayEvent, Instigator), AActor::StaticClass()); - - Target.SelectedKeyName = FBlackboard::KeySelf; - Instigator.SelectedKeyName = FBlackboard::KeySelf; - - OptionalObject.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTT_FireGameplayEvent, OptionalObject), UObject::StaticClass()); - OptionalObject.AllowNoneAsValue(true); - OptionalObject2.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTT_FireGameplayEvent, OptionalObject2), UObject::StaticClass()); - OptionalObject2.AllowNoneAsValue(true); -} - -EBTNodeResult::Type UBTT_FireGameplayEvent::ExecuteTask( - UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - const UBlackboardData* BlackboardAsset = GetBlackboardAsset(); - UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - if (!BlackboardAsset) return EBTNodeResult::Failed; - - Target.ResolveSelectedKey(*BlackboardAsset); - Instigator.ResolveSelectedKey(*BlackboardAsset); - OptionalObject.ResolveSelectedKey(*BlackboardAsset); - OptionalObject2.ResolveSelectedKey(*BlackboardAsset); - - if (!Target.IsSet() || !Instigator.IsSet()) - { - return EBTNodeResult::Failed; - } - - UObject* TargetValue = BlackboardComponent->GetValueAsObject(Target.SelectedKeyName); - UObject* InstigatorValue = BlackboardComponent->GetValueAsObject(Instigator.SelectedKeyName); - if (!TargetValue || !InstigatorValue) return EBTNodeResult::Failed; - - AActor* TargetActor = Cast(TargetValue); - AActor* InstigatorActor = Cast(InstigatorValue); - if (!TargetActor || !InstigatorActor) return EBTNodeResult::Failed; - - UAbilitySystemComponent* TargetASC = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(TargetActor); - - FGameplayEventData EventData; - EventData.Target = TargetActor; - EventData.Instigator = InstigatorActor; - EventData.EventMagnitude = EventMagnitude; - EventData.OptionalObject = BlackboardComponent->GetValueAsObject(OptionalObject.SelectedKeyName); - EventData.OptionalObject2 = BlackboardComponent->GetValueAsObject(OptionalObject2.SelectedKeyName); - EventData.TargetTags = TargetTags; - EventData.InstigatorTags = InstigatorTags; - TargetASC->HandleGameplayEvent(EventTag, &EventData); - - return Super::ExecuteTask(OwnerComp, NodeMemory); -} - -FString UBTT_FireGameplayEvent::GetStaticDescription() const -{ - return Super::GetStaticDescription(); -} - diff --git a/Source/UHLAI/Private/Tasks/BTT_InvokeGameplayAbility.cpp b/Source/UHLAI/Private/Tasks/BTT_InvokeGameplayAbility.cpp deleted file mode 100644 index 0a365863..00000000 --- a/Source/UHLAI/Private/Tasks/BTT_InvokeGameplayAbility.cpp +++ /dev/null @@ -1,186 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/BTT_InvokeGameplayAbility.h" - -#include "AbilitySystemComponent.h" -#include "AbilitySystemInterface.h" -#include "AIController.h" -#include "AbilitySystemGlobals.h" -#include "Utils/UnrealHelperLibraryBPL.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTT_InvokeGameplayAbility) - -UBTT_InvokeGameplayAbility::UBTT_InvokeGameplayAbility(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "InvokeGameplayAbility"; - - bNotifyTaskFinished = true; - // TODO probably instancing required or won't work with multiple InvokeGameplayAbilities/multiple enemies - // as in PlayAnimMontage - yep its required - // TODO try to remove instancing, to reproduce issue with stucking on "InvokeGameplayAbility" - // create room with enemy only attacking infinitely - // bCreateNodeInstance = true; -} - -EBTNodeResult::Type UBTT_InvokeGameplayAbility::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - EBTNodeResult::Type Result = EBTNodeResult::Failed; - bool GameplayAbilitySpecFound = false; - - TObjectPtr AIOwner = OwnerComp.GetAIOwner(); - if (!AIOwner) return EBTNodeResult::Failed; - - UAbilitySystemComponent* ASC = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(AIOwner->GetPawn()); - if (!ASC) - { - if (bDebugMessages.GetValue(OwnerComp)) - { - UUnrealHelperLibraryBPL::DebugPrintStrings(FString::Printf(TEXT("[BTT_InvokeGameplayAbility] OwnerActor \"%s\" don't have AbilitySystem(implements IAbilitySystemInterface) add it"), *AIOwner->GetPawn()->GetName())); - } - return EBTNodeResult::Failed; - } - - FGameplayAbilitySpec* AbilitySpec = nullptr; - FGameplayAbilitySpecHandle* GameplayAbilitiesSpecHandle = nullptr; - - // TODO UHL->FindAbilitySpecByTags? - TArray GameplayAbilitiesSpecs = {}; - ASC->GetAllAbilities(GameplayAbilitiesSpecs); - for (FGameplayAbilitySpecHandle GameplayAbilitiesSpecSearch : GameplayAbilitiesSpecs) - { - FGameplayAbilitySpec* AbilitySpecSearch = ASC->FindAbilitySpecFromHandle(GameplayAbilitiesSpecSearch); - if (AbilitySpecSearch->Ability->GetAssetTags().HasAny(GameplayTag.GetValue(OwnerComp).GetSingleTagContainer())) - { - AbilitySpec = AbilitySpecSearch; - GameplayAbilitiesSpecHandle = &GameplayAbilitiesSpecSearch; - GameplayAbilitySpecFound = true; - break; - } - } - - if (bActivate) - { - if (GameplayAbilitySpecFound && AbilitySpec != nullptr) - { - if (bWaitForFinishing.GetValue(OwnerComp)) - { - ASC->OnAbilityEnded.AddUObject(this, &UBTT_InvokeGameplayAbility::OnAbilityEnded, &OwnerComp); - } - bool bAbilityActivated = ASC->TryActivateAbility(AbilitySpec->Handle, true); - - Result = bAbilityActivated ? EBTNodeResult::InProgress : EBTNodeResult::Failed; - - if (!bWaitForFinishing.GetValue(OwnerComp)) - { - Result = EBTNodeResult::Succeeded; - } - - if (bDebugMessages.GetValue(OwnerComp)) - { - UUnrealHelperLibraryBPL::DebugPrintStrings(FString::Printf(TEXT("[BTT_InvokeGameplayAbility] TryActivateAbility - \"%s\" - %s"), *GameplayTag.GetValue(OwnerComp).ToString(), bAbilityActivated ? TEXT("activated") : TEXT("failed"))); - } - } - else - { - if (bDebugMessages.GetValue(OwnerComp)) - { - UUnrealHelperLibraryBPL::DebugPrintStrings(FString::Printf(TEXT("[BTT_InvokeGameplayAbility] Ability - \"%s\" - not found, give it to character if forgot"), *GameplayTag.GetValue(OwnerComp).ToString())); - } - } - } - else - { - if (GameplayAbilitySpecFound && GameplayAbilitiesSpecHandle != nullptr) - { - ASC->CancelAbilityHandle(*GameplayAbilitiesSpecHandle); - } - Result = EBTNodeResult::Succeeded; - } - - return Result; -} - -EBTNodeResult::Type UBTT_InvokeGameplayAbility::AbortTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - bIsAborting = true; - - TObjectPtr AIOwner = OwnerComp.GetAIOwner(); - if (AIOwner) - { - UAbilitySystemComponent* ASC = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(AIOwner->GetPawn()); - - if (ASC) - { - const FGameplayTagContainer TagsContainer = FGameplayTagContainer(GameplayTag.GetValue(OwnerComp)); - ASC->CancelAbilities(&TagsContainer); - if (bWaitForFinishing.GetValue(OwnerComp)) - { - ASC->OnAbilityEnded.RemoveAll(this); - } - - if (bDebugMessages.GetValue(OwnerComp)) - { - UUnrealHelperLibraryBPL::DebugPrintStrings(FString::Printf(TEXT("[BTT_InvokeGameplayAbility] Task was aborted, CancelAbility - %s"), *GameplayTag.GetValue(OwnerComp).ToString())); - } - } - } - - return Super::AbortTask(OwnerComp, NodeMemory); -} - -void UBTT_InvokeGameplayAbility::OnTaskFinished( - UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTNodeResult::Type TaskResult) -{ - FInvokeGameplayAbilityMemory* MyMemory = CastInstanceNodeMemory(NodeMemory); - check(MyMemory); - - if (TaskResult != EBTNodeResult::InProgress && MyMemory->AbilityEndHandle.IsValid()) - { - const AAIController* AIController = OwnerComp.GetAIOwner(); - if (IsValid(AIController)) - { - UAbilitySystemComponent* AbilityComponent = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(AIController->GetPawn()); - if (IsValid(AbilityComponent)) - { - AbilityComponent->OnAbilityEnded.Remove(MyMemory->AbilityEndHandle); - MyMemory->AbilityEndHandle.Reset(); - } - } - } -} - -void UBTT_InvokeGameplayAbility::InitializeMemory( - UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const -{ - FInvokeGameplayAbilityMemory* MyMemory = CastInstanceNodeMemory(NodeMemory); - check(MyMemory); - - MyMemory->AbilityEndHandle.Reset(); -} - -FString UBTT_InvokeGameplayAbility::GetStaticDescription() const -{ - return FString::Printf(TEXT("%s: \n%s"), *Super::GetStaticDescription(), !GameplayTag.ToString().IsEmpty() ? *GameplayTag.ToString() : TEXT("")); -} - -void UBTT_InvokeGameplayAbility::OnAbilityEnded( - const FAbilityEndedData& AbilityEndedData, UBehaviorTreeComponent* OwnerComp) -{ - // if not works check "AbilitySystemComponentTests.IsSameAbility" - if (!AbilityEndedData.AbilityThatEnded->GetAssetTags().HasAllExact(FGameplayTagContainer(GameplayTag.GetValue(OwnerComp)))) return; - - const EBTNodeResult::Type NodeResult(EBTNodeResult::Succeeded); - - const AAIController* AIController = OwnerComp->GetAIOwner(); - const AActor* BehaviorOwner = IsValid(AIController) ? AIController->GetPawn() : nullptr; - const AActor* AbilityOwner = AbilityEndedData.AbilityThatEnded->GetAvatarActorFromActorInfo(); - - if (AbilityOwner == BehaviorOwner) - { - const EBTNodeResult::Type CancelResult = bTreatCancelledAbilityAsSuccess.GetValue(OwnerComp) ? EBTNodeResult::Succeeded : EBTNodeResult::Failed; - const EBTNodeResult::Type TaskResult = AbilityEndedData.bWasCancelled ? CancelResult : EBTNodeResult::Succeeded; - FinishLatentTask(*OwnerComp, TaskResult); - } -} diff --git a/Source/UHLAI/Private/Tasks/BTT_PlayAnimMontage.cpp b/Source/UHLAI/Private/Tasks/BTT_PlayAnimMontage.cpp deleted file mode 100644 index 1a35d315..00000000 --- a/Source/UHLAI/Private/Tasks/BTT_PlayAnimMontage.cpp +++ /dev/null @@ -1,175 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/BTT_PlayAnimMontage.h" - -#include "AIController.h" -#include "Engine/World.h" -#include "TimerManager.h" -#include "Animation/AnimMontage.h" -#include "Components/SkeletalMeshComponent.h" -#include "GameFramework/Character.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTT_PlayAnimMontage) - -DEFINE_LOG_CATEGORY(LogBTT_PlayAnimMontage); - -UBTT_PlayAnimMontage::UBTT_PlayAnimMontage(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - NodeName = "PlayAnimMontage"; - // instantiating to be able to use Timers - bCreateNodeInstance = true; -} - -EBTNodeResult::Type UBTT_PlayAnimMontage::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - AIOwner = OwnerComp.GetAIOwner(); - ACharacter* Character = AIOwner.IsValid() ? AIOwner->GetCharacter() : nullptr; - - bool bPlayMontage = PlayMontage( - Character ? Character->GetMesh() : nullptr, - AnimMontage, - PlayRate, - StartingPosition, - StartSectionName - ); - - return bPlayMontage ? EBTNodeResult::InProgress : EBTNodeResult::Failed; -} - -EBTNodeResult::Type UBTT_PlayAnimMontage::AbortTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - ClearMontageDelegate(); - - if (StopMontageOnAbort && AIOwner.IsValid()) - { - if (ACharacter* Character = AIOwner->GetCharacter()) - { - Character->StopAnimMontage(); - } - } - return Super::AbortTask(OwnerComp, NodeMemory); -} - -void UBTT_PlayAnimMontage::OnTaskFinished(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory,EBTNodeResult::Type TaskResult) -{ - ClearMontageDelegate(); - Super::OnTaskFinished(OwnerComp, NodeMemory, TaskResult); -} - -FString UBTT_PlayAnimMontage::GetStaticDescription() const -{ - return FString::Printf( - TEXT( - "AnimMontage: %s\n" - "PlayRate: %f\n" - "StartingPosition: %f\n" - "StartSectionName: %s\n" - "StopMontageOnAbort: %s\n" - "TaskNodeEndPolicy: %s"), - AnimMontage ? *AnimMontage->GetName() : TEXT("None"), - PlayRate, - StartingPosition, - *StartSectionName.ToString(), - StopMontageOnAbort ? TEXT("True") : TEXT("False"), - TaskNodeEndPolicy == ETaskNodeEndPolicy::OnMontageEnded ? TEXT("OnMontageEnded") : TEXT("OnMontageBlendingOut") - ); -} - - -bool UBTT_PlayAnimMontage::PlayMontage(USkeletalMeshComponent* InSkeletalMeshComponent, UAnimMontage* MontageToPlay, - float InPlayRate, float InStartingPosition, FName InStartingSection) -{ - bool bPlayedSuccessfully = false; - - if (UAnimInstance* AnimInstance = InSkeletalMeshComponent ? InSkeletalMeshComponent->GetAnimInstance() : nullptr) - { - const float MontageLength = AnimInstance->Montage_Play(MontageToPlay, InPlayRate,EMontagePlayReturnType::MontageLength,InStartingPosition); - - bPlayedSuccessfully = (MontageLength > 0.f); - - if (bPlayedSuccessfully) - { - if (InStartingSection != NAME_None) - { - AnimInstance->Montage_JumpToSection(InStartingSection, MontageToPlay); - } - - /** - * If a callback is set within this Tick, the notification of the previous montage interrupted will be called! - * We need to consume a Tick to prevent the notification of the previous montage interrupted - * from triggering on the current launched montage - */ - GetWorld()->GetTimerManager().SetTimerForNextTick([&]() - { - ACharacter* Character = AIOwner.IsValid() ? AIOwner->GetCharacter() : nullptr; - USkeletalMeshComponent* MeshComponent = Character ? Character->GetMesh() : nullptr; - UAnimInstance* AnimIns = MeshComponent ? MeshComponent->GetAnimInstance() : nullptr; - if (AnimIns) - { - if (TaskNodeEndPolicy == ETaskNodeEndPolicy::OnMontageBlendingOut) - { - AnimIns->OnMontageBlendingOut.AddUniqueDynamic( - this, &UBTT_PlayAnimMontage::OnMontageBlendingOut); - } - else if (TaskNodeEndPolicy == ETaskNodeEndPolicy::OnMontageEnded) - { - AnimIns->OnMontageEnded.AddUniqueDynamic(this, &UBTT_PlayAnimMontage::OnMontageEnded); - } - } - }); - } - } - - return bPlayedSuccessfully; -} - - -void UBTT_PlayAnimMontage::OnMontageEnded(UAnimMontage* InAnimMontage, bool bInterrupted) -{ - if (InAnimMontage != AnimMontage) - { - return; - } - - FinishTaskNode(); -} - -void UBTT_PlayAnimMontage::OnMontageBlendingOut(UAnimMontage* InAnimMontage, bool bInterrupted) -{ - if (InAnimMontage != AnimMontage) - { - return; - } - - FinishTaskNode(); -} - -void UBTT_PlayAnimMontage::FinishTaskNode() -{ - UBehaviorTreeComponent* OwnerComp = AIOwner.IsValid()? Cast(AIOwner->BrainComponent): nullptr; - - ClearMontageDelegate(); - - if (OwnerComp) - { - FinishLatentTask(*OwnerComp, EBTNodeResult::Succeeded); - } -} - -void UBTT_PlayAnimMontage::ClearMontageDelegate() -{ - if (AIOwner.IsValid()) - { - ACharacter* Character = AIOwner->GetCharacter(); - USkeletalMeshComponent* MeshComponent = Character ? Character->GetMesh() : nullptr; - UAnimInstance* AnimInstance = MeshComponent ? MeshComponent->GetAnimInstance() : nullptr; - - if (AnimInstance) - { - AnimInstance->OnMontageEnded.RemoveAll(this); - AnimInstance->OnMontageBlendingOut.RemoveAll(this); - } - } -} diff --git a/Source/UHLAI/Private/Tasks/BTT_SetBBValue.cpp b/Source/UHLAI/Private/Tasks/BTT_SetBBValue.cpp deleted file mode 100644 index 5a02b1f8..00000000 --- a/Source/UHLAI/Private/Tasks/BTT_SetBBValue.cpp +++ /dev/null @@ -1,266 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/BTT_SetBBValue.h" - -#include "UHLAIBlueprintLibrary.h" -#include "BehaviorTree/BehaviorTree.h" -#include "Utils/UnrealHelperLibraryBPL.h" -#include "BehaviorTree/BlackboardComponent.h" -#include "BehaviorTree/BlackboardData.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Bool.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Class.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Enum.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Float.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Int.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Name.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_NativeEnum.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Object.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Rotator.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_String.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Vector.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTT_SetBBValue) - -UBTT_SetBBValue::UBTT_SetBBValue(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - ObjectValue.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTT_SetBBValue, ObjectValue), UObject::StaticClass()); -} - -EBTNodeResult::Type UBTT_SetBBValue::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - const UBlackboardData* BlackboardAsset = GetBlackboardAsset(); - UBlackboardComponent* BlackboardComponent = OwnerComp.GetBlackboardComponent(); - if (!BlackboardAsset) return EBTNodeResult::Failed; - - BlackboardKey.ResolveSelectedKey(*BlackboardAsset); - - const FBlackboardEntry* EntryInfo = BlackboardAsset ? BlackboardAsset->GetKey(BlackboardKey.GetSelectedKeyID()) : NULL; - - - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Bool::StaticClass()) - { - BlackboardComponent->SetValueAsBool(BlackboardKey.SelectedKeyName, BoolValue); - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Int::StaticClass()) - { - int32 CurrentValue = BlackboardComponent->GetValueAsInt(BlackboardKey.SelectedKeyName); - int32 Result = OperationOnBBValue.CalculateIntResult(OwnerComp, CurrentValue); - BlackboardComponent->SetValueAsInt(BlackboardKey.SelectedKeyName, Result); - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Float::StaticClass()) - { - float CurrentValue = BlackboardComponent->GetValueAsFloat(BlackboardKey.SelectedKeyName); - float Result = OperationOnBBValue.CalculateFloatResult(OwnerComp, CurrentValue); - BlackboardComponent->SetValueAsFloat(BlackboardKey.SelectedKeyName, Result); - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_String::StaticClass()) - { - BlackboardComponent->SetValueAsString(BlackboardKey.SelectedKeyName, StringValue); - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Name::StaticClass()) - { - BlackboardComponent->SetValueAsName(BlackboardKey.SelectedKeyName, NameValue); - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Vector::StaticClass()) - { - FVector CurrentValue = BlackboardComponent->GetValueAsVector(BlackboardKey.SelectedKeyName); - FVector Result = OperationOnBBValue.CalculateVectorResult(OwnerComp, CurrentValue); - BlackboardComponent->SetValueAsVector(BlackboardKey.SelectedKeyName, Result); - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Rotator::StaticClass()) - { - FRotator CurrentValue = BlackboardComponent->GetValueAsRotator(BlackboardKey.SelectedKeyName); - FRotator Result = OperationOnBBValue.CalculateRotatorResult(OwnerComp, CurrentValue); - BlackboardComponent->SetValueAsRotator(BlackboardKey.SelectedKeyName, Result); - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Enum::StaticClass()) - { - CurrentEnum = ((UBlackboardKeyType_Enum*)(EntryInfo->KeyType))->EnumType; - if (CurrentEnum) - { - BlackboardComponent->SetValueAsEnum(BlackboardKey.SelectedKeyName, CurrentEnum->GetValueByNameString(EnumStringValue)); - } - else - { - UUnrealHelperLibraryBPL::DebugPrintStrings("Enum from BB key ", BlackboardKey.SelectedKeyName.ToString(), "not found"); - } - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_NativeEnum::StaticClass()) - { - CurrentEnum = ((UBlackboardKeyType_NativeEnum*)(EntryInfo->KeyType))->EnumType; - if (CurrentEnum) - { - BlackboardComponent->SetValueAsEnum(BlackboardKey.SelectedKeyName, CurrentEnum->GetValueByNameString(EnumStringValue)); - } - else - { - UUnrealHelperLibraryBPL::DebugPrintStrings("Enum from BB key ", BlackboardKey.SelectedKeyName.ToString(), "not found"); - } - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Object::StaticClass()) - { - if (ObjectValue.NeedsResolving()) - { - ObjectValue.ResolveSelectedKey(*BlackboardAsset); - } - BlackboardComponent->SetValueAsObject(BlackboardKey.SelectedKeyName, BlackboardComponent->GetValueAsObject(ObjectValue.SelectedKeyName)); - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Class::StaticClass()) - { - BlackboardComponent->SetValueAsClass(BlackboardKey.SelectedKeyName, ClassValue); - } - - return Super::ExecuteTask(OwnerComp, NodeMemory); -} - -FString UBTT_SetBBValue::GetStaticDescription() const -{ - FString Description = FString(); - - switch (CurrentBBKeyValueType) - { - case EBlackboardValueType::Bool: - Description = FString::Printf(TEXT("Set \"%s\" to %s"), *BlackboardKey.SelectedKeyName.ToString(), BoolValue ? TEXT("true") : TEXT("false")); - break; - case EBlackboardValueType::Int: - Description = OperationOnBBValue.ToStringIntValue(BlackboardKey.SelectedKeyName.ToString()); - break; - case EBlackboardValueType::Float: - Description = OperationOnBBValue.ToStringFloatValue(BlackboardKey.SelectedKeyName.ToString()); - break; - case EBlackboardValueType::String: - Description = FString::Printf(TEXT("Set \"%s\" to %s"), *BlackboardKey.SelectedKeyName.ToString(), *StringValue); - break; - case EBlackboardValueType::Name: - Description = FString::Printf(TEXT("Set \"%s\" to %s"), *BlackboardKey.SelectedKeyName.ToString(), *NameValue.ToString()); - break; - case EBlackboardValueType::Vector: - Description = OperationOnBBValue.ToStringVectorValue(BlackboardKey.SelectedKeyName.ToString()); - break; - case EBlackboardValueType::Rotator: - Description = OperationOnBBValue.ToStringRotatorValue(BlackboardKey.SelectedKeyName.ToString()); - break; - case EBlackboardValueType::Enum: - Description = FString::Printf(TEXT("Set \"%s\" to %s"), *BlackboardKey.SelectedKeyName.ToString(), *EnumStringValue); - break; - case EBlackboardValueType::NativeEnum: - Description = FString::Printf(TEXT("Set \"%s\" to %s"), *BlackboardKey.SelectedKeyName.ToString(), *EnumStringValue); - break; - case EBlackboardValueType::Object: - Description = FString::Printf(TEXT("Set \"%s\" to %s"), *BlackboardKey.SelectedKeyName.ToString(), *ObjectValue.SelectedKeyName.ToString()); - break; - case EBlackboardValueType::Class: - Description = FString::Printf(TEXT("Set \"%s\" to %s"), *BlackboardKey.SelectedKeyName.ToString(), ClassValue ? *ClassValue->GetName() : TEXT("")); - break; - default: - break; - } - - // return FString::Printf(TEXT("%s: \n%s"), *Super::GetStaticDescription(), *Description); - return FString::Printf(TEXT("%s"), *Description); -} - -void UBTT_SetBBValue::InitializeFromAsset(UBehaviorTree& Asset) -{ - Super::InitializeFromAsset(Asset); - - BlackboardKey.ResolveSelectedKey(*Asset.BlackboardAsset); - - CurrentBBKeyValueType = UUHLAIBlueprintLibrary::BlackboardKeyToBBValueType(BlackboardKey); - OperationOnBBValue.SetCurrentBBKeyValueType(CurrentBBKeyValueType); -} - -void UBTT_SetBBValue::PostLoad() -{ - Super::PostLoad(); - - // migrate to FOperationOnBBValue - if (!bMigratedToMathOperation) - { - if (MathOperation != EUHL_MathOperations::None) - { - OperationOnBBValue.MathOperation = MathOperation; - MathOperation = EUHL_MathOperations::None; - } - if (IntValue != 0) - { - OperationOnBBValue.IntValue = IntValue; - IntValue = 0; - }; - if (FloatValue != 0) - { - OperationOnBBValue.FloatValue = FloatValue; - FloatValue = 0; - }; - if (VectorValue != FVector::ZeroVector) - { - OperationOnBBValue.VectorValue = VectorValue; - VectorValue = FVector::ZeroVector; - }; - if (RotatorValue != FRotator::ZeroRotator) - { - OperationOnBBValue.RotatorValue = RotatorValue; - RotatorValue = FRotator::ZeroRotator; - }; - - bMigratedToMathOperation = true; - } -} - -#if WITH_EDITOR -void UBTT_SetBBValue::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - const UBlackboardData* BlackboardAsset = GetBlackboardAsset(); - if (!BlackboardAsset) return; - - if (!BlackboardKey.IsSet()) return; - BlackboardKey.ResolveSelectedKey(*BlackboardAsset); - - CurrentBBKeyValueType = UUHLAIBlueprintLibrary::BlackboardKeyToBBValueType(BlackboardKey); - OperationOnBBValue.SetCurrentBBKeyValueType(CurrentBBKeyValueType); - - // if (CurrentBBKeyValueType == EBlackboardValueType::Int) - // { - // MathOperation = EUHL_MathOperations::Set; - // } -} -#endif - -TArray UBTT_SetBBValue::GetEnumOptions() -{ - TArray Result = {}; - - const UBlackboardData* BlackboardAsset = GetBlackboardAsset(); - if (!BlackboardAsset) return Result; - - BlackboardKey.ResolveSelectedKey(*BlackboardAsset); - const FBlackboardEntry* EntryInfo = BlackboardAsset ? BlackboardAsset->GetKey(BlackboardKey.GetSelectedKeyID()) : NULL; - - if (BlackboardKey.SelectedKeyType != UBlackboardKeyType_Enum::StaticClass() - || BlackboardKey.SelectedKeyType != UBlackboardKeyType_NativeEnum::StaticClass()) - { - return Result; - } - - if (!EntryInfo) return Result; - - const UEnum* Enum = (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Enum::StaticClass()) - ? ((UBlackboardKeyType_Enum*)(EntryInfo->KeyType))->EnumType - : ((UBlackboardKeyType_NativeEnum*)(EntryInfo->KeyType))->EnumType; - - if (!Enum || !Enum->IsValidLowLevel()) - { - return Result; - } - - for (int32 i = 0; i < Enum->NumEnums(); i++) - { - Result.Add(Enum->GetNameByIndex(i).ToString()); - } - - return Result; -} diff --git a/Source/UHLAI/Private/Tasks/BTT_TurnTo.cpp b/Source/UHLAI/Private/Tasks/BTT_TurnTo.cpp deleted file mode 100644 index 90f5e546..00000000 --- a/Source/UHLAI/Private/Tasks/BTT_TurnTo.cpp +++ /dev/null @@ -1,364 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/BTT_TurnTo.h" - -#include "AIController.h" -#include "BehaviorTree/BlackboardComponent.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Object.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Rotator.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Vector.h" -#include "GameFramework/Actor.h" -#include "GameFramework/Character.h" -#include "Animation/AnimMontage.h" -#include "DrawDebugHelpers.h" -#include "Core/UHLAIActorSettings.h" -#include "Utils/UnrealHelperLibraryBPL.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(BTT_TurnTo) - -void UBTT_TurnTo::SetupPreset_Default_90_180() -{ - TurnSettings.SetupPreset_Default_90_180(); -} - -void UBTT_TurnTo::SetupPreset_BigEnemy_90_180() -{ - TurnSettings.SetupPreset_BigEnemy_90_180(); -} - -void UBTT_TurnTo::SetupPreset_45_90_180() -{ - TurnSettings.SetupPreset_45_90_180(); -} - -void UBTT_TurnTo::SetupPreset_15_45_90_180() -{ - TurnSettings.SetupPreset_15_45_90_180(); -} - -void UBTT_TurnTo::SetupPreset_15_30_45_90_180() -{ - TurnSettings.SetupPreset_15_30_45_90_180(); -} - -void UBTT_TurnTo::Cleanup() -{ - TurnSettings.Cleanup(); -} - -UBTT_TurnTo::UBTT_TurnTo(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) - , Precision(10.f) -{ - NodeName = "TurnTo"; - INIT_TASK_NODE_NOTIFY_FLAGS(); - - // accept only actors and vectors - BlackboardKey.AddObjectFilter(this, GET_MEMBER_NAME_CHECKED(UBTT_TurnTo, BlackboardKey), AActor::StaticClass()); - // TODO add support for Vectors/Rotators - BlackboardKey.AddVectorFilter(this, GET_MEMBER_NAME_CHECKED(UBTT_TurnTo, BlackboardKey)); - // BlackboardKey.AddRotatorFilter(this, GET_MEMBER_NAME_CHECKED(UBTT_TurnTo, BlackboardKey)); -} - -void UBTT_TurnTo::PostInitProperties() -{ - Super::PostInitProperties(); - - PrecisionDot = FMath::Cos(FMath::DegreesToRadians(Precision)); -} - -void UBTT_TurnTo::PostLoad() -{ - Super::PostLoad(); - - PrecisionDot = FMath::Cos(FMath::DegreesToRadians(Precision)); -} - -EBTNodeResult::Type UBTT_TurnTo::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - AAIController* AIController = OwnerComp.GetAIOwner(); - - if (AIController == NULL || AIController->GetPawn() == NULL) - { - return EBTNodeResult::Failed; - } - - FBTTurnToMemory* MyMemory = CastInstanceNodeMemory(NodeMemory); - check(MyMemory); - MyMemory->Reset(); - - EBTNodeResult::Type Result = EBTNodeResult::Failed; - - APawn* Pawn = AIController->GetPawn(); - - const FVector PawnLocation = Pawn->GetActorLocation(); - const UBlackboardComponent* MyBlackboard = OwnerComp.GetBlackboardComponent(); - - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Object::StaticClass()) - { - UObject* KeyValue = MyBlackboard->GetValue(BlackboardKey.GetSelectedKeyID()); - AActor* ActorValue = Cast(KeyValue); - - if (ActorValue != NULL) - { - const FVector::FReal AngleDifference = TurnToStatics::CalculateAngleDifferenceDot(Pawn->GetActorForwardVector() - , (ActorValue->GetActorLocation() - PawnLocation)); - - if (AngleDifference >= PrecisionDot) - { - Result = EBTNodeResult::Succeeded; - } - else - { - AIController->SetFocus(ActorValue, EAIFocusPriority::Gameplay); - MyMemory->FocusActorSet = ActorValue; - MyMemory->bActorSet = true; - if (Pawn->GetClass()->ImplementsInterface(UUHLAIActorSettings::StaticClass())) - { - MyMemory->TurnSettings = GetTurnSettings(Pawn, MyMemory->bCurrentTurnSettingsSet); - } - Result = EBTNodeResult::InProgress; - } - } - } - // TODO add support for Vectors/Rotators - else if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Vector::StaticClass()) - { - const FVector KeyValue = MyBlackboard->GetValue(BlackboardKey.GetSelectedKeyID()); - - if (FAISystem::IsValidLocation(KeyValue)) - { - const FVector::FReal AngleDifference = TurnToStatics::CalculateAngleDifferenceDot(Pawn->GetActorForwardVector() - , (KeyValue - PawnLocation)); - - if (AngleDifference >= PrecisionDot) - { - Result = EBTNodeResult::Succeeded; - } - else - { - AIController->SetFocalPoint(KeyValue, EAIFocusPriority::Gameplay); - MyMemory->FocusLocationSet = KeyValue; - MyMemory->bActorSet = false; - if (Pawn->GetClass()->ImplementsInterface(UUHLAIActorSettings::StaticClass())) - { - MyMemory->TurnSettings = GetTurnSettings(Pawn, MyMemory->bCurrentTurnSettingsSet); - } - Result = EBTNodeResult::InProgress; - } - } - } - // else if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Rotator::StaticClass()) - // { - // const FRotator KeyValue = MyBlackboard->GetValue(BlackboardKey.GetSelectedKeyID()); - // - // if (FAISystem::IsValidRotation(KeyValue)) - // { - // const FVector DirectionVector = KeyValue.Vector(); - // const FVector::FReal AngleDifference = CalculateAngleDifferenceDot(Pawn->GetActorForwardVector(), DirectionVector); - // - // if (AngleDifference >= PrecisionDot) - // { - // Result = EBTNodeResult::Succeeded; - // } - // else - // { - // const FVector FocalPoint = PawnLocation + DirectionVector * 10000.0f; - // // set focal somewhere far in the indicated direction - // AIController->SetFocalPoint(FocalPoint, EAIFocusPriority::Gameplay); - // MyMemory->FocusLocationSet = FocalPoint; - // Result = EBTNodeResult::InProgress; - // } - // } - // } - - return Result; -} - -void UBTT_TurnTo::TickTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) -{ - AAIController* AIController = OwnerComp.GetAIOwner(); - - FBTTurnToMemory* MyMemory = CastInstanceNodeMemory(NodeMemory); - check(MyMemory); - - if (AIController == NULL || AIController->GetPawn() == NULL) - { - FinishLatentTask(OwnerComp, EBTNodeResult::Failed); - } - else - { - const FVector PawnDirection = AIController->GetPawn()->GetActorForwardVector(); - const FVector FocalPoint = AIController->GetFocalPointForPriority(EAIFocusPriority::Gameplay); - ACharacter* AICharacter = AIController->GetCharacter(); - - if (FocalPoint != FAISystem::InvalidLocation) - { - float DeltaAngleRad = TurnToStatics::CalculateAngleDifferenceDot(PawnDirection, FocalPoint - AIController->GetPawn()->GetActorLocation()); - // float DeltaAngle = FMath::RadiansToDegrees(FMath::Acos(DeltaAngleRad)); - float DeltaAngle = MyMemory->bActorSet - ? UUnrealHelperLibraryBPL::RelativeAngleToActor(AICharacter, MyMemory->FocusActorSet) - : UUnrealHelperLibraryBPL::RelativeAngleToVector(AICharacter, MyMemory->FocusLocationSet); - UUnrealHelperLibraryBPL::DebugPrintStrings(FString::Printf(TEXT("DeltaAngle %f"), DeltaAngle), "", "", "", "", "", "", "", "", "", -1, FName("Test")); - - if (bDebug) - { - FVector CurrentLocation = MyMemory->bActorSet - ? MyMemory->FocusActorSet->GetActorLocation() - : MyMemory->FocusLocationSet; - DrawDebugSphere(AIController->GetWorld(), CurrentLocation, - 50.0f, 12, FColor::Blue, false, -1); - } - - if (DeltaAngleRad >= PrecisionDot) - { - UUnrealHelperLibraryBPL::DebugPrintStrings(FString::Printf(TEXT("TurnRange->bOverrideStopMontageOnGoalReached %hhd"), MyMemory->CurrentTurnRange.bOverrideStopMontageOnGoalReached)); - bool bCanStopMontage = false; - if (MyMemory->CurrentTurnRange.bOverrideStopMontageOnGoalReached) - { - bCanStopMontage = MyMemory->CurrentTurnRange.bStopMontageOnGoalReached; - } - else - { - bCanStopMontage = MyMemory->TurnSettings.bStopMontageOnGoalReached; - } - - if (MyMemory && bCanStopMontage) - { - AICharacter->StopAnimMontage(); - CleanUp(*AIController, NodeMemory); - FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); - } - else - { - CleanUp(*AIController, NodeMemory); - FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); - } - } - else - { - if (TurnToStatics::IsTurnWithAnimationRequired(AICharacter)) - { - MyMemory->CurrentTurnRange = TurnToStatics::GetTurnRange(DeltaAngle, MyMemory->bCurrentTurnRangeSet, MyMemory->TurnSettings); - if (MyMemory->bCurrentTurnRangeSet && MyMemory->CurrentTurnRange.AnimMontage) - { - AICharacter->PlayAnimMontage(MyMemory->CurrentTurnRange.AnimMontage); - } - - // TODO тут ошибка? - // finish if no turn animation found and "bTurnOnlyWithAnims" - if (!MyMemory->bCurrentTurnRangeSet && MyMemory->TurnSettings.bTurnOnlyWithAnims) - { - CleanUp(*AIController, NodeMemory); - FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); - } - } - } - } - else - { - CleanUp(*AIController, NodeMemory); - FinishLatentTask(OwnerComp, EBTNodeResult::Failed); - } - } -} - -void UBTT_TurnTo::CleanUp(AAIController& AIController, uint8* NodeMemory) -{ - FBTTurnToMemory* MyMemory = (FBTTurnToMemory*)NodeMemory; - check(MyMemory); - - bool bClearFocus = false; - if (MyMemory->bActorSet) - { - bClearFocus = (MyMemory->FocusActorSet == AIController.GetFocusActorForPriority(EAIFocusPriority::Gameplay)); - } - else - { - bClearFocus = (MyMemory->FocusLocationSet == AIController.GetFocalPointForPriority(EAIFocusPriority::Gameplay)); - } - - if (bClearFocus) - { - AIController.ClearFocus(EAIFocusPriority::Gameplay); - } -} - -FTurnSettings UBTT_TurnTo::GetTurnSettings(AActor* Actor, bool& bCurrentTurnSettingsSet) -{ - FTurnSettings Result; - bCurrentTurnSettingsSet = false; - if (SettingsSource == EUHLSettingsSource::Actor) - { - Result = IUHLAIActorSettings::Execute_GetTurnSettings(Actor); - bCurrentTurnSettingsSet = true; - } - if (SettingsSource == EUHLSettingsSource::DataAsset) - { - Result = RotateToAnimationsDataAsset->TurnSettings; - bCurrentTurnSettingsSet = true; - } - if (SettingsSource == EUHLSettingsSource::Node) - { - Result = TurnSettings; - bCurrentTurnSettingsSet = true; - } - return Result; -} - -EBTNodeResult::Type UBTT_TurnTo::AbortTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) -{ - AAIController* AIController = OwnerComp.GetAIOwner(); - - if (AIController != NULL) - { - CleanUp(*AIController, NodeMemory); - } - - return EBTNodeResult::Aborted; -} - -void UBTT_TurnTo::DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const -{ - FString KeyDesc = BlackboardKey.SelectedKeyName.ToString(); - Values.Add(FString::Printf(TEXT("%s: %s"), *Super::GetStaticDescription(), *KeyDesc)); - - AAIController* AIController = OwnerComp.GetAIOwner(); - - if (AIController != NULL && AIController->GetPawn() != NULL) - { - const FVector PawnDirection = AIController->GetPawn()->GetActorForwardVector(); - const FVector FocalPoint = AIController->GetFocalPointForPriority(EAIFocusPriority::Gameplay); - - if (FocalPoint != FAISystem::InvalidLocation) - { - const FVector::FReal CurrentAngleRadians = TurnToStatics::CalculateAngleDifferenceDot(PawnDirection, (FocalPoint - AIController->GetPawn()->GetActorLocation())); - Values.Add(FString::Printf(TEXT("Current angle: %.2f"), FMath::RadiansToDegrees(FMath::Acos(CurrentAngleRadians)))); - } - else - { - Values.Add(TEXT("FocalPoint is an Invalid Location")); - } - } - else - { - Values.Add(TEXT("Controller or Pawn is NULL")); - } -} - -FString UBTT_TurnTo::GetStaticDescription() const -{ - FString KeyDesc = BlackboardKey.SelectedKeyName.ToString(); - return FString::Printf(TEXT("%s: %s"), *Super::GetStaticDescription(), *KeyDesc); -} - -void UBTT_TurnTo::InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const -{ - InitializeNodeMemory(NodeMemory, InitType); -} - -void UBTT_TurnTo::CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const -{ - CleanupNodeMemory(NodeMemory, CleanupType); -} diff --git a/Source/UHLAI/Private/UHLAI.cpp b/Source/UHLAI/Private/UHLAI.cpp deleted file mode 100644 index b0ba6de1..00000000 --- a/Source/UHLAI/Private/UHLAI.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLAI.h" - -#include "Misc/Paths.h" - -#define LOCTEXT_NAMESPACE "FUHLAIModule" - - -void FUHLAIModule::StartupModule() -{ -} - -void FUHLAIModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLAIModule, UHLAI) diff --git a/Source/UHLAI/Private/UHLAIBlueprintLibrary.cpp b/Source/UHLAI/Private/UHLAIBlueprintLibrary.cpp deleted file mode 100644 index 4e9f5a8e..00000000 --- a/Source/UHLAI/Private/UHLAIBlueprintLibrary.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLAIBlueprintLibrary.h" - -#include "BehaviorTree/Blackboard/BlackboardKeyType_Bool.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Class.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Enum.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Float.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Int.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Name.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_NativeEnum.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Object.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Rotator.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_String.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Vector.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLAIBlueprintLibrary) - - -EBlackboardValueType UUHLAIBlueprintLibrary::BlackboardKeyToBBValueType(FBlackboardKeySelector BlackboardKey) -{ - EBlackboardValueType Result = EBlackboardValueType::None; - - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Bool::StaticClass()) - { - Result = EBlackboardValueType::Bool; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Int::StaticClass()) - { - Result = EBlackboardValueType::Int; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Float::StaticClass()) - { - Result = EBlackboardValueType::Float; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_String::StaticClass()) - { - Result = EBlackboardValueType::String; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Name::StaticClass()) - { - Result = EBlackboardValueType::Name; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Vector::StaticClass()) - { - Result = EBlackboardValueType::Vector; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Rotator::StaticClass()) - { - Result = EBlackboardValueType::Rotator; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Enum::StaticClass()) - { - Result = EBlackboardValueType::Enum; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_NativeEnum::StaticClass()) - { - Result = EBlackboardValueType::NativeEnum; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Object::StaticClass()) - { - Result = EBlackboardValueType::Object; - } - if (BlackboardKey.SelectedKeyType == UBlackboardKeyType_Class::StaticClass()) - { - Result = EBlackboardValueType::Class; - } - - return Result; -} \ No newline at end of file diff --git a/Source/UHLAI/Private/UHLAIBlueprintLibrary.h b/Source/UHLAI/Private/UHLAIBlueprintLibrary.h deleted file mode 100644 index 3961138b..00000000 --- a/Source/UHLAI/Private/UHLAIBlueprintLibrary.h +++ /dev/null @@ -1,36 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Core/UHLBlackboardValueType.h" -#include "Kismet/BlueprintFunctionLibrary.h" -#include "UHLAIBlueprintLibrary.generated.h" - -class UWidget; -struct FBlackboardKeySelector; - -/* - * Function library class. - * Each function in it is expected to be static and represents blueprint node that can be called in any blueprint. - * - * When declaring function you can define metadata for the node. Key function specifiers will be BlueprintPure and BlueprintCallable. - * BlueprintPure - means the function does not affect the owning object in any way and thus creates a node without Exec pins. - * BlueprintCallable - makes a function which can be executed in Blueprints - Thus it has Exec pins. - * DisplayName - full name of the node, shown when you mouse over the node and in the blueprint drop down menu. - * Its lets you name the node using characters not allowed in C++ function names. - * CompactNodeTitle - the word(s) that appear on the node. - * Keywords - the list of keywords that helps you to find node when you search for it using Blueprint drop-down menu. - * Good example is "Print String" node which you can find also by using keyword "log". - * Category - the category your node will be under in the Blueprint drop-down menu. - * - * For more info on custom blueprint nodes visit documentation: - * https://wiki.unrealengine.com/Custom_Blueprint_Node_Creation - */ -UCLASS() -class UHLAI_API UUHLAIBlueprintLibrary : public UBlueprintFunctionLibrary -{ - GENERATED_BODY() - -public: - static EBlackboardValueType BlackboardKeyToBBValueType(FBlackboardKeySelector BlackboardKey); -}; diff --git a/Source/UHLAI/Private/UHLValueOrBBKey_GameplayTag.cpp b/Source/UHLAI/Private/UHLValueOrBBKey_GameplayTag.cpp deleted file mode 100644 index c7b59de3..00000000 --- a/Source/UHLAI/Private/UHLValueOrBBKey_GameplayTag.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UHLValueOrBBKey_GameplayTag.h" - -#include "GameplayTagContainer.h" -#include "BehaviorTree/ValueOrBBKey.h" -#include "BehaviorTree/Blackboard/BlackboardKeyType_Name.h" -#include "Utils/UnrealHelperLibraryBPL.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLValueOrBBKey_GameplayTag) - -FGameplayTag FUHLValueOrBBKey_GameplayTag::GetValue(const UBlackboardComponent& Blackboard) const -{ - FName TagName = FBlackboard::GetValue(Blackboard, Key, KeyId, DefaultValue.GetTagName()); - FGameplayTag FoundGameplayTag = FGameplayTag::RequestGameplayTag(TagName, false); - if (!FoundGameplayTag.IsValid()) - { - UUnrealHelperLibraryBPL::DebugPrintString(Blackboard.GetWorld(), - FString::Printf(TEXT("FUHLValueOrBBKey_GameplayTag::GetValue GameplayTag %s not found"), *Key.ToString()) - ); - return DefaultValue; - } - return FoundGameplayTag; -} - -FGameplayTag FUHLValueOrBBKey_GameplayTag::GetValue(const UBlackboardComponent* Blackboard) const -{ - return Blackboard ? GetValue(*Blackboard) : DefaultValue; -} - -FGameplayTag FUHLValueOrBBKey_GameplayTag::GetValue(const UBehaviorTreeComponent& BehaviorComp) const -{ - FName TagName = FBlackboard::GetValue(BehaviorComp, Key, KeyId, DefaultValue.GetTagName()); - FGameplayTag FoundGameplayTag = FGameplayTag::RequestGameplayTag(TagName, false); - if (!FoundGameplayTag.IsValid()) - { - UUnrealHelperLibraryBPL::DebugPrintString(BehaviorComp.GetWorld(), - FString::Printf(TEXT("FUHLValueOrBBKey_GameplayTag::GetValue GameplayTag %s not found"), *Key.ToString()) - ); - return DefaultValue; - } - return FoundGameplayTag; -} - -FGameplayTag FUHLValueOrBBKey_GameplayTag::GetValue(const UBehaviorTreeComponent* BehaviorComp) const -{ - return BehaviorComp ? GetValue(*BehaviorComp) : DefaultValue; -} - -bool FUHLValueOrBBKey_GameplayTag::SerializeFromMismatchedTag( - const FPropertyTag& Tag, FStructuredArchive::FSlot Slot) -{ - if (Tag.Type == NAME_StructProperty && Tag.GetType().IsStruct(FGameplayTag::StaticStruct()->GetFName())) - { - FGameplayTag TempTag; - FGameplayTag::StaticStruct()->SerializeItem(Slot, &TempTag, nullptr); - // Slot << TempTag; // Deserialize the data as an FGameplayTag - DefaultValue = TempTag; // Store it in a compatible property - return true; - } - return false; -} - -#if WITH_EDITOR -bool FUHLValueOrBBKey_GameplayTag::IsCompatibleType(const UBlackboardKeyType* KeyType) const -{ - return KeyType && KeyType->GetClass() == UBlackboardKeyType_Name::StaticClass(); -} -#endif - -FString FUHLValueOrBBKey_GameplayTag::ToString() const -{ - if (!Key.IsNone()) - { - return ToStringKeyName(); - } - else - { - return DefaultValue.GetTagName().ToString(); - } -} diff --git a/Source/UHLAI/Public/Components/UHLAIPerceptionComponent.h b/Source/UHLAI/Public/Components/UHLAIPerceptionComponent.h deleted file mode 100644 index 699323f3..00000000 --- a/Source/UHLAI/Public/Components/UHLAIPerceptionComponent.h +++ /dev/null @@ -1,24 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Perception/AIPerceptionComponent.h" -#include "UHLAIPerceptionComponent.generated.h" - -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSightStimulusExpired, const FAIStimulus&, StimulusStore); - -/** - * - */ -UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) -class UHLAI_API UUHLAIPerceptionComponent : public UAIPerceptionComponent -{ - GENERATED_BODY() - -public: - virtual void HandleExpiredStimulus(FAIStimulus& StimulusStore) override; - - UPROPERTY(BlueprintAssignable, Category="UHL AIPerceptionComponent") - FOnSightStimulusExpired OnSightStimulusExpired; -}; diff --git a/Source/UHLAI/Public/Composite/BTC_RandomSelector.h b/Source/UHLAI/Public/Composite/BTC_RandomSelector.h deleted file mode 100644 index b821f195..00000000 --- a/Source/UHLAI/Public/Composite/BTC_RandomSelector.h +++ /dev/null @@ -1,65 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UObject/ObjectMacros.h" -#include "BehaviorTree/BTCompositeNode.h" -#include "BehaviorTree/BehaviorTreeTypes.h" -#include "Misc/EngineVersionComparison.h" -#include "BTC_RandomSelector.generated.h" - -class UBehaviorTreeComponent; - -// Should nest from "FBTCompositeMemory" or build error fail on FAB servers -// struct FBTRandomSelectorMemory : public FBTCompositeMemory -// { -// }; - -/** - * RandomSelector composite node. - * RandomSelector random between child nodes using chances, and will stop executing its children when one of their children succeeds. - * If a Selector's child succeeds, the Selector succeeds. If all the Selector's children fail, the Selector fails. - * P.S. space for improvement - memory, but not sure that its required, - * just random until we get valid node is seems looks like is enough - * https://www.youtube.com/watch?v=wI_kwwvc-pw&t=781s&ab_channel=VeryHotShark - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTC_RandomSelector : public UBTCompositeNode -{ - GENERATED_BODY() - -public: - UBTC_RandomSelector(const FObjectInitializer& ObjectInitializer); - - // TODO validate that chances count == ChildrenNum - // if no chance specified, node without chance will win always - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="RandomSelector", meta=(ForceUnits="Multiplier")) - TArray ChancesArray = { 0.5f, 0.5f }; - - UFUNCTION(BlueprintCallable, CallInEditor, Category="RandomSelector") - void RemoveUnusedChances(); - -protected: - virtual int32 GetNextChildHandler(struct FBehaviorTreeSearchData& SearchData, int32 PrevChild, EBTNodeResult::Type LastResult) const override; - virtual FString GetStaticDescription() const override; - -#if WITH_EDITOR - virtual FName GetNodeIconName() const override; -#endif - -#if UE_VERSION_NEWER_THAN(5, 4, 0) - // 5.4.0 and up only code - virtual void InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const override; - virtual void CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const override; -#endif - -private: - UFUNCTION() - bool IsValidSelector() const { return GetChildrenNum() > 1 && GetChildrenNum() <= ChancesArray.Num(); }; - UFUNCTION() - FString GetErrorOrWarning() const; - UFUNCTION() - int32 GetRandomChildIdx() const; - -}; diff --git a/Source/UHLAI/Public/Core/UHLAIActorSettings.h b/Source/UHLAI/Public/Core/UHLAIActorSettings.h deleted file mode 100644 index 6e1e8929..00000000 --- a/Source/UHLAI/Public/Core/UHLAIActorSettings.h +++ /dev/null @@ -1,31 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Data/TurnSettings.h" -#include "UObject/Interface.h" -#include "UHLAIActorSettings.generated.h" - -// This class does not need to be modified. -UINTERFACE(MinimalAPI) -class UUHLAIActorSettings : public UInterface -{ - GENERATED_BODY() -}; - -/** - * - */ -class UHLAI_API IUHLAIActorSettings -{ - GENERATED_BODY() - - // Add interface functions to this class. This is the class that will be inherited to implement this interface. -public: - -/** IUHLActorSettings */ - UFUNCTION(Category="UHLActorSettings", BlueprintCallable, BlueprintNativeEvent) - FTurnSettings GetTurnSettings() const; -/** ~IUHLActorSettings */ -}; diff --git a/Source/UHLAI/Public/Core/UHLAIDebugSettings.h b/Source/UHLAI/Public/Core/UHLAIDebugSettings.h deleted file mode 100644 index eda9c18e..00000000 --- a/Source/UHLAI/Public/Core/UHLAIDebugSettings.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once -#include "BehaviorTree/ValueOrBBKey.h" - -#include "UHLAIDebugSettings.generated.h" - -// struct for easier creating BBValue + BBValue math operations -USTRUCT(BlueprintType) -struct FUHLAIDebugSettings -{ - GENERATED_BODY() - - UPROPERTY(Category="Decorator", EditAnywhere) - bool bEnableDebug = false; - - UPROPERTY(Category="Decorator", EditAnywhere) - FValueOrBBKey_Float DrawDebugTime = 2.0f; - - UPROPERTY(Category="Decorator", EditAnywhere) - FColor Color = FLinearColor(0, 0.66, 1).ToFColor(true); -}; diff --git a/Source/UHLAI/Public/Core/UHLBlackboardValueType.h b/Source/UHLAI/Public/Core/UHLBlackboardValueType.h deleted file mode 100644 index 4690a567..00000000 --- a/Source/UHLAI/Public/Core/UHLBlackboardValueType.h +++ /dev/null @@ -1,23 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#pragma once - -#include "UHLBlackboardValueType.generated.h" - -UENUM() -enum class EBlackboardValueType -{ - None, - Bool, - Int, - Float, - String, - Name, - Vector, - Rotator, - Enum, - NativeEnum, - Object, - Class, -}; \ No newline at end of file diff --git a/Source/UHLAI/Public/Core/UHLMathOperations.h b/Source/UHLAI/Public/Core/UHLMathOperations.h deleted file mode 100644 index c8c96f74..00000000 --- a/Source/UHLAI/Public/Core/UHLMathOperations.h +++ /dev/null @@ -1,64 +0,0 @@ -#pragma once - -#include "UHLBlackboardValueType.h" -#include "BehaviorTree/BehaviorTreeTypes.h" -#include "BehaviorTree/ValueOrBBKey.h" -#include "UHLMathOperations.generated.h" - -UENUM(BlueprintType) -enum class EUHL_MathOperations : uint8 -{ - None UMETA(Hidden), - Set, - Add, - Multiply, - Divide, -}; - -// struct for easier creating BBValue + BBValue math operations -USTRUCT(BlueprintType) -struct FOperationOnBBValue -{ - GENERATED_BODY() - - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Int || CurrentBBKeyValueType==EBlackboardValueType::Float", EditConditionHides)) - EUHL_MathOperations MathOperation = EUHL_MathOperations::Set; - - /** Values */ - // UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Bool", EditConditionHides)) - // bool BoolValue; - - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Int", EditConditionHides)) - FValueOrBBKey_Int32 IntValue; - - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Float", EditConditionHides)) - FValueOrBBKey_Float FloatValue; - - // UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::String", EditConditionHides, MultiLine)) - // FString StringValue; - // UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Name", EditConditionHides, MultiLine)) - // FName NameValue; - - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Vector", EditConditionHides)) - FValueOrBBKey_Vector VectorValue; - - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Rotator", EditConditionHides)) - FValueOrBBKey_Rotator RotatorValue; - /** ~Values */ - - void SetCurrentBBKeyValueType(EBlackboardValueType CurrentBBKeyValueType_In); - - int32 CalculateIntResult(UBehaviorTreeComponent& OwnerComp, int32 CurrentValue) const; - float CalculateFloatResult(UBehaviorTreeComponent& OwnerComp, float CurrentValue) const; - FVector CalculateVectorResult(UBehaviorTreeComponent& OwnerComp, FVector CurrentValue) const; - FRotator CalculateRotatorResult(UBehaviorTreeComponent& OwnerComp, FRotator CurrentValue) const; - - FString ToStringIntValue(FString KeyName) const; - FString ToStringFloatValue(FString KeyName) const; - FString ToStringVectorValue(FString KeyName) const; - FString ToStringRotatorValue(FString KeyName) const; - -private: - UPROPERTY() - EBlackboardValueType CurrentBBKeyValueType = EBlackboardValueType::None; -}; diff --git a/Source/UHLAI/Public/Data/TurnSettings.h b/Source/UHLAI/Public/Data/TurnSettings.h deleted file mode 100644 index 8646ed9d..00000000 --- a/Source/UHLAI/Public/Data/TurnSettings.h +++ /dev/null @@ -1,110 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Engine/DataAsset.h" -#include "TurnSettings.generated.h" - -class UAnimMontage; - -USTRUCT(Blueprintable) -struct FTurnRange -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnRange") - FString Name; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnRange") - FFloatRange Range = FFloatRange(-135, -45); - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnRange") - UAnimMontage* AnimMontage = nullptr; - // useful in big enemies cases, Dragon shouldn't cancel 180deg rotate animation - // even if Player somehow teleported - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnRange") - bool bOverrideStopMontageOnGoalReached = false; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnRange", meta=(EditCondition="bOverrideStopMontageOnGoalReached", EditConditionHides)) - bool bStopMontageOnGoalReached = false; -}; - -USTRUCT(Blueprintable) -struct FTurnRanges -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnRanges") - TArray TurnRanges; -}; - - -/** - * - */ -// TODO make warning that not all ranges are covered -// TODO limit TurnAnimations count e.g. max 3 times, then give choice what to do - abort or success? -// TODO limit playing similar animations count e.g. max 3 times ?? and then give choice what to do - abort or success? -// TIPS -// - ranges can overlap, in such cases animation will be fired by order, so order is important -USTRUCT(Blueprintable) -struct FTurnSettings -{ - GENERATED_BODY() - -public: - UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="TurnSettings", meta=(EditCondition="true", MultiLine)) - FString Notes = FString(TEXT( - "Use cases:" - "\n\n1) Big enemy (dragon, etc.) - better to use with \"bTurnOnlyWithAnims\", \"bStopMontageOnGoalReached\" and \"Precision = 1°\", BlendOut settings in AnimMontage becomes critcal for smooth visual ~0.5s blendout + inertionalization recommended" - "\n\n2) Medium enemy (human size) - disable bTurnOnlyWithAnims nobody will mention that medium enemy rotates in place without anim" - "\n\nTips: " - "\n- ranges can overlap, in such cases animation will be fired by order, so order is important" - )); - - // if enabled - turn only with animations, if no ranges fits - consider it as success - // if disabled - turn also with rotating enemy in place - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnSettings") - bool bTurnOnlyWithAnims = true; - // stops AnimMontage when reached goal, even if 180deg turn animation on half of playing - stop it - // BlendOut settings for this option is critical - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnSettings") - bool bStopMontageOnGoalReached = true; - // TODO bChooseClosestInRaceCondition? если подходят 2 ренджа, в чью пользу принимать решение, зач если есть order TurnRange'ей - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnSettings", meta=(ForceInlineRow)) - TMap TurnRangesGroups; - - void Cleanup(); - void SetupPreset_Default_90_180(); - void SetupPreset_BigEnemy_90_180(); - void SetupPreset_45_90_180(); - void SetupPreset_15_45_90_180(); - void SetupPreset_15_30_45_90_180(); -}; - - -UCLASS(Blueprintable) -class UHLAI_API UTurnSettingsDataAsset : public UPrimaryDataAsset -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnSettings") - FTurnSettings TurnSettings; - - // Prefers to rotate 180deg if relative angle >115deg, suits for all medium mobs(human size) - UFUNCTION(BlueprintCallable, Category="Setup", CallInEditor, meta=(EditCondition="bUseTurnAnimations && !bUseTurnSettingsDataAsset", EditConditionHides, DisplayPriority=1)) - void SetupPreset_Default_90_180(); - // All ranges have same proportion - UFUNCTION(BlueprintCallable, Category="Setup", CallInEditor, meta=(EditCondition="bUseTurnAnimations && !bUseTurnSettingsDataAsset", EditConditionHides, DisplayPriority=1)) - void SetupPreset_BigEnemy_90_180(); - UFUNCTION(BlueprintCallable, CallInEditor, Category="Setup", meta = (DisplayPriority=2)) - void SetupPreset_45_90_180(); - UFUNCTION(BlueprintCallable, CallInEditor, Category="Setup", meta = (DisplayPriority=3)) - void SetupPreset_15_45_90_180(); - UFUNCTION(BlueprintCallable, CallInEditor, Category="Setup", meta = (DisplayPriority=4)) - void SetupPreset_15_30_45_90_180(); - UFUNCTION(BlueprintCallable, CallInEditor, Category="Setup", meta = (DisplayPriority=5)) - void Cleanup(); -}; diff --git a/Source/UHLAI/Public/Decorators/BTD_Base.h b/Source/UHLAI/Public/Decorators/BTD_Base.h deleted file mode 100644 index 49ab6301..00000000 --- a/Source/UHLAI/Public/Decorators/BTD_Base.h +++ /dev/null @@ -1,61 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/BehaviorTreeTypes.h" -#include "BehaviorTree/BTDecorator.h" -#include "BTD_Base.generated.h" - -/** - * Used to add abort functionality to BTDecorators - */ -UCLASS(Category = "UnrealHelperLibrary", Abstract) -class UHLAI_API UBTD_Base : public UBTDecorator -{ - GENERATED_BODY() - -public: - UBTD_Base(const FObjectInitializer& ObjectInitializer); - - FString GetPropertiesDetails() const; - /** notify about changes in blackboard */ - virtual EBlackboardNotificationResult OnBlackboardKeyValueChange(const UBlackboardComponent& Blackboard, FBlackboard::FKey ChangedKeyID); - -protected: - // BTDecorator_BlueprintBase - enum class EAbortType : uint8 - { - NoAbort, - ActivateBranch, - DeactivateBranch, - Unknown, - }; - /** gets set to true if decorator declared BB keys it can potentially observe */ - uint32 bIsObservingBB : 1; - /** blackboard key names that should be observed */ - UPROPERTY() - TArray ObservedKeyNames; - /** properties with runtime values, stored only in class default object */ - TArray PropertyData; - /** show detailed information about properties */ - UPROPERTY(EditInstanceOnly, Category=Description) - bool bShowPropertyDetails = true; - /** return this decorator abort type in current circumstances */ - EAbortType EvaluateAbortType(UBehaviorTreeComponent& OwnerComp) const; - void RequestAbort(UBehaviorTreeComponent& OwnerComp, const EAbortType Type); - - virtual void PostLoad() override; - virtual void OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - - /** initialize data about blueprint defined properties - * copy-paste from UBTDecorator_BlueprintBase - */ - virtual void InitializeProperties(); - - /** setup node name - * copy-paste from UBTDecorator_BlueprintBase - */ - virtual void PostInitProperties() override; - // ~BTDecorator_BlueprintBase -}; diff --git a/Source/UHLAI/Public/Decorators/BTD_CheckGASGameplayTagsOnActor.h b/Source/UHLAI/Public/Decorators/BTD_CheckGASGameplayTagsOnActor.h deleted file mode 100644 index 6e176007..00000000 --- a/Source/UHLAI/Public/Decorators/BTD_CheckGASGameplayTagsOnActor.h +++ /dev/null @@ -1,48 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BTD_Base.h" -#include "BehaviorTree/BTDecorator.h" -#include "BTD_CheckGASGameplayTagsOnActor.generated.h" - -/** - * Actor should implement "IAbilitySystemInterface" to get AbilitySystemComponent - */ -UCLASS(Category = "UnrealHelperLibrary", DisplayName="Check GAS Gameplay Tags On Actor") -class UHLAI_API UBTD_CheckGASGameplayTagsOnActor : public UBTD_Base -{ - GENERATED_BODY() - -public: - UBTD_CheckGASGameplayTagsOnActor(const FObjectInitializer& ObjectInitializer); - - virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override; - virtual void DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const override; - virtual FString GetStaticDescription() const override; - -protected: - UPROPERTY(EditAnywhere, Category="GameplayTagCheck", Meta=(ToolTips="Which Actor (from the blackboard) should be checked for these GAS gameplay tags?")) - struct FBlackboardKeySelector ActorToCheck; - - UPROPERTY(EditAnywhere, Category="GameplayTagCheck") - EGameplayContainerMatchType TagsToMatch; - - UPROPERTY(EditAnywhere, Category="GameplayTagCheck") - FGameplayTagContainer GameplayTags; - - /** cached description */ - UPROPERTY() - FString CachedDescription; - -#if WITH_EDITOR - /** describe decorator and cache it */ - virtual void BuildDescription(); - - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; -#endif - - virtual void InitializeFromAsset(UBehaviorTree& Asset) override; - virtual void TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) override; -}; diff --git a/Source/UHLAI/Public/Decorators/BTD_GameplayEffectCooldown.h b/Source/UHLAI/Public/Decorators/BTD_GameplayEffectCooldown.h deleted file mode 100644 index 896a3131..00000000 --- a/Source/UHLAI/Public/Decorators/BTD_GameplayEffectCooldown.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2024 NextGenium - -#pragma once - -#include "CoreMinimal.h" -#include "GameplayEffect.h" -#include "Decorators/BTD_Base.h" -#include "BTD_GameplayEffectCooldown.generated.h" - -struct FBTGameplayEffectCooldownDecoratorMemory -{ - double LastUseTimestamp; - uint8 bRequestedRestart : 1; -}; - -/** - * TODO: finish node StaticDescription, Runtime and so on - * Actor should implement "IAbilitySystemInterface" - */ -UCLASS() -class UHLAI_API UBTD_GameplayEffectCooldown : public UBTD_Base -{ - GENERATED_BODY() - -public: - UBTD_GameplayEffectCooldown(const FObjectInitializer& ObjectInitializer); - - // Tag used in GameplayEffect to check cooldown - UPROPERTY(Category="Decorator", EditAnywhere) - FGameplayTag CooldownGameplayEffectTag; - - // TODO: make option to check cooldowns by this query - // UPROPERTY(Category="Decorator", EditAnywhere) - // FGameplayEffectQuery GameplayEffectQuery; - - virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override; - virtual void InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const override; - virtual void CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const override; - virtual uint16 GetInstanceMemorySize() const override; - virtual void DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const override; - virtual FString GetStaticDescription() const override; - -#if WITH_EDITOR - virtual FName GetNodeIconName() const override; -#endif // WITH_EDITOR - -protected: - virtual void OnNodeDeactivation(FBehaviorTreeSearchData& SearchData, EBTNodeResult::Type NodeResult) override; - virtual void TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) override; - -}; diff --git a/Source/UHLAI/Public/Decorators/BTD_InAngle.h b/Source/UHLAI/Public/Decorators/BTD_InAngle.h deleted file mode 100644 index c2d305b4..00000000 --- a/Source/UHLAI/Public/Decorators/BTD_InAngle.h +++ /dev/null @@ -1,79 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Decorators/BTD_Base.h" -#include "BTD_InAngle.generated.h" - -class ACharacter; - -struct FBTInAngleMemory -{ -}; - -USTRUCT(BlueprintType) -struct FAngleRange -{ - GENERATED_BODY() - -public: - UPROPERTY(Category="Decorator", EditAnywhere) - FFloatRange Range = FFloatRange(); - - // ~"FColor::MakeRandomColor()" will lead to non-critical error - // ~unreal don't support random colors from native code. - // ~They should be deterministic but there is no option - UPROPERTY(Category="Decorator", EditAnywhere) - FColor DebugColor = FColor::Blue; -}; - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTD_InAngle : public UBTD_Base -{ - GENERATED_BODY() - -public: - UBTD_InAngle(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="", EditConditionHides)) - FBlackboardKeySelector Target; - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="", EditConditionHides)) - TArray IncludeRanges; - // UPROPERTY(Category=Decorator, EditAnywhere, meta=(EditCondition="", EditConditionHides)) - // TArray ExcludeRanges; - - // TODO bIncludeTargetCharacterCapsule - checks not only angle to actor - // but also that TargetCharacter capsule in angle - - UPROPERTY(Category="Decorator", EditAnywhere) - bool bDrawDebug = false; - // helpful for testing ranges - UPROPERTY(Category="Decorator", EditAnywhere) - bool bDebugForceFalseCondition = false; - UPROPERTY(Category="Decorator", EditAnywhere) - float OverrideDebugLinesDistance = 0.0f; - - virtual void InitializeFromAsset(UBehaviorTree& Asset) override; - - virtual uint16 GetInstanceMemorySize() const override { return sizeof(FBTInAngleMemory); }; - virtual void InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const override; - virtual void CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const override; - - virtual FString GetStaticDescription() const override; - virtual void DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const override; -#if WITH_EDITOR - virtual FName GetNodeIconName() const override; -#endif - - virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override; - bool IsInAngle(float CurrentAngle) const; - -private: - TWeakObjectPtr CachedOwnerCharacter; - - float GetCurrentAngle(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, bool bDrawDebug_In = false) const; -}; diff --git a/Source/UHLAI/Public/Decorators/BTD_InRange.h b/Source/UHLAI/Public/Decorators/BTD_InRange.h deleted file mode 100644 index fe823fa8..00000000 --- a/Source/UHLAI/Public/Decorators/BTD_InRange.h +++ /dev/null @@ -1,67 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BTD_Base.h" -#include "BehaviorTree/BTCompositeNode.h" -#include "BTD_InRange.generated.h" - -struct FBTInRangeMemory -{ -}; - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTD_InRange : public UBTD_Base -{ - GENERATED_BODY() - -public: - UBTD_InRange(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="", EditConditionHides)) - FBlackboardKeySelector Target; - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="", EditConditionHides)) - float Min = 0.0f; - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="", EditConditionHides)) - float Max = 500.0f; - // Should we exclude Self character capsule radius from distance - // mostly for big enemies - // compliant with "MoveTo" - /** if set, radius of AI's capsule will be added to threshold between AI and goal location in destination reach test */ - UPROPERTY(Category="Decorator", EditAnywhere) - bool bIncludeSelfCapsuleRadius = true; - // Should we exclude Target character capsule radius from distance - /** if set, radius of Target's capsule will be added to threshold between AI and goal location */ - UPROPERTY(Category="Decorator", EditAnywhere) - bool bIncludeTargetCapsuleRadius = true; - UPROPERTY(Category="Decorator", EditAnywhere) - bool bCalculateDistanceIn2D = true; - - UPROPERTY(Category="Decorator", EditAnywhere) - bool bDrawDebug = false; - // TODO: if -1 or 0, when should be overriden by UHLGlobalSettings.DebugLifeTime, by default should be -1 or 0? - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="bDrawDebug", EditConditionHides)) - float DebugLifetime = -1.0f; - - virtual void InitializeFromAsset(UBehaviorTree& Asset) override; - virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override; - - virtual uint16 GetInstanceMemorySize() const override { return sizeof(FBTInRangeMemory); }; - virtual void InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const override; - virtual void CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const override; - - virtual FString GetStaticDescription() const override; - // TODO should be only "WITH_EDITOR"??? - virtual void DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const override; -#if WITH_EDITOR - virtual FName GetNodeIconName() const override; -#endif - - float GetCurrentDistance(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, bool bDrawDebug_In = false) const; - - virtual void TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) override; -}; diff --git a/Source/UHLAI/Public/Decorators/BTD_LoopRandomCount.h b/Source/UHLAI/Public/Decorators/BTD_LoopRandomCount.h deleted file mode 100644 index 1d323155..00000000 --- a/Source/UHLAI/Public/Decorators/BTD_LoopRandomCount.h +++ /dev/null @@ -1,28 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/Decorators/BTDecorator_Loop.h" -#include "BTD_LoopRandomCount.generated.h" - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary", hidecategories="Decorator") -class UHLAI_API UBTD_LoopRandomCount : public UBTDecorator_Loop -{ - GENERATED_BODY() - -public: - UBTD_LoopRandomCount(const FObjectInitializer& ObjectInitializer); - - /** number of executions */ - UPROPERTY(EditAnywhere, Category="LoopRandomCount", meta=(EditCondition="!bInfiniteLoop", ClampMin="1", ClampMax="255")) - FInt32Interval Range = FInt32Interval(2, 4); - -protected: - virtual void OnNodeActivation(FBehaviorTreeSearchData& SearchData) override; - virtual FString GetStaticDescription() const override; - -}; diff --git a/Source/UHLAI/Public/Decorators/BTD_RandomChance.h b/Source/UHLAI/Public/Decorators/BTD_RandomChance.h deleted file mode 100644 index dc9adf3c..00000000 --- a/Source/UHLAI/Public/Decorators/BTD_RandomChance.h +++ /dev/null @@ -1,71 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "ScalableFloat.h" -#include "BehaviorTree/BTDecorator.h" -#include "BehaviorTree/ValueOrBBKey.h" -#include "Core/UHLAIDebugSettings.h" -#include "Core/UHLMathOperations.h" -#include "BTD_RandomChance.generated.h" - -UENUM(BlueprintType) -enum class EScalableChanceType : uint8 -{ - None, - ScalableFloat UMETA(ToolTip = "with FScalableFloat value level getted from blackboard ScalableChanceLevelInBB"), - BBDependantWithSteps UMETA(ToolTip = "Chance changes by math operation that applies every step e.g. step 0 - \"BaseChance\", step 1 - \"BaseChance\" + 20%, step 2 - \"BaseChance\" + 40% with math operation \"Add\" 20%"), -}; - -/** - * TODO: blackboard based random chances - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTD_RandomChance : public UBTDecorator -{ - GENERATED_BODY() - -public: - UBTD_RandomChance(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(Category="Decorator", EditAnywhere) - EScalableChanceType ScaleType = EScalableChanceType::None; - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(UIMin=0.0f, UIMax=1.0f, ClampMin=0.0f, ClampMax=1.0f, EditCondition="ScaleType != EScalableChanceType::ScalableFloat", EditConditionHides)) - FValueOrBBKey_Float Chance = 1.0f; - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="ScaleType == EScalableChanceType::ScalableFloat", EditConditionHides)) - FScalableFloat ScalableChance; - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="ScaleType == EScalableChanceType::ScalableFloat", EditConditionHides)) - FBlackboardKeySelector ScalableChanceLevelInBB; - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="ScaleType == EScalableChanceType::BBDependantWithSteps", EditConditionHides)) - FOperationOnBBValue ChanceChangePerStep = {}; - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="ScaleType == EScalableChanceType::BBDependantWithSteps", EditConditionHides)) - FBlackboardKeySelector StepsCount; - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(UIMin=0.0f, UIMax=1.0f, ClampMin=0.0f, ClampMax=1.0f, EditCondition="ScaleType != EScalableChanceType::None", EditConditionHides)) - FValueOrBBKey_Float MaxChance = 1.0f; - - UPROPERTY(Category="Decorator", EditAnywhere, AdvancedDisplay, meta=(ShowOnlyInnerProperties)) - FUHLAIDebugSettings DebugSettings; - - virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override; - - virtual FString GetStaticDescription() const override; - - virtual void InitializeFromAsset(UBehaviorTree& Asset) override; - - // TODO value preview? - // virtual void DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const override; - -#if WITH_EDITOR - virtual FName GetNodeIconName() const override; -#endif // WITH_EDITOR - -private: - float GetCurrentChance(UBehaviorTreeComponent& OwnerComp) const; -}; diff --git a/Source/UHLAI/Public/Decorators/BTD_TimeLimitRandom.h b/Source/UHLAI/Public/Decorators/BTD_TimeLimitRandom.h deleted file mode 100644 index b0060910..00000000 --- a/Source/UHLAI/Public/Decorators/BTD_TimeLimitRandom.h +++ /dev/null @@ -1,64 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/Decorators/BTDecorator_TimeLimit.h" -#include "Misc/EngineVersionComparison.h" -#include "BehaviorTree/BTDecorator.h" -#include "UObject/ObjectMacros.h" -#include "BehaviorTree/BehaviorTree.h" -#include "Misc/EngineVersionComparison.h" -#include "BTD_TimeLimitRandom.generated.h" - - -struct FBTimeLimitMemoryRandom -{ -}; - -/** - * In UE5.4 changed completely now we can't nest from "TimeLimit" and forced to copy-paste same functionality - */ -UCLASS(Category = "UnrealHelperLibrary", hidecategories="Decorator") -class UHLAI_API UBTD_TimeLimitRandom : public UBTDecorator -{ - GENERATED_BODY() - -public: - UBTD_TimeLimitRandom(const FObjectInitializer& ObjectInitializer); - - /** TimeLimit */ - UPROPERTY(EditAnywhere, Category="TimeLimitRandom", meta=(ClampMin="0")) - FFloatInterval TimeLimitRange = FFloatInterval(3.0f, 5.0f); - UPROPERTY(EditAnywhere, Category="TimeLimitRandom") - bool bUseIntegers = true; - - virtual FString GetStaticDescription() const override; - -#if UE_VERSION_NEWER_THAN(5, 4, 0) - virtual void DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const override; -#if WITH_EDITOR - virtual FName GetNodeIconName() const override; -#endif // WITH_EDITOR -#endif - -protected: - virtual void OnNodeActivation(FBehaviorTreeSearchData& SearchData) override; - -#if UE_VERSION_NEWER_THAN(5, 4, 0) - // 5.4.0 and up only code - virtual uint16 GetInstanceMemorySize() const override; - virtual void InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const override; - virtual void CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const override; - - virtual void OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual void OnCeaseRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override; - virtual void TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) override; -#endif - -private: - /** max allowed time for execution of underlying node */ - UPROPERTY(EditAnywhere, Category="Decorator") - float TimeLimit; -}; diff --git a/Source/UHLAI/Public/Services/BTS_GameplayFocus.h b/Source/UHLAI/Public/Services/BTS_GameplayFocus.h deleted file mode 100644 index cf28bcf5..00000000 --- a/Source/UHLAI/Public/Services/BTS_GameplayFocus.h +++ /dev/null @@ -1,33 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Misc/EngineVersionComparison.h" -#include "BehaviorTree/BehaviorTreeTypes.h" -#include "BehaviorTree/Services/BTService_DefaultFocus.h" -#include "BTS_GameplayFocus.generated.h" - -class UBehaviorTreeComponent; - -/** - * Prevents rotation jittering while moving to enemy - * Requires to turned on "UseControllerDesiredRotation" - * Requires to turn off "UseControllerRotationYaw"/"UseControllerRotationPitch"/"UseControllerRotationRoll" - * Troubleshooting: - * - Check that nothing "ClearFocus" when thinks that it don't work - * - Check that MoveTo uses "AllowStafe"(low chances to get work, in tests it don't block from strafing) - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTS_GameplayFocus : public UBTService_DefaultFocus -{ - GENERATED_BODY() - -public: - UBTS_GameplayFocus(const FObjectInitializer& ObjectInitializer); - -#if UE_VERSION_NEWER_THAN(5, 4, 0) - virtual void InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const override; - virtual void CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const override; -#endif -}; diff --git a/Source/UHLAI/Public/Tasks/BTT_ClearFocus.h b/Source/UHLAI/Public/Tasks/BTT_ClearFocus.h deleted file mode 100644 index 1192cdda..00000000 --- a/Source/UHLAI/Public/Tasks/BTT_ClearFocus.h +++ /dev/null @@ -1,26 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BTT_ClearFocus.generated.h" - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTT_ClearFocus : public UBTTaskNode -{ - GENERATED_BODY() - -public: - UBTT_ClearFocus(const FObjectInitializer& ObjectInitializer); - - // not possible to expose "EAIFocusPriority::Type" - // by default clears Gameplay level priority - // UPROPERTY(Category="Decorator", EditAnywhere) - // EAIFocusPriority::Type Priority = (uint8)EAIFocusPriority::Gameplay; - - virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; -}; diff --git a/Source/UHLAI/Public/Tasks/BTT_DebugPrintBBValue.h b/Source/UHLAI/Public/Tasks/BTT_DebugPrintBBValue.h deleted file mode 100644 index c0da3e46..00000000 --- a/Source/UHLAI/Public/Tasks/BTT_DebugPrintBBValue.h +++ /dev/null @@ -1,35 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BTT_DebugPrintBBValue.generated.h" - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTT_DebugPrintBBValue : public UBTTaskNode -{ - GENERATED_BODY() - -public: - UBTT_DebugPrintBBValue(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(Category="Decorator", EditAnywhere) - FBlackboardKeySelector BlackboardKey; - - UPROPERTY(Category="Decorator", EditAnywhere) - float Duration = 3.5f; - - UPROPERTY(Category="Decorator", EditAnywhere) - FLinearColor Color = FLinearColor(0, 0.66, 1);; - - UPROPERTY(Category="Decorator", EditAnywhere) - FName Key = NAME_None; - - virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - FString GetBBKeyDescription(UBehaviorTreeComponent& OwnerComp); - virtual FString GetStaticDescription() const override; -}; diff --git a/Source/UHLAI/Public/Tasks/BTT_DebugPrintString.h b/Source/UHLAI/Public/Tasks/BTT_DebugPrintString.h deleted file mode 100644 index d0db3b84..00000000 --- a/Source/UHLAI/Public/Tasks/BTT_DebugPrintString.h +++ /dev/null @@ -1,42 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BehaviorTree/ValueOrBBKey.h" -#include "BTT_DebugPrintString.generated.h" - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTT_DebugPrintString : public UBTTaskNode -{ - GENERATED_BODY() - -public: - UBTT_DebugPrintString(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditFixedSize, MultiLine, FullyExpand=true)) - TArray PrintStrings = { - FValueOrBBKey_String(""), - FValueOrBBKey_String(""), - FValueOrBBKey_String("") - }; - - UPROPERTY(Category="Decorator", EditAnywhere) - FValueOrBBKey_Float Duration = 3.5f; - - UPROPERTY(Category="Decorator", EditAnywhere) - FLinearColor Color = FLinearColor(0, 0.66, 1); - - UPROPERTY(Category="Decorator", EditAnywhere) - FValueOrBBKey_Name Key = FValueOrBBKey_Name(); - - virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual FString GetStaticDescription() const override; - -private: - FString GetFinalString() const; -}; diff --git a/Source/UHLAI/Public/Tasks/BTT_FireGameplayEvent.h b/Source/UHLAI/Public/Tasks/BTT_FireGameplayEvent.h deleted file mode 100644 index e729c5f0..00000000 --- a/Source/UHLAI/Public/Tasks/BTT_FireGameplayEvent.h +++ /dev/null @@ -1,52 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BTT_FireGameplayEvent.generated.h" - -struct FBlackboardKeySelector; - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTT_FireGameplayEvent : public UBTTaskNode -{ - GENERATED_BODY() - - -public: - UBTT_FireGameplayEvent(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(EditAnywhere, Category="Blackboard") - FGameplayTag EventTag = FGameplayTag::EmptyTag; - - UPROPERTY(EditAnywhere, Category="Blackboard") - FBlackboardKeySelector Target; - - UPROPERTY(EditAnywhere, Category="Blackboard") - FBlackboardKeySelector Instigator; - - UPROPERTY(EditAnywhere, Category="Blackboard") - FBlackboardKeySelector OptionalObject; - - UPROPERTY(EditAnywhere, Category="Blackboard") - FBlackboardKeySelector OptionalObject2; - - // tags that required on instigator to fire event ?? - UPROPERTY(EditAnywhere, Category="Blackboard") - FGameplayTagContainer InstigatorTags = {}; - - // tags that required on target to fire event ?? - UPROPERTY(EditAnywhere, Category="Blackboard") - FGameplayTagContainer TargetTags = {}; - - UPROPERTY(EditAnywhere, Category="Blackboard") - float EventMagnitude = 0.0f; - - virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - - virtual FString GetStaticDescription() const override; -}; diff --git a/Source/UHLAI/Public/Tasks/BTT_InvokeGameplayAbility.h b/Source/UHLAI/Public/Tasks/BTT_InvokeGameplayAbility.h deleted file mode 100644 index 6e87bd9b..00000000 --- a/Source/UHLAI/Public/Tasks/BTT_InvokeGameplayAbility.h +++ /dev/null @@ -1,64 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLValueOrBBKey_GameplayTag.h" -#include "Abilities/GameplayAbilityTypes.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BTT_InvokeGameplayAbility.generated.h" - -class IAbilitySystemInterface; - -struct FInvokeGameplayAbilityMemory -{ - FDelegateHandle AbilityEndHandle; -}; - -/** - * TODO Invoke by Class option? - * 1) tbh its bad practice to have hard refs on classes, - * no need in this options, better to force good practices - dont hard ref abilities - * 2) it brokes good architechture/behaviorTrees reusability if we hard ref ability - * it means that nested abilities can't be activated, with activation by tag - * all enemies can have different abilities implementation using same tag - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTT_InvokeGameplayAbility : public UBTTaskNode -{ - GENERATED_BODY() - -public: - UBTT_InvokeGameplayAbility(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(Category="Blackboard", EditAnywhere) - FUHLValueOrBBKey_GameplayTag GameplayTag; - - UPROPERTY(Category="Blackboard", EditAnywhere, DisplayName = "Activate") - FValueOrBBKey_Bool bActivate = true; - - UPROPERTY(Category="Blackboard", EditAnywhere, DisplayName = "WaitForFinishing") - FValueOrBBKey_Bool bWaitForFinishing = true; - - UPROPERTY(Category="Blackboard", EditAnywhere, DisplayName = "DebugMessages") - FValueOrBBKey_Bool bDebugMessages = false; - - /** Cancelled ability should be handled as success. */ - UPROPERTY(EditAnywhere, Category = "Gameplay Ability Activation", DisplayName = "TreatCancelledAbilityAsSuccess") - FValueOrBBKey_Bool bTreatCancelledAbilityAsSuccess = false; - - virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual EBTNodeResult::Type AbortTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual void OnTaskFinished(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTNodeResult::Type TaskResult) override; - - virtual void InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const override; - virtual uint16 GetInstanceMemorySize() const override { return sizeof(FInvokeGameplayAbilityMemory); }; - - virtual FString GetStaticDescription() const override; - -private: - bool bIsAborting = false; - - UFUNCTION() - void OnAbilityEnded(const FAbilityEndedData& AbilityEndedData, UBehaviorTreeComponent* OwnerComp); -}; diff --git a/Source/UHLAI/Public/Tasks/BTT_PlayAnimMontage.h b/Source/UHLAI/Public/Tasks/BTT_PlayAnimMontage.h deleted file mode 100644 index 96607779..00000000 --- a/Source/UHLAI/Public/Tasks/BTT_PlayAnimMontage.h +++ /dev/null @@ -1,96 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "PlayMontageCallbackProxy.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BTT_PlayAnimMontage.generated.h" - -DECLARE_LOG_CATEGORY_EXTERN(LogBTT_PlayAnimMontage, Log, All); - -/** - * Deciding when to end the node - */ -UENUM() -enum ETaskNodeEndPolicy -{ - /** - * after the node ends, still need to perform montage node, using this policy can make the anime more coherent - */ - OnMontageBlendingOut, - - /** - * end when the montage is completely finished, applicable to situations where only one montage is executed - */ - OnMontageEnded -}; - -/** - * playMontage and wait finish. - * If the montage is already playing, it will be forcefully overwritten and played directly. - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTT_PlayAnimMontage : public UBTTaskNode -{ - GENERATED_BODY() - -public: - UBTT_PlayAnimMontage(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(Category="Blackboard", EditAnywhere) - UAnimMontage* AnimMontage = nullptr; - UPROPERTY(Category="Blackboard", EditAnywhere) - float PlayRate = 1.0f; - UPROPERTY(Category="Blackboard", EditAnywhere) - float StartingPosition = 0.0f; - UPROPERTY(Category="Blackboard", EditAnywhere) - FName StartSectionName = NAME_None; - UPROPERTY(Category="Blackboard", EditAnywhere) - bool StopMontageOnAbort = true; - UPROPERTY(Category="Blackboard", EditAnywhere) - TEnumAsByte TaskNodeEndPolicy = ETaskNodeEndPolicy::OnMontageBlendingOut; - - virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual EBTNodeResult::Type AbortTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual void OnTaskFinished(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, - EBTNodeResult::Type TaskResult) override; - - virtual FString GetStaticDescription() const override; - -private: - /** - * AIOwner Cache - */ - UPROPERTY() - TWeakObjectPtr AIOwner; - -protected: - /** - * PlayMontage and bind callback - */ - bool PlayMontage(USkeletalMeshComponent* InSkeletalMeshComponent, - UAnimMontage* MontageToPlay, - float InPlayRate, - float InStartingPosition, - FName InStartingSection); - - /** - * All callbacks at the end of montage need to be filtered - */ - UFUNCTION() - void OnMontageEnded(UAnimMontage* InAnimMontage, bool bInterrupted); - - /** - * All callbacks at the BlendingOut of montage need to be filtered - */ - UFUNCTION() - void OnMontageBlendingOut(UAnimMontage* InAnimMontage, bool bInterrupted); - - void ClearMontageDelegate(); - - /** - * finish AIOwner task node, if AIOwner still is Valid - */ - void FinishTaskNode(); -}; diff --git a/Source/UHLAI/Public/Tasks/BTT_SetBBValue.h b/Source/UHLAI/Public/Tasks/BTT_SetBBValue.h deleted file mode 100644 index 887c9b28..00000000 --- a/Source/UHLAI/Public/Tasks/BTT_SetBBValue.h +++ /dev/null @@ -1,97 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BehaviorTree/BehaviorTreeTypes.h" -#include "Core/UHLBlackboardValueType.h" -#include "Core/UHLMathOperations.h" -#include "BTT_SetBBValue.generated.h" - -/** - * Use with caution, setting BB values in BehaviorTrees directly is "anti-pattern" - * mostly you want to write BTTasks where its possible, use it for test purposes - * - * TODO arithmetic operations like A + B, A * B ... - * TODO vector calculations - add relative to owner, e.g. set Value as GetActorLocation + Value(offset) - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLAI_API UBTT_SetBBValue : public UBTTaskNode -{ - GENERATED_BODY() - -public: - UBTT_SetBBValue(const FObjectInitializer& ObjectInitializer); - - /** blackboard key selector */ - UPROPERTY(EditAnywhere, Category="Blackboard") - struct FBlackboardKeySelector BlackboardKey; - - UPROPERTY( - EditAnywhere, Category="Blackboard", - meta=(EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Int || CurrentBBKeyValueType==EBlackboardValueType::Float || CurrentBBKeyValueType==EBlackboardValueType::Vector || CurrentBBKeyValueType==EBlackboardValueType::Rotator", - EditConditionHides, ShowOnlyInnerProperties)) - FOperationOnBBValue OperationOnBBValue; - - /** Values */ - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Bool", EditConditionHides)) - bool BoolValue; - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::String", EditConditionHides, MultiLine)) - FString StringValue; - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Name", EditConditionHides, MultiLine)) - FName NameValue; - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Enum || CurrentBBKeyValueType==EBlackboardValueType::NativeEnum", EditConditionHides, GetOptions="GetEnumOptions")) - FString EnumStringValue; - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Object", EditConditionHides)) - FBlackboardKeySelector ObjectValue; - UPROPERTY(Category="Blackboard", EditAnywhere, meta=(DisplayName="Value", EditCondition="CurrentBBKeyValueType==EBlackboardValueType::Class", EditConditionHides)) - UClass* ClassValue; - /** ~Values */ - - virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - - virtual FString GetStaticDescription() const override; - - virtual void InitializeFromAsset(UBehaviorTree& Asset) override; - - virtual void PostLoad() override; - -#if WITH_EDITORONLY_DATA - - // UPROPERTY(Category=Blackboard, EditAnywhere, meta=(DisplayName="Key Query")) - // TEnumAsByte BasicOperation; - // UPROPERTY(Category=Blackboard, EditAnywhere, meta=(DisplayName="Key Query")) - // TEnumAsByte ArithmeticOperation; - // UPROPERTY(Category=Blackboard, EditAnywhere, meta=(DisplayName="Key Query")) - // TEnumAsByte TextOperation; - -#endif - -#if WITH_EDITOR - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; -#endif - -private: - UPROPERTY() - UEnum* CurrentEnum; - UPROPERTY() - EBlackboardValueType CurrentBBKeyValueType = EBlackboardValueType::None; - - UFUNCTION() - TArray GetEnumOptions(); - - UPROPERTY(meta=(DeprecatedProperty, DeprecationMessage="Use \"MathOperationNew\" instead")) - EUHL_MathOperations MathOperation = EUHL_MathOperations::None; - UPROPERTY(meta=(DeprecatedProperty, DeprecationMessage="Use \"OperationOnBBValue.IntValue\" instead")) - int32 IntValue; - UPROPERTY(meta=(DeprecatedProperty, DeprecationMessage="Use \"OperationOnBBValue.FloatValue\" instead")) - float FloatValue; - UPROPERTY(meta=(DeprecatedProperty, DeprecationMessage="Use \"OperationOnBBValue.VectorValue\" instead")) - FVector VectorValue; - UPROPERTY(meta=(DeprecatedProperty, DeprecationMessage="Use \"OperationOnBBValue.RotatorValue\" instead")) - FRotator RotatorValue; - - UPROPERTY() - bool bMigratedToMathOperation = false; -}; diff --git a/Source/UHLAI/Public/Tasks/BTT_TurnTo.h b/Source/UHLAI/Public/Tasks/BTT_TurnTo.h deleted file mode 100644 index 76cbea7d..00000000 --- a/Source/UHLAI/Public/Tasks/BTT_TurnTo.h +++ /dev/null @@ -1,143 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Data/TurnSettings.h" -#include "BehaviorTree/BTTaskNode.h" -#include "BehaviorTree/Services/BTService_DefaultFocus.h" -#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h" -#include "UnrealHelperLibraryTypes.h" -#include "GameFramework/Character.h" -#include "BTT_TurnTo.generated.h" - -class AAIController; -class ACharacter; - -namespace TurnToStatics -{ - static bool IsTurnWithAnimationRequired(ACharacter* Character) - { - if (!Character) return false; - if (Character->IsPlayingRootMotion()) return false; - return true; - } - - static FTurnRange GetTurnRange(float DeltaAngle, bool& bCurrentTurnRangeSet, FTurnSettings TurnSettings_In) - { - FTurnRange Result; - bCurrentTurnRangeSet = false; - for (TTuple TurnToRange : TurnSettings_In.TurnRangesGroups) - { - for (FTurnRange Range : TurnToRange.Value.TurnRanges) - { - if (Range.Range.Contains(DeltaAngle)) - { - Result = Range; - bCurrentTurnRangeSet = true; - break; - } - } - if (bCurrentTurnRangeSet) - { - break; - } - } - return Result; - } - - FORCEINLINE_DEBUGGABLE FVector::FReal CalculateAngleDifferenceDot(const FVector& VectorA, const FVector& VectorB) - { - return (VectorA.IsNearlyZero() || VectorB.IsNearlyZero()) - ? 1.f - : VectorA.CosineAngle2D(VectorB); - } -} - -struct FBTTurnToMemory : FBTFocusMemory -{ - FTurnRange CurrentTurnRange; - bool bCurrentTurnRangeSet = false; - FTurnSettings TurnSettings; - bool bCurrentTurnSettingsSet = false; - - void Reset() - { - FocusActorSet = nullptr; - FocusLocationSet = FAISystem::InvalidLocation; - bActorSet = false; - bCurrentTurnRangeSet = false; - bCurrentTurnSettingsSet = false; - } -}; - -/** - * Mostly copy-pasted from RotateToFaceBBEntry but can use animations to rotate - * TODO bForceRotateNotOnlyWithAnims - overrides DataAsset setting, in rare cases we need to rotate in place - */ -UCLASS(config = Game, Category = "UnrealHelperLibrary") -class UHLAI_API UBTT_TurnTo : public UBTTask_BlackboardBase -{ - GENERATED_BODY() - -protected: - // TODO IMO can't be 0.0f, enemy wont turn such precisely clamp to 0.1f at least? - /** Success condition precision in degrees */ - UPROPERTY(config, Category="TurnTo", EditAnywhere, meta = (ClampMin = "0.0", Units="Degrees")) - float Precision = 1.0f; - - UPROPERTY(EditAnywhere, Category="TurnTo") - bool bUseTurnAnimations = true; - UPROPERTY(EditAnywhere, Category="TurnTo", meta=(EditCondition="bUseTurnAnimations", EditConditionHides)) - EUHLSettingsSource SettingsSource = EUHLSettingsSource::Actor; - - UPROPERTY(EditAnywhere, Category="TurnTo", meta=(EditCondition="bUseTurnAnimations && SettingsSource==EUHLSettingsSource::Node", EditConditionHides)) - FTurnSettings TurnSettings; - UPROPERTY(EditAnywhere, Category="TurnTo", meta=(EditCondition="bUseTurnAnimations && SettingsSource==EUHLSettingsSource::DataAsset", EditConditionHides)) - UTurnSettingsDataAsset* RotateToAnimationsDataAsset; - - UPROPERTY(EditAnywhere, Category="TurnTo") - bool bDebug = false; - - // Prefers to rotate 180deg if relative angle >115deg, suits for all medium mobs(human size) - UFUNCTION(BlueprintCallable, Category="Setup", CallInEditor, meta=(EditCondition="bUseTurnAnimations && SettingsSource==EUHLSettingsSource::Node", EditConditionHides, DisplayPriority=1)) - void SetupPreset_Default_90_180(); - // All ranges have same proportion - UFUNCTION(BlueprintCallable, Category="Setup", CallInEditor, meta=(EditCondition="bUseTurnAnimations && SettingsSource==EUHLSettingsSource::Node", EditConditionHides, DisplayPriority=1)) - void SetupPreset_BigEnemy_90_180(); - UFUNCTION(BlueprintCallable, Category="Setup", CallInEditor, meta=(EditCondition="bUseTurnAnimations && SettingsSource==EUHLSettingsSource::Node", EditConditionHides, DisplayPriority=2)) - void SetupPreset_45_90_180(); - UFUNCTION(BlueprintCallable, Category="Setup", CallInEditor, meta=(EditCondition="bUseTurnAnimations && SettingsSource==EUHLSettingsSource::Node", EditConditionHides, DisplayPriority=3)) - void SetupPreset_15_45_90_180(); - UFUNCTION(BlueprintCallable, Category="Setup", CallInEditor, meta=(EditCondition="bUseTurnAnimations && SettingsSource==EUHLSettingsSource::Node", EditConditionHides, DisplayPriority=4)) - void SetupPreset_15_30_45_90_180(); - UFUNCTION(BlueprintCallable, Category="Setup", CallInEditor, meta=(EditCondition="bUseTurnAnimations && SettingsSource==EUHLSettingsSource::Node", EditConditionHides, DisplayPriority=5)) - void Cleanup(); - -private: - /** cached Precision tangent value */ - float PrecisionDot; - -public: - UBTT_TurnTo(const FObjectInitializer& ObjectInitializer); - - virtual void PostInitProperties() override; - virtual void PostLoad() override; - - virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual void TickTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds) override; - virtual EBTNodeResult::Type AbortTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override; - virtual void DescribeRuntimeValues(const UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTDescriptionVerbosity::Type Verbosity, TArray& Values) const override; - virtual FString GetStaticDescription() const override; - - virtual uint16 GetInstanceMemorySize() const override { return sizeof(FBTTurnToMemory); } - virtual void InitializeMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryInit::Type InitType) const override; - virtual void CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const override; - -protected: - float GetPrecisionDot() const { return PrecisionDot; } - void CleanUp(AAIController& AIController, uint8* NodeMemory); - -private: - FTurnSettings GetTurnSettings(AActor* Actor, bool& bCurrentTurnSettingsSet); -}; diff --git a/Source/UHLAI/Public/UHLAI.h b/Source/UHLAI/Public/UHLAI.h deleted file mode 100644 index b677a153..00000000 --- a/Source/UHLAI/Public/UHLAI.h +++ /dev/null @@ -1,14 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Modules/ModuleManager.h" - - -class FUHLAIModule : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; diff --git a/Source/UHLAI/Public/UHLValueOrBBKey_GameplayTag.h b/Source/UHLAI/Public/UHLValueOrBBKey_GameplayTag.h deleted file mode 100644 index e5496078..00000000 --- a/Source/UHLAI/Public/UHLValueOrBBKey_GameplayTag.h +++ /dev/null @@ -1,47 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "BehaviorTree/ValueOrBBKey.h" -#include "UHLValueOrBBKey_GameplayTag.generated.h" - -// TODO: Looks like there is same thing(not sure) in -// Experimental/GameplayBehaviors/Source/GameplayBehaviorsModule/Public/AI/ValueOrBBKey_GameplayTag.h - -USTRUCT(BlueprintType, Category = "UnrealHelperLibrary") -struct UHLAI_API FUHLValueOrBBKey_GameplayTag : public FValueOrBlackboardKeyBase -{ - GENERATED_BODY() - - FUHLValueOrBBKey_GameplayTag(FGameplayTag Default = FGameplayTag::EmptyTag) - : DefaultValue(Default) {} - FGameplayTag GetValue(const UBehaviorTreeComponent& BehaviorComp) const; - FGameplayTag GetValue(const UBehaviorTreeComponent* BehaviorComp) const; - FGameplayTag GetValue(const UBlackboardComponent& Blackboard) const; - FGameplayTag GetValue(const UBlackboardComponent* Blackboard) const; - - bool SerializeFromMismatchedTag(const FPropertyTag& Tag, FStructuredArchive::FSlot Slot); - -#if WITH_EDITOR - virtual bool IsCompatibleType(const UBlackboardKeyType* KeyType) const override; -#endif // WITH_EDITOR - - FString ToString() const; - - UE_DEPRECATED_FORGAME(5.5, "Implicit conversion will be removed next version. Call GetValue instead") - operator FName() const { return DefaultValue.GetTagName(); } - -protected: - UPROPERTY(EditAnywhere, Category = "Value") - FGameplayTag DefaultValue = FGameplayTag::EmptyTag; -}; - -template <> -struct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2 -{ - enum - { - WithStructuredSerializeFromMismatchedTag = true, - }; -}; diff --git a/Source/UHLAI/UHLAI.Build.cs b/Source/UHLAI/UHLAI.Build.cs deleted file mode 100644 index 7df75dea..00000000 --- a/Source/UHLAI/UHLAI.Build.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class UHLAI : ModuleRules -{ - public UHLAI(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - "CoreUObject", - - "GameplayAbilities", - "GameplayTags", - "GameplayTasks", - - "AIModule", - - // ... add other public dependencies that you statically link with here ... - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "Engine", - - // TODO: probably should be removed - "UnrealHelperLibrary", - - "AnimGraphRuntime", - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/Source/UHLAIEditor/Private/UHLAIEditor.cpp b/Source/UHLAIEditor/Private/UHLAIEditor.cpp deleted file mode 100644 index 719de2a7..00000000 --- a/Source/UHLAIEditor/Private/UHLAIEditor.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLAIEditor.h" -#include "Misc/MessageDialog.h" -#include "ToolMenus.h" -#include "UHLAIEditorValueOrBBKeyDetails.h" - -static const FName UHLAIEditorTabName("UHLAIEditor"); - -#define LOCTEXT_NAMESPACE "FUHLAIEditorModule" - -void FUHLAIEditorModule::StartupModule() -{ - // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module - - // Register the details customizer - FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); - // PropertyModule.RegisterCustomPropertyTypeLayout("ValueOrBBKey_GameplayTag", FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FValueOrBBKeyDetails_GameplayTag::MakeInstance)); - // PropertyModule.RegisterCustomPropertyTypeLayout("ValueOrBBKey_GameplayTag", FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FValueOrBBKeyDetails_GameplayTag::MakeInstance)); - // PropertyModule.RegisterCustomClassLayout("BlackboardKeyType_Class", FOnGetDetailCustomizationInstance::CreateStatic(&FBlackboardKeyDetails_Class::MakeInstance)); - // PropertyModule.RegisterCustomPropertyTypeLayout("ValueOrBBKey_GameplayTag", FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FValueOrBBKeyDetails_Struct::MakeInstance)); - PropertyModule.RegisterCustomPropertyTypeLayout("ValueOrBBKey_GameplayTag", FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FValueOrBBKeyDetails_GameplayTag::MakeInstance)); - PropertyModule.NotifyCustomizationModuleChanged(); -} - -void FUHLAIEditorModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. - - // Unregister the details customization - if (FModuleManager::Get().IsModuleLoaded("PropertyEditor")) - { - FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); - PropertyModule.UnregisterCustomPropertyTypeLayout("ValueOrBBKey_GameplayTag"); - PropertyModule.NotifyCustomizationModuleChanged(); - } -} - - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLAIEditorModule, UHLAIEditor) diff --git a/Source/UHLAIEditor/Private/UHLAIEditorValueOrBBKeyDetails.cpp b/Source/UHLAIEditor/Private/UHLAIEditorValueOrBBKeyDetails.cpp deleted file mode 100644 index 7fb079fe..00000000 --- a/Source/UHLAIEditor/Private/UHLAIEditorValueOrBBKeyDetails.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLAIEditorValueOrBBKeyDetails.h" - -#include "GameplayTagContainer.h" -#include "IDetailChildrenBuilder.h" -#include "SGameplayTagCombo.h" - -TSharedRef FValueOrBBKeyDetails_GameplayTag::MakeInstance() -{ - return MakeShareable(new FValueOrBBKeyDetails_GameplayTag); -} - -void FValueOrBBKeyDetails_GameplayTag::CustomizeChildren(TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) -{ - if (GameplayTagProperty && GameplayTagProperty->IsEditable()) - { - StructBuilder.AddProperty(GameplayTagProperty.ToSharedRef()); - } -} - -TSharedRef FValueOrBBKeyDetails_GameplayTag::CreateDefaultValueWidget() -{ - return SNew(SGameplayTagCombo) - // .Visibility(this, &SGraphPin::GetDefaultValueVisibility) - // .Filter(FilterString) - .Tag(this, &FValueOrBBKeyDetails_GameplayTag::GetGameplayTag) - .OnTagChanged(this, &FValueOrBBKeyDetails_GameplayTag::OnGameplayTagChanged); -} - -void FValueOrBBKeyDetails_GameplayTag::OnGameplayTagChanged(const FGameplayTag NewTag) -{ - if (DefaultValueProperty.IsValid()) - { - FGameplayTag TagToSet = NewTag; - FString TagAsString = TagToSet.ToString(); - const FPropertyAccess::Result Result = DefaultValueProperty->SetValueFromFormattedString(TagAsString); - if (Result != FPropertyAccess::Success) - { - UE_LOG(LogTemp, Warning, TEXT("Failed to set GameplayTag value on property handle.")); - } - } -} - -FGameplayTag FValueOrBBKeyDetails_GameplayTag::GetGameplayTag() const -{ - FGameplayTag* GameplayTag = nullptr; - void* StructData = nullptr; - if (DefaultValueProperty->GetValueData(StructData) == FPropertyAccess::Success) - { - GameplayTag = reinterpret_cast(StructData); - } - return *GameplayTag; -} diff --git a/Source/UHLAIEditor/Public/UHLAIEditor.h b/Source/UHLAIEditor/Public/UHLAIEditor.h deleted file mode 100644 index 38abb6c6..00000000 --- a/Source/UHLAIEditor/Public/UHLAIEditor.h +++ /dev/null @@ -1,18 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Modules/ModuleManager.h" - -class FToolBarBuilder; -class FMenuBuilder; - -class FUHLAIEditorModule : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; - -}; diff --git a/Source/UHLAIEditor/Public/UHLAIEditorValueOrBBKeyDetails.h b/Source/UHLAIEditor/Public/UHLAIEditorValueOrBBKeyDetails.h deleted file mode 100644 index c96d79b4..00000000 --- a/Source/UHLAIEditor/Public/UHLAIEditorValueOrBBKeyDetails.h +++ /dev/null @@ -1,23 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "GameplayTagContainer.h" -#include "ValueOrBBKeyDetails.h" - -class FValueOrBBKeyDetails_GameplayTag : public FValueOrBBKeyDetails -{ -public: - /** Makes a new instance of this detail layout class for a specific detail view requesting it */ - static TSharedRef MakeInstance(); - - virtual void CustomizeChildren(TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; - -protected: - TSharedPtr GameplayTagProperty; - - virtual TSharedRef CreateDefaultValueWidget() override; - - void OnGameplayTagChanged(const FGameplayTag NewTag); - FGameplayTag GetGameplayTag() const; -}; diff --git a/Source/UHLAIEditor/UHLAIEditor.Build.cs b/Source/UHLAIEditor/UHLAIEditor.Build.cs deleted file mode 100644 index be0d14d4..00000000 --- a/Source/UHLAIEditor/UHLAIEditor.Build.cs +++ /dev/null @@ -1,71 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class UHLAIEditor : ModuleRules -{ - public UHLAIEditor(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - "CoreUObject", - "Engine", - "PropertyEditor", - "Blutility", - "UMG", - "BehaviorTreeEditor", - // ... add other public dependencies that you statically link with here ... - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "Projects", - "InputCore", - "EditorFramework", - "UnrealEd", - "ToolMenus", - "Slate", - "SlateCore", - "UnrealEd", - "DeveloperSettings", - - "UHLAI", - - "EditorWidgets", - - "GameplayTags", - "GameplayTagsEditor", - // ... add private dependencies that you statically link with here ... - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/Source/UHLCharacter/Private/AttributeSets/UHLBaseCharacterAttributeSet.cpp b/Source/UHLCharacter/Private/AttributeSets/UHLBaseCharacterAttributeSet.cpp deleted file mode 100644 index 14a93083..00000000 --- a/Source/UHLCharacter/Private/AttributeSets/UHLBaseCharacterAttributeSet.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "AttributeSets/UHLBaseCharacterAttributeSet.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLBaseCharacterAttributeSet) - -void UUHLBaseCharacterAttributeSet::PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) -{ - Super::PreAttributeChange(Attribute, NewValue); - - // If a Max value changes, adjust current to keep Current % of Current to Max - if (Attribute == GetMaxHealthAttribute()) // GetMaxHealthAttribute comes from the Macros defined at the top of the header - { - AdjustAttributeForMaxChange(Health, MaxHealth, NewValue, GetHealthAttribute()); - } - - ClampAttribute(Attribute, NewValue); -} - -void UUHLBaseCharacterAttributeSet::PreAttributeBaseChange(const FGameplayAttribute& Attribute, float& NewValue) const -{ - Super::PreAttributeBaseChange(Attribute, NewValue); - - ClampAttribute(Attribute, NewValue); -} - -void UUHLBaseCharacterAttributeSet::AdjustAttributeForMaxChange(FGameplayAttributeData & AffectedAttribute, const FGameplayAttributeData & MaxAttribute, float NewMaxValue, const FGameplayAttribute & AffectedAttributeProperty) -{ - TObjectPtr AbilityComp = GetOwningAbilitySystemComponent(); - const float CurrentMaxValue = MaxAttribute.GetCurrentValue(); - if (!FMath::IsNearlyEqual(CurrentMaxValue, NewMaxValue) && AbilityComp) - { - // Change current value to maintain the current Val / Max percent - const float CurrentValue = AffectedAttribute.GetCurrentValue(); - float NewDelta = (CurrentMaxValue > 0.f) ? (CurrentValue * NewMaxValue / CurrentMaxValue) - CurrentValue : NewMaxValue; - - AbilityComp->ApplyModToAttributeUnsafe(AffectedAttributeProperty, EGameplayModOp::Additive, NewDelta); - } -} - -void UUHLBaseCharacterAttributeSet::ClampAttribute(const FGameplayAttribute& Attribute, float& NewValue) const -{ - // Values clamp should be always here, dont move to "PostGameplayEffectExecute" - // it leads to value jittering every frame e.g for stamina like "150, 151, 150, 151, 150, 151, ..." - if (Attribute == GetHealthAttribute()) - { - NewValue = FMath::Clamp(NewValue, 0.0f, MaxHealth.GetCurrentValue()); - } -} - diff --git a/Source/UHLCharacter/Private/Characters/UHLBaseCharacter.cpp b/Source/UHLCharacter/Private/Characters/UHLBaseCharacter.cpp deleted file mode 100644 index a8841282..00000000 --- a/Source/UHLCharacter/Private/Characters/UHLBaseCharacter.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Characters/UHLBaseCharacter.h" - -#include "GameFramework/CharacterMovementComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLBaseCharacter) - -// Sets default values -AUHLBaseCharacter::AUHLBaseCharacter(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - // smooth AI rotation - bUseControllerRotationYaw = false; - GetCharacterMovement()->bOrientRotationToMovement = 0; - GetCharacterMovement()->bUseControllerDesiredRotation = true; -} - -FTurnSettings AUHLBaseCharacter::GetTurnSettings_Implementation() const -{ - return TurnSettingsDataAsset->TurnSettings; -} - diff --git a/Source/UHLCharacter/Private/Characters/UHLBaseCharacterWithASC.cpp b/Source/UHLCharacter/Private/Characters/UHLBaseCharacterWithASC.cpp deleted file mode 100644 index 52325e1d..00000000 --- a/Source/UHLCharacter/Private/Characters/UHLBaseCharacterWithASC.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Characters/UHLBaseCharacterWithASC.h" - -#include "GameFramework/Controller.h" -#include "UHLAbilitySystemComponent.h" -#include "AttributeSets/UHLBaseCharacterAttributeSet.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLBaseCharacterWithASC) - -AUHLBaseCharacterWithASC::AUHLBaseCharacterWithASC(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - AbilitySystemComponent = CreateDefaultSubobject(TEXT("UHLAbilitySystem")); - - // some attribute sets can be added here, but its not only option - // you can use UHL Settings to set defaults for every AbilitySystemComponent and add default AttributeSet - // AbilitySystemComponent->AttributeSets = { UUHLBaseCharacterAttributeSet::StaticClass() }; -} - -void AUHLBaseCharacterWithASC::PossessedBy(AController* NewController) -{ - Super::PossessedBy(NewController); - - if (bInitUHLAbilitySystemOnPosses) - { - if (bDontInitOnSameControllerTwice) - { - if (NewController != PreviousController.Get()) - { - AbilitySystemComponent->InitAbilitySystem(NewController, this); - PreviousController = NewController; - } - } - else - { - AbilitySystemComponent->InitAbilitySystem(NewController, this); - } - - // Advanced setup if you want to make something after attributes set, but before abilities activated - // AbilitySystemComponent->InitAbilitySystem(NewController, this, false); - // AbilitySystemComponent->ActivateInitialAbilities(); - } -} diff --git a/Source/UHLCharacter/Private/Components/UHLCharacterMovementComponent.cpp b/Source/UHLCharacter/Private/Components/UHLCharacterMovementComponent.cpp deleted file mode 100644 index de47b7c5..00000000 --- a/Source/UHLCharacter/Private/Components/UHLCharacterMovementComponent.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2024 NextGenium - - -#include "Components/UHLCharacterMovementComponent.h" - -UUHLCharacterMovementComponent::UUHLCharacterMovementComponent() -{ - bUseControllerDesiredRotation = true; - bOrientRotationToMovement = false; -} - -void UUHLCharacterMovementComponent::SetRotationRate(FRotator RotationRate_In) -{ - RotationRate = RotationRate_In; -} diff --git a/Source/UHLCharacter/Private/Controllers/UHLPlayerController.cpp b/Source/UHLCharacter/Private/Controllers/UHLPlayerController.cpp deleted file mode 100644 index c8375ff1..00000000 --- a/Source/UHLCharacter/Private/Controllers/UHLPlayerController.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Controllers/UHLPlayerController.h" - -#include "Kismet/GameplayStatics.h" -#include "Engine/World.h" -#include "Engine/GameInstance.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLPlayerController) - -void AUHLPlayerController::BeginPlay() -{ - Super::BeginPlay(); -} diff --git a/Source/UHLCharacter/Private/UHLCharacter.cpp b/Source/UHLCharacter/Private/UHLCharacter.cpp deleted file mode 100644 index f4760b6c..00000000 --- a/Source/UHLCharacter/Private/UHLCharacter.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLCharacter.h" - -#include "Misc/Paths.h" -#include "GameplayTagsManager.h" - -#define LOCTEXT_NAMESPACE "FUHLCharacterModule" - - -void FUHLCharacterModule::StartupModule() -{ - UGameplayTagsManager& TagsManager = UGameplayTagsManager::Get(); - // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module - TagsManager.AddTagIniSearchPath(FPaths::ProjectPluginsDir() / TEXT("UnrealHelperLibrary/Config/Tags")); -} - -void FUHLCharacterModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLCharacterModule, UHLCharacter) diff --git a/Source/UHLCharacter/Public/AttributeSets/UHLBaseCharacterAttributeSet.h b/Source/UHLCharacter/Public/AttributeSets/UHLBaseCharacterAttributeSet.h deleted file mode 100644 index cfd7dab9..00000000 --- a/Source/UHLCharacter/Public/AttributeSets/UHLBaseCharacterAttributeSet.h +++ /dev/null @@ -1,37 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AbilitySystemComponent.h" -#include "AttributeSet.h" -#include "AttributeSets/UHLAttributeSet.h" -#include "UHLBaseCharacterAttributeSet.generated.h" - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLCHARACTER_API UUHLBaseCharacterAttributeSet : public UUHLAttributeSet -{ - GENERATED_BODY() - -public: - ATTRIBUTE_ACCESSORS(UUHLBaseCharacterAttributeSet, Health); - ATTRIBUTE_ACCESSORS(UUHLBaseCharacterAttributeSet, MaxHealth); - -protected: - virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override; - virtual void PreAttributeBaseChange(const FGameplayAttribute& Attribute, float& NewValue) const override; - - // Helper function to proportionally adjust the value of an attribute when it's associated max attribute changes. - // (i.e. When MaxHealth increases, Health increases by an amount that maintains the same percentage as before) - void AdjustAttributeForMaxChange(FGameplayAttributeData& AffectedAttribute, const FGameplayAttributeData& MaxAttribute, float NewMaxValue, const FGameplayAttribute& AffectedAttributeProperty); - virtual void ClampAttribute(const FGameplayAttribute& Attribute, float& NewValue) const; - -private: - UPROPERTY(BlueprintReadOnly, Category = "Attributes | Health", Meta=(AllowPrivateAccess=true)) - FGameplayAttributeData Health; - UPROPERTY(BlueprintReadOnly, Category = "Attributes | Health", Meta=(AllowPrivateAccess=true)) - FGameplayAttributeData MaxHealth; -}; diff --git a/Source/UHLCharacter/Public/Characters/UHLBaseCharacter.h b/Source/UHLCharacter/Public/Characters/UHLBaseCharacter.h deleted file mode 100644 index 82136900..00000000 --- a/Source/UHLCharacter/Public/Characters/UHLBaseCharacter.h +++ /dev/null @@ -1,31 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Core/UHLAIActorSettings.h" -#include "GameFramework/Character.h" -#include "UHLBaseCharacter.generated.h" - -/** - * Character with base interfaces and features implemented, - * except AbilitySystem implementation cause its may vary on project setup - * ASC can be inited on PlayerState/Character - */ -UCLASS() -class UHLCHARACTER_API AUHLBaseCharacter : public ACharacter, - public IUHLAIActorSettings -{ - GENERATED_BODY() - -public: - // Sets default values for this character's properties - AUHLBaseCharacter(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="TurnSettings") - UTurnSettingsDataAsset* TurnSettingsDataAsset; - -/** IUHLActorSettings */ - virtual FTurnSettings GetTurnSettings_Implementation() const override; -/** ~IUHLActorSettings */ -}; diff --git a/Source/UHLCharacter/Public/Characters/UHLBaseCharacterWithASC.h b/Source/UHLCharacter/Public/Characters/UHLBaseCharacterWithASC.h deleted file mode 100644 index e020e47d..00000000 --- a/Source/UHLCharacter/Public/Characters/UHLBaseCharacterWithASC.h +++ /dev/null @@ -1,53 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AbilitySystemInterface.h" -#include "UHLAbilitySystemComponent.h" -#include "Characters/UHLBaseCharacter.h" -#include "Core/UHLAbilitySystemInterface.h" -#include "UHLBaseCharacterWithASC.generated.h" - -class UAbilitySystemComponent; - -/** - * Extended version of UHLBaseCharacter but with AbilitySystem and ASC init on "PossessedBy" - */ -UCLASS() -class UHLCHARACTER_API AUHLBaseCharacterWithASC : public AUHLBaseCharacter, - public IAbilitySystemInterface, - public IUHLAbilitySystemInterface -{ - GENERATED_BODY() - -public: - AUHLBaseCharacterWithASC(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL BaseCharacter with ASC") - bool bInitUHLAbilitySystemOnPosses = true; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL BaseCharacter with ASC") - bool bDontInitOnSameControllerTwice = true; - - /** IAbilitySystemInterface **/ - virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override { return AbilitySystemComponent; }; - /** ~IAbilitySystemInterface **/ - - /** IUHLAbilitySystemInterface */ - virtual UUHLAbilitySystemComponent* GetUHLAbilitySystemComponent_Implementation() const override - { - return AbilitySystemComponent; - }; - /** ~IUHLAbilitySystemInterface */ - -protected: - /** GameplayAbilities */ - UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category="UHL BaseCharacter with ASC") - UUHLAbilitySystemComponent* AbilitySystemComponent; - /** ~GameplayAbilities */ - - virtual void PossessedBy(AController* NewController) override; - -private: - TWeakObjectPtr PreviousController; -}; diff --git a/Source/UHLCharacter/Public/Components/UHLCharacterMovementComponent.h b/Source/UHLCharacter/Public/Components/UHLCharacterMovementComponent.h deleted file mode 100644 index c40fbc5c..00000000 --- a/Source/UHLCharacter/Public/Components/UHLCharacterMovementComponent.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2024 NextGenium - -#pragma once - -#include "CoreMinimal.h" -#include "GameFramework/CharacterMovementComponent.h" -#include "UHLCharacterMovementComponent.generated.h" - -/** - * - */ -UCLASS(Blueprintable, BlueprintType) -class UHLCHARACTER_API UUHLCharacterMovementComponent : public UCharacterMovementComponent -{ - GENERATED_BODY() - -public: - UUHLCharacterMovementComponent(); - - // not required? - void SetRotationRate(FRotator RotationRate_In); -}; diff --git a/Source/UHLCharacter/Public/Controllers/UHLPlayerController.h b/Source/UHLCharacter/Public/Controllers/UHLPlayerController.h deleted file mode 100644 index 99114819..00000000 --- a/Source/UHLCharacter/Public/Controllers/UHLPlayerController.h +++ /dev/null @@ -1,19 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameFramework/PlayerController.h" -#include "UHLPlayerController.generated.h" - -/** - * - */ -UCLASS() -class UHLCHARACTER_API AUHLPlayerController : public APlayerController -{ - GENERATED_BODY() - -public: - virtual void BeginPlay() override; -}; diff --git a/Source/UHLCharacter/Public/UHLCharacter.h b/Source/UHLCharacter/Public/UHLCharacter.h deleted file mode 100644 index fd1f15a9..00000000 --- a/Source/UHLCharacter/Public/UHLCharacter.h +++ /dev/null @@ -1,14 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Modules/ModuleManager.h" - - -class FUHLCharacterModule : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; diff --git a/Source/UHLCharacter/UHLCharacter.Build.cs b/Source/UHLCharacter/UHLCharacter.Build.cs deleted file mode 100644 index 18760184..00000000 --- a/Source/UHLCharacter/UHLCharacter.Build.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class UHLCharacter : ModuleRules -{ - public UHLCharacter(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - // ... add other public dependencies that you statically link with here ... - "GameplayAbilities", - "GameplayTags", - "GameplayTasks", - "EnhancedInput", - - "UnrealHelperLibrary", - "UHLAI", - "UHLGAS", - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "CoreUObject", - "Engine", - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/Source/UHLDebug/Private/UHLDebug.cpp b/Source/UHLDebug/Private/UHLDebug.cpp deleted file mode 100644 index b9586a21..00000000 --- a/Source/UHLDebug/Private/UHLDebug.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLDebug.h" - -#include "Misc/Paths.h" -#include "GameplayTagsManager.h" - -#define LOCTEXT_NAMESPACE "FUHLDebugModule" - - -void FUHLDebugModule::StartupModule() -{ - UGameplayTagsManager& TagsManager = UGameplayTagsManager::Get(); - // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module - TagsManager.AddTagIniSearchPath(FPaths::ProjectPluginsDir() / TEXT("UnrealHelperLibrary/Config/Tags")); -} - -void FUHLDebugModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLDebugModule, UHLDebug) diff --git a/Source/UHLDebug/Private/UHLDebugModuleSubsystem.cpp b/Source/UHLDebug/Private/UHLDebugModuleSubsystem.cpp deleted file mode 100644 index 7cd8b143..00000000 --- a/Source/UHLDebug/Private/UHLDebugModuleSubsystem.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UHLDebugModuleSubsystem.h" - -#include "GameFramework/Pawn.h" -#include "AbilitySystemInterface.h" -#include "Blueprint/UserWidget.h" -#include "Kismet/GameplayStatics.h" -#include "UI/UHLDebugWidget.h" -#include "GameFramework/PlayerController.h" -#include "AbilitySystemComponent.h" -#include "HAL/IConsoleManager.h" -#include "Engine/Engine.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugModuleSubsystem) - -UUHLDebugModuleSubsystem::UUHLDebugModuleSubsystem() -{ - UHLDebugWidgetClass = FSoftObjectPath(TEXT("/UnrealHelperLibrary/UI/UI_UHL_DebugWidget.UI_UHL_DebugWidget_C")); -} - -void UUHLDebugModuleSubsystem::Initialize(FSubsystemCollectionBase& Collection) -{ - Super::Initialize(Collection); - - // Console variable to control ability input cache debug - static TAutoConsoleVariable GUHLAbilityInputCacheCVar( - TEXT("uhl.Debug.AbilityInputCache"), - 0, - TEXT("Toggle UHL ability input cache debug widget (0/1)"), - ECVF_Default); - - // Install a console variable sink to listen to changes - ConsoleVariableSinkHandle = IConsoleManager::Get().RegisterConsoleVariableSink_Handle(FConsoleCommandDelegate::CreateUObject( - this, - &UUHLDebugModuleSubsystem::OnCVarUHLAbilityInputCacheChanged)); - - // Apply initial value - OnCVarUHLAbilityInputCacheChanged(); -} - -void UUHLDebugModuleSubsystem::Deinitialize() -{ - Super::Deinitialize(); - IConsoleManager::Get().UnregisterConsoleVariableSink_Handle(ConsoleVariableSinkHandle); -} - -void UUHLDebugModuleSubsystem::OnAbilityInputDebugCategoryChanged(bool bEnabled) -{ - if (bEnabled) - { - UUHLAbilitySystemComponent* UHLASC = GetPlayerAbilitySystemComponent(); - - UUHLDebugWidget* DebugWidget = GetOrCreateUHLDebugWidget(); - if (!DebugWidget) return; - DebugWidget->ToggleAbilityInputCache(UHLASC); - } - else - { - if (DebugWidgetInstance) - { - DebugWidgetInstance->ToggleAbilityInputCache(nullptr); - }; - } -} - -UUHLDebugWidget* UUHLDebugModuleSubsystem::GetOrCreateUHLDebugWidget() -{ - if (DebugWidgetInstance) return DebugWidgetInstance; - - APlayerController* PlayerController = GetPlayerController(); - if (!PlayerController) return nullptr; - - UClass* WidgetClass = UHLDebugWidgetClass.LoadSynchronous(); - DebugWidgetInstance = CreateWidget(PlayerController, WidgetClass); - DebugWidgetInstance->AddToViewport(99999999); - - return DebugWidgetInstance; -} - -APlayerController* UUHLDebugModuleSubsystem::GetPlayerController() const -{ - return UGameplayStatics::GetPlayerController(GetWorld(), 0); -} - -UUHLAbilitySystemComponent* UUHLDebugModuleSubsystem::GetPlayerAbilitySystemComponent() const -{ - APlayerController* PlayerController = GetPlayerController(); - if (!PlayerController) return nullptr; - - APawn* Pawn = PlayerController->GetPawn(); - if (!Pawn) return nullptr; - - IAbilitySystemInterface* AbilitySystemInterface = Cast(Pawn); - if (!AbilitySystemInterface) return nullptr; - - UAbilitySystemComponent* ASC = AbilitySystemInterface->GetAbilitySystemComponent(); - if (!ASC) return nullptr; - - UUHLAbilitySystemComponent* UHLASC = Cast(ASC); - if (!UHLASC) return nullptr; - - return UHLASC; -} - -void UUHLDebugModuleSubsystem::OnCVarUHLAbilityInputCacheChanged() -{ - IConsoleVariable* Var = IConsoleManager::Get().FindConsoleVariable(TEXT("uhl.Debug.AbilityInputCache")); - const bool bEnabled = Var ? Var->GetInt() != 0 : false; - - if (GEngine) - { - GEngine->AddOnScreenDebugMessage( - -1, - 2.0f, - bEnabled ? FColor::Green : FColor::Silver, - FString::Printf(TEXT("[UHLDebug] AbilityInputCache %s"), bEnabled ? TEXT("ON") : TEXT("OFF")) - ); - } - - UE_LOG(LogTemp, Log, TEXT("[UHLDebug] AbilityInputCache %s"), bEnabled ? TEXT("ON") : TEXT("OFF")); - - OnAbilityInputDebugCategoryChanged(bEnabled); -} diff --git a/Source/UHLDebug/Private/UI/UHLDebugWidget.cpp b/Source/UHLDebug/Private/UI/UHLDebugWidget.cpp deleted file mode 100644 index 5203b477..00000000 --- a/Source/UHLDebug/Private/UI/UHLDebugWidget.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UI/UHLDebugWidget.h" - -#include "UHLAbilitySystemComponent.h" -#include "Blueprint/WidgetTree.h" -#include "Components/TextBlock.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugWidget) - -void UUHLDebugWidget::ToggleAbilityInputCache(UUHLAbilitySystemComponent* ASC_In) -{ - ASC = ASC_In; - if (ASC.Get()) - { - bShowAbilityInputCacheList = true; - } - else - { - bShowAbilityInputCacheList = false; - } -} - -void UUHLDebugWidget::NativeTick(const FGeometry& MyGeometry, float InDeltaTime) -{ - Super::NativeTick(MyGeometry, InDeltaTime); - - if (bShowAbilityInputCacheList) - { - FString NewText = ""; - TArray AbilityInputCache = ASC->GetAbilityInputCache()->GetAbilityInputCache(); - - for (int32 i = AbilityInputCache.Num() - 1; i >= 0; i--) - { - NewText.Append(AbilityInputCache[i].ToString() + FString("\n")); - } - - AbilityInputCacheTextBlock->SetText(FText::FromString(NewText)); - } -} diff --git a/Source/UHLDebug/Public/UHLDebug.h b/Source/UHLDebug/Public/UHLDebug.h deleted file mode 100644 index a9ec7c0a..00000000 --- a/Source/UHLDebug/Public/UHLDebug.h +++ /dev/null @@ -1,14 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Modules/ModuleManager.h" - - -class FUHLDebugModule : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; diff --git a/Source/UHLDebug/Public/UHLDebugModuleSubsystem.h b/Source/UHLDebug/Public/UHLDebugModuleSubsystem.h deleted file mode 100644 index 61cc84ed..00000000 --- a/Source/UHLDebug/Public/UHLDebugModuleSubsystem.h +++ /dev/null @@ -1,45 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Subsystems/LocalPlayerSubsystem.h" -#include "UHLDebugModuleSubsystem.generated.h" - -// TODO use ULocalPlayer -class UUHLDebugWidget; -class APlayerController; -class UUHLAbilitySystemComponent; - -UCLASS() -class UHLDEBUG_API UUHLDebugModuleSubsystem : public ULocalPlayerSubsystem -{ - GENERATED_BODY() - -public: - UUHLDebugModuleSubsystem(); - -protected: - virtual void Initialize(FSubsystemCollectionBase& Collection) override; - virtual void Deinitialize() override; - -private: - UPROPERTY() - TSoftClassPtr UHLDebugWidgetClass; - UPROPERTY() - UUHLDebugWidget* DebugWidgetInstance = nullptr; - - // TODO use ULocalPlayer - APlayerController* GetPlayerController() const; - UUHLAbilitySystemComponent* GetPlayerAbilitySystemComponent() const; - UUHLDebugWidget* GetOrCreateUHLDebugWidget(); - - UFUNCTION() - void OnAbilityInputDebugCategoryChanged(bool bEnabled); - - // CVar change sink - FConsoleVariableSinkHandle ConsoleVariableSinkHandle; - - // Called when any console variable changes; reads the relevant CVar and toggles - void OnCVarUHLAbilityInputCacheChanged(); -}; diff --git a/Source/UHLDebug/Public/UI/UHLDebugWidget.h b/Source/UHLDebug/Public/UI/UHLDebugWidget.h deleted file mode 100644 index 43a5b93e..00000000 --- a/Source/UHLDebug/Public/UI/UHLDebugWidget.h +++ /dev/null @@ -1,34 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLAbilitySystemComponent.h" -#include "Blueprint/UserWidget.h" -#include "Components/VerticalBox.h" -#include "UHLDebugWidget.generated.h" - - -class UTextBlock; - -/** - * - */ -UCLASS() -class UHLDEBUG_API UUHLDebugWidget : public UUserWidget -{ - GENERATED_BODY() - -public: - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="UHLDebugWidget", meta = (BindWidget)) - UTextBlock* AbilityInputCacheTextBlock; - - virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override; - - UFUNCTION(BlueprintCallable, Category="UHLDebugWidget") - void ToggleAbilityInputCache(UUHLAbilitySystemComponent* ASC_In); - -private: - bool bShowAbilityInputCacheList = false; - TWeakObjectPtr ASC; -}; diff --git a/Source/UHLDebug/UHLDebug.Build.cs b/Source/UHLDebug/UHLDebug.Build.cs deleted file mode 100644 index c8b76965..00000000 --- a/Source/UHLDebug/UHLDebug.Build.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -// Module that helps debugging UnrealHelperLibrary and can depend on all other modules -// Don't mess with UHLDebugSystem - that completely independent system from UHL -// and probably should be other plugin -public class UHLDebug : ModuleRules -{ - public UHLDebug(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - // ... add other public dependencies that you statically link with here ... - "GameplayAbilities", - "GameplayTags", - "GameplayTasks", - "EnhancedInput", - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "CoreUObject", - "Engine", - - "Slate", - "SlateCore", - "UMG", - "DeveloperSettings", - - "UnrealHelperLibrary", - "UHLGAS", - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/Source/UHLDebugSystem/Private/AA_WaitDebugCategoryChange.cpp b/Source/UHLDebugSystem/Private/AA_WaitDebugCategoryChange.cpp deleted file mode 100644 index fb0aeb00..00000000 --- a/Source/UHLDebugSystem/Private/AA_WaitDebugCategoryChange.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "AA_WaitDebugCategoryChange.h" - -#include "UnrealEngine.h" -#include "Engine/Engine.h" -#include "Engine/World.h" -#include "Engine/GameInstance.h" -#include "Kismet/GameplayStatics.h" -#include "UHLDebugSystemSubsystem.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AA_WaitDebugCategoryChange) - -UAA_WaitDebugCategoryChange* UAA_WaitDebugCategoryChange::WaitDebugCategoryChange(const UObject* WorldContext, FGameplayTag DebugCategoryTag, bool bCheckOnStart) -{ - // We must have a valid contextual world for this action, so we don't even make it - // unless we can resolve the UWorld from WorldContext. - UWorld* ContextWorld = GEngine->GetWorldFromContextObject(WorldContext, EGetWorldErrorMode::ReturnNull); - if(!IsValid(ContextWorld) || !ensureAlwaysMsgf(IsValid(WorldContext), TEXT("World Context was not valid."))) - { - return nullptr; - } - - UAA_WaitDebugCategoryChange* NewAction = NewObject(); - NewAction->ContextWorld = ContextWorld; - NewAction->DebugCategoryTagInternal = DebugCategoryTag; - NewAction->bCheckOnStart = bCheckOnStart; - NewAction->RegisterWithGameInstance(ContextWorld->GetGameInstance()); - return NewAction; -} - -void UAA_WaitDebugCategoryChange::Activate() -{ - UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(GetWorld()); - if (IsValid(GameInstance)) - { - UUHLDebugSystemSubsystem* UHLDebugSubsystem = GameInstance->GetSubsystem(); - UHLDebugSubsystem->OnDebugCategoryChanged.AddUniqueDynamic(this, &UAA_WaitDebugCategoryChange::OnDebugCategoryChange); - if (bCheckOnStart) - { - OnDebugCategoryChange(DebugCategoryTagInternal, UHLDebugSubsystem->IsCategoryEnabled(DebugCategoryTagInternal)); - } - } -} - -void UAA_WaitDebugCategoryChange::OnDebugCategoryChange(FGameplayTag DebugCategoryTag, bool bEnabled) -{ - if (DebugCategoryTag != DebugCategoryTagInternal) return; - - if (OnChange.IsBound()) - { - OnChange.Broadcast(bEnabled); - } - - if (bEnabled) - { - if (OnEnabled.IsBound()) - { - OnEnabled.Broadcast(bEnabled); - } - } - else - { - if (OnDisabled.IsBound()) - { - OnDisabled.Broadcast(bEnabled); - } - } -} diff --git a/Source/UHLDebugSystem/Private/Core/UHLDebugSystemGameplayTags.cpp b/Source/UHLDebugSystem/Private/Core/UHLDebugSystemGameplayTags.cpp deleted file mode 100644 index 1597d1c4..00000000 --- a/Source/UHLDebugSystem/Private/Core/UHLDebugSystemGameplayTags.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Core/UHLDebugSystemGameplayTags.h" - -namespace UHLDebugSystemTags -{ - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem, "UHL.DebugCategory.AbilitySystem", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Attributes, "UHL.DebugCategory.AbilitySystem.Attributes", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Effects, "UHL.DebugCategory.AbilitySystem.Effects", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Abilities, "UHL.DebugCategory.AbilitySystem.Abilities", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem, "UHL.DebugCategory.InputSystem.EnhancedInputSystem", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_InputSystem_AbilityInputCache, "UHL.DebugCategory.InputSystem.AbilityInputCache", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_Collisions, "UHL.DebugCategory.Collisions", ""); -} - - diff --git a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilityInputCache.cpp b/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilityInputCache.cpp deleted file mode 100644 index 856c9089..00000000 --- a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilityInputCache.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "DebugCategories/DCC_AbilityInputCache.h" - -#include "HAL/IConsoleManager.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(DCC_AbilityInputCache) - -void UDCC_AbilityInputCache::Activate_Implementation(UObject* ContextObject) -{ - IConsoleVariable* Var = IConsoleManager::Get().FindConsoleVariable(TEXT("uhl.Debug.AbilityInputCache")); - if (Var) - { - Var->Set(1); - } - return Super::Activate_Implementation(ContextObject); -} - -void UDCC_AbilityInputCache::Deactivate_Implementation(UObject* ContextObject) -{ - IConsoleVariable* Var = IConsoleManager::Get().FindConsoleVariable(TEXT("uhl.Debug.AbilityInputCache")); - if (Var) - { - Var->Set(0); - } - Super::Deactivate_Implementation(ContextObject); -} - - diff --git a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Abilities.cpp b/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Abilities.cpp deleted file mode 100644 index 427fec56..00000000 --- a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Abilities.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "DebugCategories/DCC_AbilitySystem_Abilities.h" - -#include "Engine/World.h" -#include "Kismet/KismetSystemLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(DCC_AbilitySystem_Abilities) - -void UDCC_AbilitySystem_Abilities::Activate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("showdebug abilitysystem")); - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("AbilitySystem.Debug.SetCategory Ability")); - return Super::Activate_Implementation(ContextObject); -} - -void UDCC_AbilitySystem_Abilities::Deactivate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("showdebug reset")); - Super::Deactivate_Implementation(ContextObject); -} diff --git a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Attributes.cpp b/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Attributes.cpp deleted file mode 100644 index ac73ee2a..00000000 --- a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Attributes.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "DebugCategories/DCC_AbilitySystem_Attributes.h" - -#include "Engine/World.h" -#include "Kismet/KismetSystemLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(DCC_AbilitySystem_Attributes) - -void UDCC_AbilitySystem_Attributes::Activate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("showdebug abilitysystem")); - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("AbilitySystem.Debug.SetCategory Attributes")); - return Super::Activate_Implementation(ContextObject); -} - -void UDCC_AbilitySystem_Attributes::Deactivate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("showdebug reset")); - Super::Deactivate_Implementation(ContextObject); -} diff --git a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Effects.cpp b/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Effects.cpp deleted file mode 100644 index eef36977..00000000 --- a/Source/UHLDebugSystem/Private/DebugCategories/DCC_AbilitySystem_Effects.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "DebugCategories/DCC_AbilitySystem_Effects.h" - -#include "Engine/World.h" -#include "Kismet/KismetSystemLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(DCC_AbilitySystem_Effects) - -void UDCC_AbilitySystem_Effects::Activate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("showdebug abilitysystem")); - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("AbilitySystem.Debug.SetCategory GameplayEffects")); - return Super::Activate_Implementation(ContextObject); -} - -void UDCC_AbilitySystem_Effects::Deactivate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("showdebug reset")); - Super::Deactivate_Implementation(ContextObject); -} diff --git a/Source/UHLDebugSystem/Private/DebugCategories/DCC_Collisions.cpp b/Source/UHLDebugSystem/Private/DebugCategories/DCC_Collisions.cpp deleted file mode 100644 index badf1450..00000000 --- a/Source/UHLDebugSystem/Private/DebugCategories/DCC_Collisions.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "DebugCategories/DCC_Collisions.h" - -#include "Engine/World.h" -#include "Kismet/KismetSystemLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(DCC_Collisions) - -void UDCC_Collisions::Activate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("ShowFlag.Collision 1")); - Super::Activate_Implementation(ContextObject); -} - -void UDCC_Collisions::Deactivate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("ShowFlag.Collision 0")); - Super::Deactivate_Implementation(ContextObject); -} diff --git a/Source/UHLDebugSystem/Private/DebugCategories/DCC_InputSystem_EnhancedInput.cpp b/Source/UHLDebugSystem/Private/DebugCategories/DCC_InputSystem_EnhancedInput.cpp deleted file mode 100644 index beb4a512..00000000 --- a/Source/UHLDebugSystem/Private/DebugCategories/DCC_InputSystem_EnhancedInput.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "DebugCategories/DCC_InputSystem_EnhancedInput.h" - -#include "Engine/World.h" -#include "Kismet/KismetSystemLibrary.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(DCC_InputSystem_EnhancedInput) - -void UDCC_InputSystem_EnhancedInput::Activate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("showdebug enhancedinput")); - Super::Activate_Implementation(ContextObject); -} - -void UDCC_InputSystem_EnhancedInput::Deactivate_Implementation(UObject* ContextObject) -{ - UKismetSystemLibrary::ExecuteConsoleCommand(ContextObject->GetWorld(), FString("showdebug reset")); - Super::Deactivate_Implementation(ContextObject); -} diff --git a/Source/UHLDebugSystem/Private/DebugCategoryButtonWidget.cpp b/Source/UHLDebugSystem/Private/DebugCategoryButtonWidget.cpp deleted file mode 100644 index 53197f95..00000000 --- a/Source/UHLDebugSystem/Private/DebugCategoryButtonWidget.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "DebugCategoryButtonWidget.h" - -#include "Engine/GameInstance.h" -#include "Blueprint/WidgetTree.h" -#include "Components/Button.h" -#include "Components/ButtonSlot.h" -#include "Components/CheckBox.h" -#include "Components/HorizontalBox.h" -#include "Components/HorizontalBoxSlot.h" -#include "Components/TextBlock.h" -#include "Kismet/GameplayStatics.h" -#include "UHLDebugCategory.h" -#include "UHLDebugSystemSubsystem.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(DebugCategoryButtonWidget) - -void UDebugCategoryButtonWidget::SetUp(const FUHLDebugCategory& UHLDebugCategory_In) -{ - UHLDebugCategory = UHLDebugCategory_In; - TextBlock->SetText(FText::FromString(UHLDebugCategory_In.Name)); - UpdateCheckboxState(UHLDebugCategory_In.GetIsEnabled()); - Button->SetBackgroundColor(UHLDebugCategory.Color); - Button->OnClicked.AddUniqueDynamic(this, &UDebugCategoryButtonWidget::OnButtonClicked); - UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(GetWorld()); - if (GameInstance) - { - UUHLDebugSystemSubsystem* UHLDebugSubsystem = GameInstance->GetSubsystem(); - UHLDebugSubsystem->OnDebugCategoryChanged.AddUniqueDynamic(this, &UDebugCategoryButtonWidget::OnDebugCategoryChanged); - } -} - -void UDebugCategoryButtonWidget::UpdateCheckboxState(bool bEnabled_In) -{ - CheckBox->SetCheckedState(bEnabled_In ? ECheckBoxState::Checked : ECheckBoxState::Unchecked); -} - -bool UDebugCategoryButtonWidget::Initialize() -{ - bool bIsWidgetInitialized = Super::Initialize(); - - // more correct way to avoid error. than in original post. - if(!HasAnyFlags(RF_ClassDefaultObject)) - { - // root have to be initialized in Initialize function, otherwise it will not work, donno exactly why. - Button = WidgetTree->ConstructWidget(); - WidgetTree->RootWidget = Button; - } - return bIsWidgetInitialized; -} - -void UDebugCategoryButtonWidget::NativePreConstruct() -{ - Super::NativeConstruct(); - - if (!WidgetTree) return; - - HorizontalBox = WidgetTree->ConstructWidget(); - CheckBox = WidgetTree->ConstructWidget(); - TextBlock = WidgetTree->ConstructWidget(); - if (!HorizontalBox || !CheckBox || !TextBlock) return; - - TextBlock->SetShadowOffset(FVector2D(1.0f, 1.0f)); - TextBlock->SetShadowColorAndOpacity(FColor::FromHex("#000000FF")); - TextBlock->SetVisibility(ESlateVisibility::HitTestInvisible); - CheckBox->SetVisibility(ESlateVisibility::HitTestInvisible); - CheckBox->SetIsEnabled(false); - FCheckBoxStyle CheckBoxStyle = CheckBox->GetWidgetStyle(); - CheckBoxStyle.CheckedImage.TintColor = FColor::Black; - CheckBoxStyle.ForegroundColor = FColor::White; - CheckBoxStyle.CheckedForeground = FColor::White; - CheckBoxStyle.HoveredForeground = FColor::White; - CheckBoxStyle.PressedForeground = FColor::White; - CheckBoxStyle.UndeterminedForeground = FColor::White; - CheckBoxStyle.CheckedHoveredForeground = FColor::White; - CheckBoxStyle.CheckedPressedForeground = FColor::White; - CheckBox->SetWidgetStyle(CheckBoxStyle); - HorizontalBox->SetVisibility(ESlateVisibility::HitTestInvisible); - - UButtonSlot* HorizontalBoxButtonSlot = Cast(Button->AddChild(HorizontalBox)); - UHorizontalBoxSlot* CheckboxHorizontalBoxSlot = Cast(HorizontalBox->AddChild(CheckBox)); - UHorizontalBoxSlot* TextBlockHorizontalBoxSlot = Cast(HorizontalBox->AddChild(TextBlock)); - if (!HorizontalBoxButtonSlot || !CheckboxHorizontalBoxSlot || !TextBlockHorizontalBoxSlot) return; - - HorizontalBoxButtonSlot->SetHorizontalAlignment(HAlign_Left); - CheckboxHorizontalBoxSlot->SetPadding(FMargin(0, 0, 10, 0)); - TextBlockHorizontalBoxSlot->SetHorizontalAlignment(HAlign_Left); - TextBlockHorizontalBoxSlot->SetVerticalAlignment(VAlign_Top); -} - -void UDebugCategoryButtonWidget::OnButtonClicked() -{ - if (OnMadeClick.IsBound()) - { - OnMadeClick.Broadcast(this, UHLDebugCategory.Tags.First()); - } -} - -void UDebugCategoryButtonWidget::OnDebugCategoryChanged(FGameplayTag DebugCategoryTag_In, bool bEnabled_In) -{ - if (UHLDebugCategory.Tags.First() == DebugCategoryTag_In) - { - UpdateCheckboxState(bEnabled_In); - } -} diff --git a/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp b/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp deleted file mode 100644 index e20aec89..00000000 --- a/Source/UHLDebugSystem/Private/Development/UHLDebugSystemSettings.cpp +++ /dev/null @@ -1,256 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Development/UHLDebugSystemSettings.h" - -#include "Core/UHLDebugSystemGameplayTags.h" -#include "UHLDebugCategory.h" -#include "UHLDebugSystemSubsystem.h" -#include "DebugCategories/DCC_AbilitySystem_Abilities.h" -#include "DebugCategories/DCC_AbilitySystem_Attributes.h" -#include "DebugCategories/DCC_AbilitySystem_Effects.h" -#include "DebugCategories/DCC_Collisions.h" -#include "DebugCategories/DCC_InputSystem_EnhancedInput.h" -#include "DebugCategories/DCC_AbilityInputCache.h" -#include "UHLDebugSystemBuildUtils.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugSystemSettings) - -void UUHLDebugSystemSettings::OnEnabledDebugCategoryEntryChanged( - FGameplayTag ChangedDebugCategoryTag, bool bEnabled) -{ - if (ChangedDebugCategoryTag != FGameplayTag::EmptyTag) - { - FUHLDebugCategory* UHLDebugCategory = DebugCategories.FindByPredicate([=](const FUHLDebugCategory& DebugCategory) - { - return DebugCategory.Tags.HasAnyExact(FGameplayTagContainer(ChangedDebugCategoryTag)); - }); - if (UHLDebugCategory != nullptr) - { - - for (FGameplayTag BlockedTag : UHLDebugCategory->Blocks.GetGameplayTagArray()) - { - for (TTuple& EnabledDebugCategory : EnabledDebugCategories) - { - if (!EnabledDebugCategory.Key.MatchesTag(ChangedDebugCategoryTag) - && EnabledDebugCategory.Key.MatchesTag(BlockedTag)) - { - EnabledDebugCategory.Value = false; - } - } - } - - for (FGameplayTag RequiredDebugCategoryTag : UHLDebugCategory->RequiredDebugCategories.GetGameplayTagArray()) - { - for (TTuple& EnabledDebugCategory : EnabledDebugCategories) - { - if (!EnabledDebugCategory.Key.MatchesTag(ChangedDebugCategoryTag) - && EnabledDebugCategory.Key.MatchesTag(RequiredDebugCategoryTag)) - { - EnabledDebugCategory.Value = true; - } - } - } - - // UpdateEnabledDebugCategoriesList(); - } - } - - EnabledDebugCategories[ChangedDebugCategoryTag] = bEnabled; -} - -TArray UUHLDebugSystemSettings::GET_DEFAULT_UHL_DEBUG_CATEGORIES() -{ - TArray DEFAULT_UHL_DEBUG_CATEGORIES = {}; - - FUHLDebugCategory AbilitySystemAttributesDebugCategory = {}; - AbilitySystemAttributesDebugCategory.Name = "AbilitySystem Attributes"; - AbilitySystemAttributesDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem_Attributes }; - AbilitySystemAttributesDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem); - AbilitySystemAttributesDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); - AbilitySystemAttributesDebugCategory.Components = { UDCC_AbilitySystem_Attributes::StaticClass() }; - AbilitySystemAttributesDebugCategory.bIsDefaultUHLDebugCategory = true; - DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilitySystemAttributesDebugCategory); - - FUHLDebugCategory AbilitySystemEffectsDebugCategory = {}; - AbilitySystemEffectsDebugCategory.Name = "AbilitySystem Effects"; - AbilitySystemEffectsDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem_Effects }; - AbilitySystemEffectsDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem); - AbilitySystemEffectsDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); - AbilitySystemEffectsDebugCategory.Components = { UDCC_AbilitySystem_Effects::StaticClass() }; - AbilitySystemEffectsDebugCategory.bIsDefaultUHLDebugCategory = true; - DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilitySystemEffectsDebugCategory); - - FUHLDebugCategory AbilitySystemAbilitiesDebugCategory = {}; - AbilitySystemAbilitiesDebugCategory.Name = "AbilitySystem Abilities"; - AbilitySystemAbilitiesDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem_Abilities }; - AbilitySystemAbilitiesDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem); - AbilitySystemAbilitiesDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); - AbilitySystemAbilitiesDebugCategory.Components = { UDCC_AbilitySystem_Abilities::StaticClass() }; - AbilitySystemAbilitiesDebugCategory.bIsDefaultUHLDebugCategory = true; - DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilitySystemAbilitiesDebugCategory); - - FUHLDebugCategory EnhancedInputSystemDebugCategory = {}; - EnhancedInputSystemDebugCategory.Name = "EnhancedInputSystem"; - EnhancedInputSystemDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem }; - EnhancedInputSystemDebugCategory.Blocks.AddTag(UHLDebugSystemTags::TAG_UHL_DebugCategory_AbilitySystem); - EnhancedInputSystemDebugCategory.Components = { UDCC_InputSystem_EnhancedInput::StaticClass() }; - EnhancedInputSystemDebugCategory.bIsDefaultUHLDebugCategory = true; - DEFAULT_UHL_DEBUG_CATEGORIES.Add(EnhancedInputSystemDebugCategory); - - FUHLDebugCategory AbilityInputCacheDebugCategory = {}; - AbilityInputCacheDebugCategory.Name = "AbilityInputCache"; - AbilityInputCacheDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_InputSystem_AbilityInputCache }; - AbilityInputCacheDebugCategory.bIsDefaultUHLDebugCategory = true; - AbilityInputCacheDebugCategory.Components = { UDCC_AbilityInputCache::StaticClass() }; - DEFAULT_UHL_DEBUG_CATEGORIES.Add(AbilityInputCacheDebugCategory); - - FUHLDebugCategory CollisionsDebugCategory = {}; - CollisionsDebugCategory.Name = "Collisions"; - CollisionsDebugCategory.Tags = FGameplayTagContainer{ UHLDebugSystemTags::TAG_UHL_DebugCategory_Collisions }; - EnhancedInputSystemDebugCategory.Components = { UDCC_Collisions::StaticClass() }; - CollisionsDebugCategory.bIsDefaultUHLDebugCategory = true; - DEFAULT_UHL_DEBUG_CATEGORIES.Add(CollisionsDebugCategory); - - return DEFAULT_UHL_DEBUG_CATEGORIES; -} - -#if WITH_EDITOR -void UUHLDebugSystemSettings::PostInitProperties() -{ - Super::PostInitProperties(); - - UpdateDefaultUHLDebugCategories(); - - for (const FUHLDebugCategory& DebugCategory : DebugCategories) - { - if (DebugCategory.ByDefaultEnabledInBuildTypes.Contains(GetCurrentUHLBuildType())) - { - EnabledDebugCategories.Emplace(DebugCategory.Tags.First(), true); - } - } - - RecreateEnabledDebugCategoriesList(); -} - -void UUHLDebugSystemSettings::PreEditChange(FProperty* PropertyAboutToChange) -{ - if (PropertyAboutToChange->GetName() == GET_MEMBER_NAME_CHECKED(UUHLDebugSystemSettings, EnabledDebugCategories)) - { - LastEnabledDebugCategories = TMap(EnabledDebugCategories); - } - - Super::PreEditChange(PropertyAboutToChange); -} - -void UUHLDebugSystemSettings::PostEditChangeChainProperty(struct FPropertyChangedChainEvent& PropertyChangedEvent) -{ - FName PropertyName = PropertyChangedEvent.GetPropertyName(); - - bool bEditingEnabledCategoriesKey = PropertyName == "EnabledDebugCategories_Key"; - if (bEditingEnabledCategoriesKey || (EnabledDebugCategories.IsEmpty() && !DebugCategories.IsEmpty())) - { - RecreateEnabledDebugCategoriesList(); - return; - } - - Super::PostEditChangeChainProperty(PropertyChangedEvent); - - bool bEditingEnabledDebugCategories = - PropertyName == GET_MEMBER_NAME_CHECKED(UUHLDebugSystemSettings, EnabledDebugCategories) - && !LastEnabledDebugCategories.IsEmpty() - && !EnabledDebugCategories.IsEmpty() - && LastEnabledDebugCategories.Num() == EnabledDebugCategories.Num(); - - // disable other DebugCategories by "Blocks" tags - if (bEditingEnabledDebugCategories) - { - bool NewValue = false; - FGameplayTag ChangedDebugCategoryTag = FGameplayTag::EmptyTag; - for (const TTuple& EnabledDebugCategory : EnabledDebugCategories) - { - if (LastEnabledDebugCategories[EnabledDebugCategory.Key] != EnabledDebugCategory.Value) - { - NewValue = EnabledDebugCategory.Value; - ChangedDebugCategoryTag = EnabledDebugCategory.Key; - } - } - - OnEnabledDebugCategoryEntryChanged(ChangedDebugCategoryTag, NewValue); - } - - if (PropertyName == GET_MEMBER_NAME_CHECKED(UUHLDebugSystemSettings, bExcludeDefaultUHLDebugCategories)) - { - UpdateDefaultUHLDebugCategories(); - RecreateEnabledDebugCategoriesList(); - } - - if (PropertyName == GET_MEMBER_NAME_CHECKED(UUHLDebugSystemSettings, DebugCategories) - || PropertyChangedEvent.PropertyChain.GetActiveMemberNode()->GetValue()->GetName() == GET_MEMBER_NAME_CHECKED(UUHLDebugSystemSettings, DebugCategories)) - { - RecreateEnabledDebugCategoriesList(); - } -} -#endif - -void UUHLDebugSystemSettings::RecreateEnabledDebugCategoriesList() -{ - TMap CopyOfEnabledDebugCategories = TMap(EnabledDebugCategories); - - EnabledDebugCategories.Empty(); - for (const FUHLDebugCategory& DebugCategory : DebugCategories) - { - for (FGameplayTag GameplayTag : DebugCategory.Tags.GetGameplayTagArray()) - { - bool* KeyVal = CopyOfEnabledDebugCategories.Find(GameplayTag); - EnabledDebugCategories.Add(GameplayTag, KeyVal ? *KeyVal : false); - } - } -} - -void UUHLDebugSystemSettings::UpdateEnabledDebugCategoriesList() -{ - for (const FUHLDebugCategory& DebugCategory : DebugCategories) - { - TArray Keys; - EnabledDebugCategories.GetKeys(Keys); - - FGameplayTagContainer KeysContainer = FGameplayTagContainer::CreateFromArray(Keys); - if (!KeysContainer.HasAll(DebugCategory.Tags)) - { - for (FGameplayTag GameplayTag : DebugCategory.Tags.GetGameplayTagArray()) - { - if (GameplayTag.MatchesAny(KeysContainer)) - { - continue; - } - EnabledDebugCategories.Add(GameplayTag, false); - } - } - } -} - -void UUHLDebugSystemSettings::UpdateDefaultUHLDebugCategories() -{ - if (bExcludeDefaultUHLDebugCategories) - { - DebugCategories.RemoveAll([=](const FUHLDebugCategory& DebugCategory) - { - return DebugCategory.bIsDefaultUHLDebugCategory; - }); - } - else - { - for (const FUHLDebugCategory& DefaultUHLDebugCategory : GET_DEFAULT_UHL_DEBUG_CATEGORIES()) - { - FUHLDebugCategory* FoundDebugCategory = DebugCategories.FindByPredicate([=](const FUHLDebugCategory& Category) - { - return Category.Tags == DefaultUHLDebugCategory.Tags; - }); - if (!FoundDebugCategory) - { - DebugCategories.Add(DefaultUHLDebugCategory); - } - } - } -} diff --git a/Source/UHLDebugSystem/Private/UHLDebugBlueprintLibrary.cpp b/Source/UHLDebugSystem/Private/UHLDebugBlueprintLibrary.cpp deleted file mode 100644 index ffbafc44..00000000 --- a/Source/UHLDebugSystem/Private/UHLDebugBlueprintLibrary.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLDebugBlueprintLibrary.h" - -#include "GameplayTagsManager.h" -#include "Misc/ConfigCacheIni.h" -#include "Animation/AnimMontage.h" -#include "DrawDebugHelpers.h" -#include "UHLDebugSystemSubsystem.h" -#include "Engine/World.h" -#include "Engine/GameInstance.h" -#include "Kismet/GameplayStatics.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugBlueprintLibrary) - -bool UUHLDebugBlueprintLibrary::IsUHLDebugCategoryEnabled(UObject* WorldContextObject, FGameplayTag DebugCategoryGameplayTag) -{ - UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(WorldContextObject); - if (!IsValid(GameInstance)) - { - return false; - } - - UUHLDebugSystemSubsystem* UHLDebugSubsystem = GameInstance->GetSubsystem(); - if (!IsValid(UHLDebugSubsystem)) - { - return false; - } - - return UHLDebugSubsystem->IsCategoryEnabled(DebugCategoryGameplayTag); -} diff --git a/Source/UHLDebugSystem/Private/UHLDebugCategory.cpp b/Source/UHLDebugSystem/Private/UHLDebugCategory.cpp deleted file mode 100644 index 493d255c..00000000 --- a/Source/UHLDebugSystem/Private/UHLDebugCategory.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLDebugCategory.h" - -#include "Templates/SubclassOf.h" -#include "UHLDebugCategoryComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugCategory) - -bool FUHLDebugCategory::TryEnable(UObject* ContextObj) -{ - bool bResult = false; - - int32 ComponentsActivated = 0; - int32 ComponentsRequiredToActivate = Components.Num(); - for (TSubclassOf ComponentClass : Components) - { - if (!ComponentClass) - { - ComponentsRequiredToActivate--; - continue; - }; - - UUHLDebugCategoryComponent* Component = GetOrCreateDebugCategoryComponent(ComponentClass, ContextObj); - if (Component->CanActivate(ContextObj)) - { - Component->Activate(ContextObj); - ComponentsActivated++; - } - } - if (ComponentsActivated == ComponentsRequiredToActivate) - { - bResult = true; - } - - bIsEnabled = true; - return bResult; -} - -void FUHLDebugCategory::TryDisable(UObject* ContextObj) -{ - for (UUHLDebugCategoryComponent* InstancedComponent : InstancedComponents) - { - if (InstancedComponent) - { - InstancedComponent->Deactivate(ContextObj); - } - } - bIsEnabled = false; -} - -UUHLDebugCategoryComponent* FUHLDebugCategory::GetOrCreateDebugCategoryComponent(TSubclassOf ComponentClass, UObject* ContextObj) -{ - UUHLDebugCategoryComponent* Component = nullptr; - UUHLDebugCategoryComponent** FoundComponent = GetDebugCategoryComponent(ComponentClass, ContextObj); - if (!FoundComponent) - { - Component = NewObject(ContextObj, ComponentClass); - InstancedComponents.Add(Component); - } - else - { - Component = *FoundComponent; - } - - return Component; -} - -UUHLDebugCategoryComponent** FUHLDebugCategory::GetDebugCategoryComponent(TSubclassOf ComponentClass, UObject* ContextObj) -{ - return InstancedComponents.FindByPredicate([=](UUHLDebugCategoryComponent* DebugCategoryComponent) - { - return DebugCategoryComponent->GetClass() == ComponentClass; - }); -} diff --git a/Source/UHLDebugSystem/Private/UHLDebugCategoryComponent.cpp b/Source/UHLDebugSystem/Private/UHLDebugCategoryComponent.cpp deleted file mode 100644 index 6dde961b..00000000 --- a/Source/UHLDebugSystem/Private/UHLDebugCategoryComponent.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UHLDebugCategoryComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugCategoryComponent) - -bool UUHLDebugCategoryComponent::CanActivate_Implementation(UObject* ContextObject) const -{ - return true; -} - -void UUHLDebugCategoryComponent::Activate_Implementation(UObject* ContextObject) -{ -} - -void UUHLDebugCategoryComponent::Deactivate_Implementation(UObject* ContextObject) -{ -} diff --git a/Source/UHLDebugSystem/Private/UHLDebugSystem.cpp b/Source/UHLDebugSystem/Private/UHLDebugSystem.cpp deleted file mode 100644 index 5664e47e..00000000 --- a/Source/UHLDebugSystem/Private/UHLDebugSystem.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLDebugSystem.h" - -#include "Misc/Paths.h" -#include "GameplayTagsManager.h" -#include "Misc/ConfigCacheIni.h" -#include "Development/UHLDebugSystemSettings.h" - -#define LOCTEXT_NAMESPACE "FUHLDebugSystemModule" - -void FUHLDebugSystemModule::StartupModule() -{ - MigrateOldSettingsFromMainModule(); -} - -void FUHLDebugSystemModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. -} - -void FUHLDebugSystemModule::MigrateOldSettingsFromMainModule() -{ - bool bMigrationDone = false; - GConfig->GetBool(TEXT("/Script/UHLDebugSystem.UHLDebugSystemSettings"), TEXT("bMigrationFromOldSettingsDone"), bMigrationDone, GGameIni); - if (!bMigrationDone) - { - // Copy all keys from old section if it exists - if (GConfig->DoesSectionExist(TEXT("/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings"), GGameIni)) - { - TArray Keys; - GConfig->GetSection(TEXT("/Script/UnrealHelperLibrary.UHLDebugSubsystemSettings"), Keys, GGameIni); - for (const FString& KeyLine : Keys) - { - FString Key, Value; - if (KeyLine.Split(TEXT("="), &Key, &Value)) - { - GConfig->SetString(TEXT("/Script/UHLDebugSystem.UHLDebugSystemSettings"), *Key, *Value, GGameIni); - } - } - } - GConfig->SetBool(TEXT("/Script/UHLDebugSystem.UHLDebugSystemSettings"), TEXT("bMigrationFromOldSettingsDone"), true, GGameIni); - GConfig->Flush(false, GGameIni); - } - - UUHLDebugSystemSettings* Settings = GetMutableDefault(); - if (Settings) - { - Settings->ReloadConfig(); - // Settings->SaveConfig(); - } -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLDebugSystemModule, UHLDebugSystem) diff --git a/Source/UHLDebugSystem/Private/UHLDebugSystemSubsystem.cpp b/Source/UHLDebugSystem/Private/UHLDebugSystemSubsystem.cpp deleted file mode 100644 index 76c02eaf..00000000 --- a/Source/UHLDebugSystem/Private/UHLDebugSystemSubsystem.cpp +++ /dev/null @@ -1,284 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UHLDebugSystemSubsystem.h" - -#include "Logging/LogMacros.h" -#include "GameFramework/Pawn.h" -#include "GameFramework/Controller.h" -#include "GameFramework/PlayerController.h" -#include "Development/UHLDebugSystemSettings.h" -#include "UHLDebugSystemTypes.h" -#include "UHLDebugSystemBuildUtils.h" -#if WITH_EDITOR -#include "Framework/Notifications/NotificationManager.h" -#include "Widgets/Notifications/SNotificationList.h" -#endif - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugSystemSubsystem) - -UUHLDebugSystemSubsystem::UUHLDebugSystemSubsystem() -{ -} - -void UUHLDebugSystemSubsystem::Initialize(FSubsystemCollectionBase& Collection) -{ - Super::Initialize(Collection); - - if (bSetupped) return; - bSetupped = true; - UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::Initialize] Start")); - - const UUHLDebugSystemSettings* DeveloperSettings = GetDefault(); - DebugCategories = DeveloperSettings->DebugCategories; - - for (const TTuple& EnabledDebugCategory : DeveloperSettings->EnabledDebugCategories) - { - const FUHLDebugCategory* UHLDebugCategory = DebugCategories.FindByPredicate([=](const FUHLDebugCategory& DebugCategory) - { - return DebugCategory.Tags.HasAnyExact(FGameplayTagContainer(EnabledDebugCategory.Key)); - }); - if (EnabledDebugCategory.Value == true && UHLDebugCategory != nullptr && !UHLDebugCategory->bRequiresPlayerControllerToEnable) - { - EnableDebugCategory(EnabledDebugCategory.Key, EnabledDebugCategory.Value); - } - }; - -EUHLDebugSystemBuildType BuildType = GetCurrentUHLBuildType(); -if (BuildType != EUHLDebugSystemBuildType::Editor) - { - UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::Initialize] BuildType not editor so check DebugCategories that should be enabled")); - for (const FUHLDebugCategory& DebugCategory : DebugCategories) - { - UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::Initialize] EnableDebugCategory %s"), *DebugCategory.Tags.First().ToString()); - if (DebugCategory.ByDefaultEnabledInBuildTypes.Contains(BuildType)) - { - EnableDebugCategory(DebugCategory.Tags.First(), true); - } - } - } - UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUp] Finish")); - - FWorldDelegates::OnPostWorldInitialization.AddUObject(this, &ThisClass::OnPostWorldInit); - FWorldDelegates::OnWorldBeginTearDown.AddUObject(this, &ThisClass::OnWorldBeginTearDown); -} - -void UUHLDebugSystemSubsystem::Deinitialize() -{ - FWorldDelegates::OnPostWorldInitialization.RemoveAll(this); - - if (UWorld* World = GetWorld()) - { - if (ActorSpawnedDelegateHandle.IsValid()) - { - World->RemoveOnActorSpawnedHandler(ActorSpawnedDelegateHandle); - } - } - - for (FUHLDebugCategory& DebugCategory : DebugCategories) - { - // if (DebugCategory.bForceComponentsDeactivateOnEnd) - if (DebugCategory.GetIsEnabled()) - { - DebugCategory.TryDisable(this); - } - } - - Super::Deinitialize(); -} - -void UUHLDebugSystemSubsystem::OnActorSpawned(AActor* SpawnedActor) -{ - if (AController* Controller = Cast(SpawnedActor)) - { - // Pawn spawned, check if it’s controlled by a player - if (APlayerController* PC = Cast(Controller)) - { - UE_LOG(LogTemp, Log, TEXT("Pawn %s began play, controlled by PlayerController %s"), *Controller->GetName(), *PC->GetName()); - // Handle the player/pawn here (e.g., subscribe to further events, spawn effects, etc.) - - // unsubscribe as fast as possible - if (UWorld* World = GetWorld()) - { - if (ActorSpawnedDelegateHandle.IsValid()) - { - World->RemoveOnActorSpawnedHandler(ActorSpawnedDelegateHandle); - } - } - SetUpCategoriesThatRequiresPlayerController(); - } - } -} - -void UUHLDebugSystemSubsystem::SetUpCategoriesThatRequiresPlayerController() -{ - if (bSetUpCategoriesThatRequiresPlayerController) return; - UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] Start")); - bSetUpCategoriesThatRequiresPlayerController = true; - - const UUHLDebugSystemSettings* DeveloperSettings = GetDefault(); - - for (const TTuple& EnabledDebugCategory : DeveloperSettings->EnabledDebugCategories) - { - const FUHLDebugCategory* UHLDebugCategory = DebugCategories.FindByPredicate([=](const FUHLDebugCategory& DebugCategory) - { - return DebugCategory.Tags.HasAnyExact(FGameplayTagContainer(EnabledDebugCategory.Key)); - }); - if (EnabledDebugCategory.Value == true && UHLDebugCategory != nullptr && UHLDebugCategory->bRequiresPlayerControllerToEnable) - { - EnableDebugCategory(EnabledDebugCategory.Key, EnabledDebugCategory.Value); - } - }; - - // activate debug categories that "bSetUpCategoriesThatRequiresPlayerController" and should be enabled in BuildType -EUHLDebugSystemBuildType BuildType = GetCurrentUHLBuildType(); -if (BuildType != EUHLDebugSystemBuildType::Editor) - { - UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] BuildType not editor so check DebugCategories that should be enabled")); - for (const FUHLDebugCategory& DebugCategory : DebugCategories) - { - if (DebugCategory.ByDefaultEnabledInBuildTypes.Contains(BuildType)) - { - UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] EnableDebugCategory %s"), *DebugCategory.Tags.First().ToString()); - EnableDebugCategory(DebugCategory.Tags.First(), true); - } - } - } - - bIsSetuping = false; - UE_LOG(LogTemp, Warning, TEXT("[UUHLDebugSubsystem::SetUpCategoriesThatRequiresPlayerController] Finish")); -} - -bool UUHLDebugSystemSubsystem::IsCategoryEnabled(const FGameplayTag DebugCategoryTag) const -{ - const FUHLDebugCategory* UHLDebugCategory = DebugCategories.FindByPredicate([=](const FUHLDebugCategory& DebugCategory) - { - return DebugCategory.Tags.HasAnyExact(FGameplayTagContainer(DebugCategoryTag)); - }); - if (UHLDebugCategory != nullptr) - { - return UHLDebugCategory->GetIsEnabled(); - } - return false; -} - -void UUHLDebugSystemSubsystem::EnableDebugCategory(const FGameplayTag DebugCategoryTag, bool bEnable) -{ - bool bEnabled = bEnable; - - FUHLDebugCategory* UHLDebugCategory = DebugCategories.FindByPredicate([=](const FUHLDebugCategory& DebugCategory) - { - return DebugCategory.Tags.HasAnyExact(FGameplayTagContainer(DebugCategoryTag)); - }); - if (UHLDebugCategory == nullptr) return; - if (UHLDebugCategory->bRequiresPlayerControllerToEnable && !bSetUpCategoriesThatRequiresPlayerController) return; - if (UHLDebugCategory->GetIsEnabled() && bEnable) return; - if (!UHLDebugCategory->GetIsEnabled() && !bEnable) return; - - if (bEnable) - { - // Disable blocked DebugCategories - for (const FUHLDebugCategory& DebugCategory : DebugCategories) - { - if (DebugCategory != *UHLDebugCategory - && !UHLDebugCategory->Blocks.IsEmpty() - && DebugCategory.Tags.HasAny(UHLDebugCategory->Blocks)) - { - EnableDebugCategory(DebugCategory.Tags.First(), false); - } - } - - // Enable required DebugCategories - for (const FUHLDebugCategory& DebugCategory : DebugCategories) - { - if (DebugCategory != *UHLDebugCategory - && !UHLDebugCategory->RequiredDebugCategories.IsEmpty() - && DebugCategory.Tags.HasAny(UHLDebugCategory->RequiredDebugCategories)) - { - EnableDebugCategory(DebugCategory.Tags.First(), true); - } - } - - bEnabled = UHLDebugCategory->TryEnable(this); - } - else - { - if (!bIsSetuping) - // TODO remove - // || (bIsSetuping && UHLDebugCategory->bForceComponentsDeactivateOnEnd)) - { - // Check that its not required by some other DebugCategory - bool bHasDependantDebugCategory = false; - FUHLDebugCategory DependantDebugCategory; - for (const FUHLDebugCategory& DebugCategory : DebugCategories) - { - if (DebugCategory != *UHLDebugCategory - && !DebugCategory.RequiredDebugCategories.IsEmpty() - && DebugCategory.RequiredDebugCategories.HasAny(UHLDebugCategory->Tags)) - { - bHasDependantDebugCategory = true; - DependantDebugCategory = DebugCategory; - // EnableDebugCategory(DebugCategory.Tags.First(), true); - } - } - if (bHasDependantDebugCategory) - { - DependantDebugCategory.TryDisable(this); - - #if WITH_EDITOR - // Create the notification info - FText ToastText = FText::Format(FTextFormat::FromString(TEXT("UHLDebugSystem: Dependant DebugCategory {0} also disabled")), FText::FromString(DependantDebugCategory.Name)); - FNotificationInfo Info(ToastText); - Info.bFireAndForget = true; // auto‑expire - Info.FadeOutDuration = 0.5f; // smooth fade - Info.ExpireDuration = 5.0f; // seconds on‑screen - Info.bUseThrobber = false; // no spinning icon - Info.bUseLargeFont = false; - Info.bUseSuccessFailIcons = false; // we’ll show a warning icon manually - - // Optionally give it a warning icon on the left: - static const FName WarningIconName = TEXT("Icons.Warning"); - Info.Image = FCoreStyle::Get().GetBrush(WarningIconName); - - // Fire it off - FSlateNotificationManager::Get().AddNotification(Info); - #endif - } - - UHLDebugCategory->TryDisable(this); - } - } - - for (FGameplayTag GameplayTag : UHLDebugCategory->Tags.GetGameplayTagArray()) - { - OnDebugCategoryChanged.Broadcast(GameplayTag, bEnabled); - } -} - -void UUHLDebugSystemSubsystem::ToggleDebugCategory(const FGameplayTag DebugCategoryTag) -{ - EnableDebugCategory(DebugCategoryTag, !IsCategoryEnabled(DebugCategoryTag)); -} - -const FUHLDebugCategory& UUHLDebugSystemSubsystem::GetDebugCategoryByTag(const FGameplayTag DebugCategoryTag) const -{ - const FUHLDebugCategory* UHLDebugCategory = DebugCategories.FindByPredicate([=](const FUHLDebugCategory& DebugCategory) - { - return DebugCategory.Tags.HasAnyExact(FGameplayTagContainer(DebugCategoryTag)); - }); - return *UHLDebugCategory; -} - -void UUHLDebugSystemSubsystem::OnPostWorldInit(UWorld* InWorld, const UWorld::InitializationValues IVS) -{ - if (InWorld->IsGameWorld()) - { - FOnActorSpawned::FDelegate ActorSpawnedDelegate = FOnActorSpawned::FDelegate::CreateUObject(this, &UUHLDebugSystemSubsystem::OnActorSpawned); - ActorSpawnedDelegateHandle = InWorld->AddOnActorSpawnedHandler(ActorSpawnedDelegate); - } -} - -void UUHLDebugSystemSubsystem::OnWorldBeginTearDown(UWorld* World) -{ - World->RemoveOnActorSpawnedHandler(ActorSpawnedDelegateHandle); -} \ No newline at end of file diff --git a/Source/UHLDebugSystem/Private/UI/UHLDebugCategoriesListWidget.cpp b/Source/UHLDebugSystem/Private/UI/UHLDebugCategoriesListWidget.cpp deleted file mode 100644 index f7e4df26..00000000 --- a/Source/UHLDebugSystem/Private/UI/UHLDebugCategoriesListWidget.cpp +++ /dev/null @@ -1,81 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UI/UHLDebugCategoriesListWidget.h" - -#include "Engine/GameInstance.h" -#include "Blueprint/WidgetTree.h" -#include "Components/ButtonSlot.h" -#include "Components/ScrollBoxSlot.h" -#include "Development/UHLDebugSystemSettings.h" -#include "Kismet/GameplayStatics.h" -#include "DebugCategoryButtonWidget.h" -#include "UHLDebugSystemSubsystem.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLDebugCategoriesListWidget) - -bool UUHLDebugCategoriesListWidget::Initialize() -{ - bool bIsWidgetInitialized = Super::Initialize(); - - if(!HasAnyFlags(RF_ClassDefaultObject)) - { - // root have to be initialized in Initialize function, otherwise it will not work, donno exactly why. - ScrollBox = WidgetTree->ConstructWidget(); - ScrollBox->SetConsumeMouseWheel(EConsumeMouseWheel::Always); - ScrollBox->SetVisibility(ESlateVisibility::Visible); - WidgetTree->RootWidget = ScrollBox; - } - - return bIsWidgetInitialized; -} - -void UUHLDebugCategoriesListWidget::NativeConstruct() -{ - Super::NativeConstruct(); - - ScrollBox->ClearChildren(); - - UHLDebugSubsystem = UGameplayStatics::GetGameInstance(GetWorld())->GetSubsystem(); - - const TArray& UHLDebugCategories = UHLDebugSubsystem->GetDebugCategories(); - for (const FUHLDebugCategory& UHLDebugCategory : UHLDebugCategories) - { - UDebugCategoryButtonWidget* UHLDebugCategoryButton = WidgetTree->ConstructWidget(); - UScrollBoxSlot* ScrollBoxSlot = Cast(ScrollBox->AddChild(UHLDebugCategoryButton)); - UHLDebugCategoryButton->SetUp(UHLDebugCategory); - UHLDebugCategoryButton->OnMadeClick.AddUniqueDynamic(this, &UUHLDebugCategoriesListWidget::OnButtonClicked); - - ScrollBoxSlot->SetPadding(FMargin(0, 0, 0, 10)); - ScrollBoxSlot->SetHorizontalAlignment(EHorizontalAlignment::HAlign_Fill); - } -} - -void UUHLDebugCategoriesListWidget::NativePreConstruct() -{ - Super::NativePreConstruct(); - const UUHLDebugSystemSettings* DeveloperSettings = GetDefault(); - for (TTuple EnabledDebugCategory : DeveloperSettings->EnabledDebugCategories) - { - UDebugCategoryButtonWidget* UHLDebugCategoryButton = WidgetTree->ConstructWidget(); - UScrollBoxSlot* ScrollBoxSlot = Cast(ScrollBox->AddChild(UHLDebugCategoryButton)); - - const FUHLDebugCategory* UHLDebugCategory = DeveloperSettings->DebugCategories.FindByPredicate([=](const FUHLDebugCategory& DebugCategory) - { - return DebugCategory.Tags.HasAnyExact(FGameplayTagContainer(EnabledDebugCategory.Key)); - }); - if (UHLDebugCategory != nullptr) - { - UHLDebugCategoryButton->SetUp(*UHLDebugCategory); - ScrollBoxSlot->SetPadding(FMargin(0, 0, 0, 10)); - } - } -} - -void UUHLDebugCategoriesListWidget::OnButtonClicked(UDebugCategoryButtonWidget* Button, FGameplayTag DebugCategoryGameplayTag) -{ - if (!Button) return; - - UHLDebugSubsystem->ToggleDebugCategory(DebugCategoryGameplayTag); - Button->UpdateCheckboxState(UHLDebugSubsystem->IsCategoryEnabled(DebugCategoryGameplayTag)); -} diff --git a/Source/UHLDebugSystem/Public/AA_WaitDebugCategoryChange.h b/Source/UHLDebugSystem/Public/AA_WaitDebugCategoryChange.h deleted file mode 100644 index d39580d6..00000000 --- a/Source/UHLDebugSystem/Public/AA_WaitDebugCategoryChange.h +++ /dev/null @@ -1,48 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameplayTagContainer.h" -#include "Kismet/BlueprintAsyncActionBase.h" -#include "AA_WaitDebugCategoryChange.generated.h" - -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWaitDebugCategoryChanged, bool, bEnabled); - -UCLASS(BlueprintType, meta=(ExposedAsyncProxy = AsyncAction)) -class UHLDEBUGSYSTEM_API UAA_WaitDebugCategoryChange : public UBlueprintAsyncActionBase -{ - GENERATED_BODY() - -public: - // TODO add updating bool value from Blueprint by reference - // UFUNCTION(BlueprintCallable, DisplayName="WaitDebugCategoryChange", meta=(WorldContext="WorldContext", BlueprintInternalUseOnly="true", AutoCreateRefTerm="bIsDebugEnabledValueRef", AdvancedDisplay="bIsDebugEnabledValueRef")) - // static UAA_WaitDebugCategoryChange* WaitDebugCategoryChange(const UObject* WorldContext, FGameplayTag DebugCategoryTag, bool bCheckOnStart, const bool& bIsDebugEnabledValueRef); - - // WARNING for better experience tags are filtered add child to "UHL.DebugCategory" or "DebugCategory" - UFUNCTION(BlueprintCallable, Category="UnrealHelperLibrary", meta=(WorldContext="WorldContext", BlueprintInternalUseOnly="true", Keywords = "UnrealHelperLibrary debug UHL debugCategory debugging")) - static UAA_WaitDebugCategoryChange* WaitDebugCategoryChange(const UObject* WorldContext, UPARAM(meta=(Categories="UHL.DebugCategory,DebugCategory"))FGameplayTag DebugCategoryTag, bool bCheckOnStart = true); - - UPROPERTY(BlueprintAssignable, Category="WaitDebugCategoryChange") - FWaitDebugCategoryChanged OnChange; - UPROPERTY(BlueprintAssignable, Category="WaitDebugCategoryChange") - FWaitDebugCategoryChanged OnEnabled; - UPROPERTY(BlueprintAssignable, Category="WaitDebugCategoryChange") - FWaitDebugCategoryChanged OnDisabled; - - virtual void Activate() override; - - virtual UWorld* GetWorld() const override - { - return ContextWorld.IsValid() ? ContextWorld.Get() : nullptr; - } - -private: - TWeakObjectPtr ContextWorld = nullptr; - - FGameplayTag DebugCategoryTagInternal = FGameplayTag::EmptyTag; - bool bCheckOnStart = true; - - UFUNCTION() - void OnDebugCategoryChange(FGameplayTag DebugCategoryTag, bool bEnabled); -}; diff --git a/Source/UHLDebugSystem/Public/Core/UHLDebugSystemGameplayTags.h b/Source/UHLDebugSystem/Public/Core/UHLDebugSystemGameplayTags.h deleted file mode 100644 index 93bae22d..00000000 --- a/Source/UHLDebugSystem/Public/Core/UHLDebugSystemGameplayTags.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "NativeGameplayTags.h" - -namespace UHLDebugSystemTags -{ - // Debug Categories - UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem); - UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Attributes); - UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Effects); - UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Abilities); - UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); - UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_InputSystem_AbilityInputCache); - UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_Collisions); -} - - diff --git a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilityInputCache.h b/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilityInputCache.h deleted file mode 100644 index 2cfeaced..00000000 --- a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilityInputCache.h +++ /dev/null @@ -1,22 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugCategoryComponent.h" -#include "DCC_AbilityInputCache.generated.h" - -/** - * Debug category component that toggles the Ability Input Cache debug via CVar - */ -UCLASS() -class UHLDEBUGSYSTEM_API UDCC_AbilityInputCache : public UUHLDebugCategoryComponent -{ - GENERATED_BODY() - -public: - virtual void Activate_Implementation(UObject* ContextObject) override; - virtual void Deactivate_Implementation(UObject* ContextObject) override; -}; - - diff --git a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Abilities.h b/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Abilities.h deleted file mode 100644 index 0115994d..00000000 --- a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Abilities.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugCategoryComponent.h" -#include "DCC_AbilitySystem_Abilities.generated.h" - -/** - * - */ -UCLASS() -class UHLDEBUGSYSTEM_API UDCC_AbilitySystem_Abilities : public UUHLDebugCategoryComponent -{ - GENERATED_BODY() - -public: - virtual void Activate_Implementation(UObject* ContextObject) override; - virtual void Deactivate_Implementation(UObject* ContextObject) override; -}; diff --git a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Attributes.h b/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Attributes.h deleted file mode 100644 index 97c6fc37..00000000 --- a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Attributes.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugCategoryComponent.h" -#include "DCC_AbilitySystem_Attributes.generated.h" - -/** - * - */ -UCLASS() -class UHLDEBUGSYSTEM_API UDCC_AbilitySystem_Attributes : public UUHLDebugCategoryComponent -{ - GENERATED_BODY() - -public: - virtual void Activate_Implementation(UObject* ContextObject) override; - virtual void Deactivate_Implementation(UObject* ContextObject) override; -}; diff --git a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Effects.h b/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Effects.h deleted file mode 100644 index ef385da2..00000000 --- a/Source/UHLDebugSystem/Public/DebugCategories/DCC_AbilitySystem_Effects.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugCategoryComponent.h" -#include "DCC_AbilitySystem_Effects.generated.h" - -/** - * - */ -UCLASS() -class UHLDEBUGSYSTEM_API UDCC_AbilitySystem_Effects : public UUHLDebugCategoryComponent -{ - GENERATED_BODY() - -public: - virtual void Activate_Implementation(UObject* ContextObject) override; - virtual void Deactivate_Implementation(UObject* ContextObject) override; -}; diff --git a/Source/UHLDebugSystem/Public/DebugCategories/DCC_Collisions.h b/Source/UHLDebugSystem/Public/DebugCategories/DCC_Collisions.h deleted file mode 100644 index 322c36c5..00000000 --- a/Source/UHLDebugSystem/Public/DebugCategories/DCC_Collisions.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugCategoryComponent.h" -#include "DCC_Collisions.generated.h" - -/** - * - */ -UCLASS() -class UHLDEBUGSYSTEM_API UDCC_Collisions : public UUHLDebugCategoryComponent -{ - GENERATED_BODY() - -public: - virtual void Activate_Implementation(UObject* ContextObject) override; - virtual void Deactivate_Implementation(UObject* ContextObject) override; -}; diff --git a/Source/UHLDebugSystem/Public/DebugCategories/DCC_InputSystem_EnhancedInput.h b/Source/UHLDebugSystem/Public/DebugCategories/DCC_InputSystem_EnhancedInput.h deleted file mode 100644 index a3b3f155..00000000 --- a/Source/UHLDebugSystem/Public/DebugCategories/DCC_InputSystem_EnhancedInput.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugCategoryComponent.h" -#include "DCC_InputSystem_EnhancedInput.generated.h" - -/** - * - */ -UCLASS() -class UHLDEBUGSYSTEM_API UDCC_InputSystem_EnhancedInput : public UUHLDebugCategoryComponent -{ - GENERATED_BODY() - -public: - virtual void Activate_Implementation(UObject* ContextObject) override; - virtual void Deactivate_Implementation(UObject* ContextObject) override; -}; diff --git a/Source/UHLDebugSystem/Public/DebugCategoryButtonWidget.h b/Source/UHLDebugSystem/Public/DebugCategoryButtonWidget.h deleted file mode 100644 index cd36b7af..00000000 --- a/Source/UHLDebugSystem/Public/DebugCategoryButtonWidget.h +++ /dev/null @@ -1,53 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameplayTagContainer.h" -#include "UHLDebugCategory.h" -#include "Blueprint/UserWidget.h" -#include "DebugCategoryButtonWidget.generated.h" - -DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDebugCategoryButtonClick, UDebugCategoryButtonWidget*, Button, FGameplayTag, DebugCategoryTag); - -class UUHLDebugSystemSubsystem; -struct FUHLDebugCategory; -class UTextBlock; -class UCheckBox; -class UHorizontalBox; -class UButton; -/** - * - */ -UCLASS() -class UHLDEBUGSYSTEM_API UDebugCategoryButtonWidget : public UUserWidget -{ - GENERATED_BODY() - -public: - void SetUp(const FUHLDebugCategory& UHLDebugCategory_In); - void UpdateCheckboxState(bool bEnabled_In); - - FDebugCategoryButtonClick OnMadeClick; - -protected: - virtual bool Initialize() override; - virtual void NativePreConstruct() override; - -private: - UPROPERTY() - UButton* Button; - UPROPERTY() - UHorizontalBox* HorizontalBox; - UPROPERTY() - UCheckBox* CheckBox; - UPROPERTY() - UTextBlock* TextBlock; - UPROPERTY() - FUHLDebugCategory UHLDebugCategory; - - UFUNCTION() - void OnButtonClicked(); - UFUNCTION() - void OnDebugCategoryChanged(FGameplayTag DebugCategoryTag_In, bool bEnabled_In); -}; diff --git a/Source/UHLDebugSystem/Public/Development/UHLDebugSystemSettings.h b/Source/UHLDebugSystem/Public/Development/UHLDebugSystemSettings.h deleted file mode 100644 index f09a79c8..00000000 --- a/Source/UHLDebugSystem/Public/Development/UHLDebugSystemSettings.h +++ /dev/null @@ -1,59 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameplayTagContainer.h" -#include "Misc/App.h" -#include "UHLDebugSystemSubsystem.h" -#include "UHLDebugSystemSettings.generated.h" - -/** - * - */ -UCLASS(config="Game", defaultconfig, PrioritizeCategories="DebugCategories", DisplayName="UHL Debug System") -class UHLDEBUGSYSTEM_API UUHLDebugSystemSettings : public UDeveloperSettings -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, Category="DebugCategories", NoClear, meta=(FullyExpand=true, ForceInlineRow /**, ReadOnlyKeys **/)) - TMap EnabledDebugCategories = {}; - - // don't use/show default UHLDebugCategories - UPROPERTY(config, EditAnywhere, Category="DebugCategoriesSettings") - bool bExcludeDefaultUHLDebugCategories = false; - - UPROPERTY(config, EditAnywhere, Category="DebugCategoriesSettings", meta=(TitleProperty="Name", NoElementDuplicate)) - TArray DebugCategories = {}; - - UPROPERTY(config) - bool bMigrationFromOldSettingsDone = false; - - // TODO: choosing debug subsystem class??? user can extend debug subsystem with own things? - // TSubclassOf UHLDebugSubsystemClass; - - void OnEnabledDebugCategoryEntryChanged(FGameplayTag ChangedDebugCategoryTag, bool bEnabled); - - static TArray GET_DEFAULT_UHL_DEBUG_CATEGORIES(); - -protected: -//~UDeveloperSettings interface - virtual FName GetCategoryName() const override { return FApp::GetProjectName(); }; -//~End of UDeveloperSettings interface - -#if WITH_EDITOR - virtual void PostInitProperties() override; - virtual void PreEditChange(FProperty* PropertyAboutToChange) override; - virtual void PostEditChangeChainProperty(struct FPropertyChangedChainEvent& PropertyChangedEvent) override; -#endif - -private: - TMap LastEnabledDebugCategories; - - void RecreateEnabledDebugCategoriesList(); - void UpdateEnabledDebugCategoriesList(); - void UpdateDefaultUHLDebugCategories(); - - -}; diff --git a/Source/UHLDebugSystem/Public/UHLDebugBlueprintLibrary.h b/Source/UHLDebugSystem/Public/UHLDebugBlueprintLibrary.h deleted file mode 100644 index 2180a7b9..00000000 --- a/Source/UHLDebugSystem/Public/UHLDebugBlueprintLibrary.h +++ /dev/null @@ -1,21 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "GameplayEffect.h" -#include "AssetRegistry/AssetData.h" -#include "Kismet/BlueprintFunctionLibrary.h" -#include "UHLDebugBlueprintLibrary.generated.h" - -UCLASS() -class UHLDEBUGSYSTEM_API UUHLDebugBlueprintLibrary : public UBlueprintFunctionLibrary -{ - GENERATED_BODY() - -public: - /** DebugSubsystem **/ - UFUNCTION( - BlueprintPure, Category = "UnrealHelperLibrary|Debug", meta = (Categories = "UHL.DebugCategory,DebugCategory", WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary debug")) - static bool IsUHLDebugCategoryEnabled(UObject* WorldContextObject, FGameplayTag DebugCategoryGameplayTag); - /** ~DebugSubsystem **/ -}; diff --git a/Source/UHLDebugSystem/Public/UHLDebugCategory.h b/Source/UHLDebugSystem/Public/UHLDebugCategory.h deleted file mode 100644 index ebd5beb4..00000000 --- a/Source/UHLDebugSystem/Public/UHLDebugCategory.h +++ /dev/null @@ -1,88 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugCategoryComponent.h" -#include "GameplayTagContainer.h" -#include "UHLDebugSystemTypes.h" -#include "UHLDebugCategory.generated.h" - - -USTRUCT(BlueprintType) -struct FUHLDebugCategory -{ - GENERATED_BODY() - - // TODO: - // UPROPERTY(EditAnywhere, BlueprintReadWrite) - // bool bActive = true; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory") - FString Name = ""; - - // if DebugCategory requires PlayerController it can't be enabled before "SetUpCategoriesThatRequiresPlayerController" being called - // Mostly you want to add "SetUpCategoriesThatRequiresPlayerController" in your "PlayerController.BeginPlay" - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory") - bool bRequiresPlayerControllerToEnable = true; - - // Tags associated with this debug category, like GameplayAbilities category can be activated/deactivated by tag - // WARNING - for better experience tags are filtered add child to "UHL.DebugCategory" or "DebugCategory" - // WARNING 2 - NATIVE tags are not supported due to "plugin/module" restrictions, use FGameplayTag::RequestGameplayTag - // and gameplay tags ini files - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory", meta=(Categories = "UHL.DebugCategory,DebugCategory")) - FGameplayTagContainer Tags = {}; - - // What DebugCategories required to be enabled for this DebugCategory. On enabling this DebugCategory it will try to enable required DebgugCategories disable other debug categories that match "Required" tags - // WARNING for better experience tags are filtered add child to "UHL.DebugCategory" or "DebugCategory" - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory", meta=(Categories = "UHL.DebugCategory,DebugCategory")) - FGameplayTagContainer RequiredDebugCategories = {}; - - // What DebugCategories this DebugCategory blocks. On enabling this DebugCategory it will disable other debug categories that match "Blocks" tags - // WARNING for better experience tags are filtered add child to "UHL.DebugCategory" or "DebugCategory" - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory", meta=(Categories = "UHL.DebugCategory,DebugCategory")) - FGameplayTagContainer Blocks = {}; // blocks other debug categories activation with specified tags - // TODO BlockedBy - what categories blocks it - // UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(Categories = "UHL.DebugCategory")) - FGameplayTagContainer BlockedBy = {}; - - /** defines what to do when DebugCategory enabling, works a bit similar to GameplayAbilities and GameplayEffects components. - Example - I want component that enables AbilitySystem debug, I write DebugCategoryComponent(C++/BP) and add it here, - so when DebugCategory enables that simple component "activates", when DebugCategory - disabled component "deactivates", such simple **/ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory", meta=(ForceShowPluginContent)) - TArray> Components = {}; - // for UI, background color and so on - // ~"FColor::MakeRandomColor()" will lead to non-critical error - // ~unreal don't support random colors from native code. - // ~They should be deterministic but there is no option - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory", AdvancedDisplay, meta = (IgnoreForMemberInitializationTest)) - FLinearColor Color = FColor::MakeRandomColor(); - UPROPERTY() - bool bIsDefaultUHLDebugCategory = false; - - // "Editor" will mean that its will be enabled in "EnabledDebugCategories" by default for all devs on EditorStartup - // Others means that DebugCategory will be enabled on start - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHLDebugCategory", AdvancedDisplay) - TArray ByDefaultEnabledInBuildTypes = {}; - - bool TryEnable(UObject* ContextObj); - void TryDisable(UObject* ContextObj); - bool GetIsEnabled() const { return bIsEnabled; }; - - bool operator==(const FUHLDebugCategory& Other) const - { - return Name == Other.Name; - // not sure checking tags that might change is good idea - // return ShortName == Other.ShortName && Tags == Other.Tags; - } - -private: - bool bIsEnabled = false; - - UPROPERTY() - TArray InstancedComponents = {}; - - UUHLDebugCategoryComponent* GetOrCreateDebugCategoryComponent(TSubclassOf ComponentClass, UObject* ContextObj); - UUHLDebugCategoryComponent** GetDebugCategoryComponent(TSubclassOf ComponentClass, UObject* ContextObj); -}; diff --git a/Source/UHLDebugSystem/Public/UHLDebugCategoryComponent.h b/Source/UHLDebugSystem/Public/UHLDebugCategoryComponent.h deleted file mode 100644 index 6400e515..00000000 --- a/Source/UHLDebugSystem/Public/UHLDebugCategoryComponent.h +++ /dev/null @@ -1,21 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugCategoryComponent.generated.h" - -// TODO force activation with "MMB" click -UCLASS(Abstract, Blueprintable) -class UHLDEBUGSYSTEM_API UUHLDebugCategoryComponent : public UObject -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "UHLDebugSubsystem") - void Activate(UObject* ContextObject); - UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "UHLDebugSubsystem") - void Deactivate(UObject* ContextObject); - UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "UHLDebugSubsystem") - bool CanActivate(UObject* ContextObject) const; -}; diff --git a/Source/UHLDebugSystem/Public/UHLDebugSystem.h b/Source/UHLDebugSystem/Public/UHLDebugSystem.h deleted file mode 100644 index 4daeeb97..00000000 --- a/Source/UHLDebugSystem/Public/UHLDebugSystem.h +++ /dev/null @@ -1,17 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Modules/ModuleManager.h" - - -class FUHLDebugSystemModule final : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; - -private: - void MigrateOldSettingsFromMainModule(); -}; diff --git a/Source/UHLDebugSystem/Public/UHLDebugSystemBuildUtils.h b/Source/UHLDebugSystem/Public/UHLDebugSystemBuildUtils.h deleted file mode 100644 index bd6bddcd..00000000 --- a/Source/UHLDebugSystem/Public/UHLDebugSystemBuildUtils.h +++ /dev/null @@ -1,27 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugSystemTypes.h" - -static FORCEINLINE EUHLDebugSystemBuildType GetCurrentUHLBuildType() -{ -#if WITH_EDITOR - return EUHLDebugSystemBuildType::Editor; -#else - #if UE_BUILD_DEBUG - return EUHLDebugSystemBuildType::Debug; - #elif UE_BUILD_DEVELOPMENT - return EUHLDebugSystemBuildType::Development; - #elif UE_BUILD_SHIPPING - return EUHLDebugSystemBuildType::Shipping; - #elif UE_BUILD_TEST - return EUHLDebugSystemBuildType::Test; - #else - return EUHLDebugSystemBuildType::Development; - #endif -#endif -} - - diff --git a/Source/UHLDebugSystem/Public/UHLDebugSystemSubsystem.h b/Source/UHLDebugSystem/Public/UHLDebugSystemSubsystem.h deleted file mode 100644 index 4ddf1350..00000000 --- a/Source/UHLDebugSystem/Public/UHLDebugSystemSubsystem.h +++ /dev/null @@ -1,72 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" - -#include "CoreGlobals.h" -#include "Engine/Engine.h" -#include "Engine/World.h" -#include "EngineUtils.h" -#include "GameplayTagContainer.h" -#include "UHLDebugCategory.h" -#include "Subsystems/GameInstanceSubsystem.h" -#include "UHLDebugSystemSubsystem.generated.h" - - -DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUHLDebugCategoryChanged, FGameplayTag, DebugCategoryTag, bool, bEnabled); - -UCLASS() -class UHLDEBUGSYSTEM_API UUHLDebugSystemSubsystem : public UGameInstanceSubsystem -{ - GENERATED_BODY() - -public: - UUHLDebugSystemSubsystem(); - - FOnUHLDebugCategoryChanged OnDebugCategoryChanged; - - // TODO filter gameplayTags, allow using only values from DebugCategories `meta=(Categories="")` - // probably "Godreaper.DebugCategories." required, or "ProjectName.DebugCategories"... - UFUNCTION(Exec, BlueprintCallable, Category="UHLDebugSubsystem", meta=(Categories = "UHL.DebugCategory,DebugCategory")) - bool IsCategoryEnabled(const FGameplayTag DebugCategoryTag) const; - - UFUNCTION(Exec, BlueprintCallable, Category="UHLDebugSubsystem", meta=(Categories = "UHL.DebugCategory,DebugCategory")) - void EnableDebugCategory(const FGameplayTag DebugCategoryTag, bool bEnable); - - UFUNCTION(Exec, BlueprintCallable, Category="UHLDebugSubsystem", meta=(Categories = "UHL.DebugCategory,DebugCategory")) - void ToggleDebugCategory(const FGameplayTag DebugCategoryTag); - - UFUNCTION(BlueprintCallable, Category="UHLDebugSubsystem", meta=(Categories = "UHL.DebugCategory,DebugCategory")) - const FUHLDebugCategory& GetDebugCategoryByTag(const FGameplayTag DebugCategoryTag) const; - - const TArray& GetDebugCategories() const { return DebugCategories; } - -protected: - virtual void Initialize(FSubsystemCollectionBase& Collection) override; - virtual void Deinitialize() override; - -private: - bool bSetupped = false; - bool bSetUpCategoriesThatRequiresPlayerController = false; - bool bIsSetuping = true; - - UPROPERTY() - TArray DebugCategories = {}; - - FDelegateHandle ActorSpawnedDelegateHandle; - - // waiting for world initialize to wait PlayerController spawned for InitDebugCategories - void OnPostWorldInit(UWorld* InWorld, const UWorld::InitializationValues IVS); - - // waiting for world teardown to not waiting for PlayerController spawn until next world inited - UFUNCTION() - void OnWorldBeginTearDown(UWorld* World); - - // waiting for PlayerController spawned to InitDebugCategories that requires PlayerController - UFUNCTION() - void OnActorSpawned(AActor* SpawnedActor); - - // should be called when player controller available, e.g. in PlayerController.BeginPlay - void SetUpCategoriesThatRequiresPlayerController(); -}; diff --git a/Source/UHLDebugSystem/Public/UHLDebugSystemTypes.h b/Source/UHLDebugSystem/Public/UHLDebugSystemTypes.h deleted file mode 100644 index cc94f4f9..00000000 --- a/Source/UHLDebugSystem/Public/UHLDebugSystemTypes.h +++ /dev/null @@ -1,22 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLDebugSystemTypes.generated.h" - -// NOTE: Duplicated from UnrealHelperLibrary to decouple modules. -// Enum values and order must remain consistent for config compatibility. -UENUM(BlueprintType) -enum class EUHLDebugSystemBuildType: uint8 -{ - None UMETA(Hidden), - Editor UMETA(ToolTip="Are you in editor"), - - Debug, - Development, - Shipping, - Test, -}; - - diff --git a/Source/UHLDebugSystem/Public/UI/UHLDebugCategoriesListWidget.h b/Source/UHLDebugSystem/Public/UI/UHLDebugCategoriesListWidget.h deleted file mode 100644 index cf5de541..00000000 --- a/Source/UHLDebugSystem/Public/UI/UHLDebugCategoriesListWidget.h +++ /dev/null @@ -1,32 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameplayTagContainer.h" -#include "Components/ScrollBox.h" -#include "UHLDebugCategoriesListWidget.generated.h" - -class UUHLDebugSystemSubsystem; -class UDebugCategoryButtonWidget; -class UCanvasPanel; -/** - * - */ -UCLASS() -class UHLDEBUGSYSTEM_API UUHLDebugCategoriesListWidget : public UUserWidget -{ - GENERATED_BODY() - -protected: - virtual bool Initialize() override; - virtual void NativeConstruct() override; - virtual void NativePreConstruct() override; - -private: - UPROPERTY() - UScrollBox* ScrollBox; - TWeakObjectPtr UHLDebugSubsystem; - UFUNCTION() - void OnButtonClicked(UDebugCategoryButtonWidget* Button, FGameplayTag DebugCategoryGameplayTag); -}; diff --git a/Source/UHLDebugSystem/UHLDebugSystem.Build.cs b/Source/UHLDebugSystem/UHLDebugSystem.Build.cs deleted file mode 100644 index 3979d93f..00000000 --- a/Source/UHLDebugSystem/UHLDebugSystem.Build.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -// DebugSystem based on GameplayTags that completely separate from other UHL modules -// should be completely independent of UHL and probably will be other plugin -public class UHLDebugSystem : ModuleRules -{ - public UHLDebugSystem(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - "CoreUObject", - "Engine", - - // ... add other public dependencies that you statically link with here ... - "GameplayAbilities", - "GameplayTags", - "GameplayTasks", - "EnhancedInput", - - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "Slate", - "SlateCore", - "UMG", - "AnimGraphRuntime", - "DeveloperSettings", - - // Should not use any other UHL modules - // ... add private dependencies that you statically link with here ... - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/Source/UHLDebugSystemEditor/Private/UHLDebugSystemEditor.cpp b/Source/UHLDebugSystemEditor/Private/UHLDebugSystemEditor.cpp deleted file mode 100644 index 999ed66a..00000000 --- a/Source/UHLDebugSystemEditor/Private/UHLDebugSystemEditor.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLDebugSystemEditor.h" - -#include "FileHelpers.h" -#include "Development/UHLDebugSystemSettings.h" -#include "ToolMenus.h" -#include "Kismet/GameplayStatics.h" - -static const FName UHLDebugSystemEditorTabName("UHLDebugSystemEditor"); - -#define LOCTEXT_NAMESPACE "FUHLDebugSystemEditorModule" - -namespace UHLDebugSystemEditorFunctionLibrary -{ - static bool HasPlayWorld() { return GEditor->PlayWorld != nullptr; } - - static bool HasNoPlayWorld() { return !HasPlayWorld(); } - - static bool IsOptionEnabled(const FGameplayTag DebugCategoryTag) - { - if (HasPlayWorld()) - { - UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(GEditor->PlayWorld); - if (!GameInstance) return false; - - UUHLDebugSystemSubsystem* DebugSubsystem = GameInstance->GetSubsystem(); - if (!DebugSubsystem) return false; - - return DebugSubsystem->IsCategoryEnabled(DebugCategoryTag); - } - else - { - const UUHLDebugSystemSettings* Settings = GetDefault(); - bool bEnabled = Settings->EnabledDebugCategories[DebugCategoryTag]; - return bEnabled; - } - } - - static void ToggleDebugCategory_Clicked(const FGameplayTag DebugCategoryTag) - { - if (HasPlayWorld()) - { - UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(GEditor->PlayWorld); - if (GameInstance) - { - UUHLDebugSystemSubsystem* DebugSubsystem = GameInstance->GetSubsystem(); - if (DebugSubsystem) - { - DebugSubsystem->ToggleDebugCategory(DebugCategoryTag); - } - } - } - - UUHLDebugSystemSettings* Settings = GetMutableDefault(); - bool bEnabled = Settings->EnabledDebugCategories[DebugCategoryTag]; - Settings->EnabledDebugCategories.Emplace(DebugCategoryTag, !bEnabled); - Settings->OnEnabledDebugCategoryEntryChanged(DebugCategoryTag, !bEnabled); - - // if this controls editor UI, you may need to force a menu refresh: - // FSlateApplication::Get().DismissAllMenus(); - // ExtendToolbar(); // or however you re-populate your menu - } - - static TSharedRef GetDebugCategoriesStateDropdown() - { - FMenuBuilder MenuBuilder(true, nullptr); - - MenuBuilder.BeginSection(NAME_None, FText::FromString("DebugCategories")); - for (const FUHLDebugCategory& DebugCategory : GetDefault()->DebugCategories) - { - const FText DisplayName = FText::FromString(DebugCategory.Tags.First().ToString()); - MenuBuilder.AddMenuEntry( - DisplayName, - FText::Format(LOCTEXT("DebugCategoryDescription", "{0}"), FText::FromString(DebugCategory.Name)), - FSlateIcon(), - FUIAction( - FExecuteAction::CreateStatic(&UHLDebugSystemEditorFunctionLibrary::ToggleDebugCategory_Clicked, DebugCategory.Tags.First()), - FCanExecuteAction(), - // FCanExecuteAction::CreateStatic(&UHLDebugSystemEditorFunctionLibrary::HasNoPlayWorld), - FIsActionChecked::CreateStatic(&UHLDebugSystemEditorFunctionLibrary::IsOptionEnabled, DebugCategory.Tags.First()), - FIsActionButtonVisible() - // FIsActionButtonVisible::CreateStatic(&UHLDebugSystemEditorFunctionLibrary::HasNoPlayWorld) - ), - NAME_None, - EUserInterfaceActionType::ToggleButton - ); - } - MenuBuilder.EndSection(); - - return MenuBuilder.MakeWidget(); - } - - static bool CanShowDebugCategories() - { - return !GetDefault()->EnabledDebugCategories.IsEmpty(); - } - - static void RegisterGameEditorMenus() - { - UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar.PlayToolBar"); - FToolMenuSection& Section = Menu->AddSection("PlayGameExtensions", TAttribute(), - FToolMenuInsert("Play", EToolMenuInsertType::Default)); - - FToolMenuEntry ToolMenuEntry = FToolMenuEntry::InitComboButton( - "DebugCategoriesState", - FUIAction( - FExecuteAction(), - // FCanExecuteAction::CreateStatic(&UHLDebugSystemEditorFunctionLibrary::HasNoPlayWorld), - FCanExecuteAction(), - FIsActionChecked(), - FIsActionButtonVisible::CreateStatic(&UHLDebugSystemEditorFunctionLibrary::CanShowDebugCategories)), - FOnGetContent::CreateStatic(&UHLDebugSystemEditorFunctionLibrary::GetDebugCategoriesStateDropdown), - LOCTEXT("UHLDebugSystemEditor_Label", "Debug Categories"), - LOCTEXT("UHLDebugSystemEditor_ToolTip", "Enabling/Disabling debug categories fast"), - FSlateIcon(FAppStyle::GetAppStyleSetName(), "Icons.Tools") - ); - ToolMenuEntry.StyleNameOverride = "CalloutToolbar"; - Section.AddEntry(ToolMenuEntry); - } -} - -void FUHLDebugSystemEditorModule::StartupModule() -{ - if (FSlateApplication::IsInitialized()) - { - UToolMenus::RegisterStartupCallback( - FSimpleMulticastDelegate::FDelegate::CreateStatic(&UHLDebugSystemEditorFunctionLibrary::RegisterGameEditorMenus)); - } -} - -void FUHLDebugSystemEditorModule::ShutdownModule() -{ - UToolMenus::UnRegisterStartupCallback(this); -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLDebugSystemEditorModule, UHLDebugSystemEditor) diff --git a/Source/UHLDebugSystemEditor/Public/UHLDebugSystemEditor.h b/Source/UHLDebugSystemEditor/Public/UHLDebugSystemEditor.h deleted file mode 100644 index 6223f7cd..00000000 --- a/Source/UHLDebugSystemEditor/Public/UHLDebugSystemEditor.h +++ /dev/null @@ -1,17 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" - -class FToolBarBuilder; -class FMenuBuilder; - -class FUHLDebugSystemEditorModule : public IModuleInterface -{ -public: - - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; diff --git a/Source/UHLDebugSystemEditor/UHLDebugSystemEditor.Build.cs b/Source/UHLDebugSystemEditor/UHLDebugSystemEditor.Build.cs deleted file mode 100644 index 37e97807..00000000 --- a/Source/UHLDebugSystemEditor/UHLDebugSystemEditor.Build.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class UHLDebugSystemEditor : ModuleRules -{ - public UHLDebugSystemEditor(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - "CoreUObject", - "Engine", - "PropertyEditor", - "Blutility", - "UMG", - // ... add other public dependencies that you statically link with here ... - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "Projects", - "InputCore", - "EditorFramework", - "UnrealEd", - "ToolMenus", - "Slate", - "SlateCore", - "UnrealEd", - "DeveloperSettings", - - "EditorWidgets", - - "GameplayTags", - "GameplayTagsEditor", - - "UHLDebugSystem", - // ... add private dependencies that you statically link with here ... - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/Source/UHLEditor/Private/Development/UHLEditorSettings.cpp b/Source/UHLEditor/Private/Development/UHLEditorSettings.cpp deleted file mode 100644 index efedb204..00000000 --- a/Source/UHLEditor/Private/Development/UHLEditorSettings.cpp +++ /dev/null @@ -1,6 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Development/UHLEditorSettings.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLEditorSettings) \ No newline at end of file diff --git a/Source/UHLEditor/Private/UHLEditor.cpp b/Source/UHLEditor/Private/UHLEditor.cpp deleted file mode 100644 index 01dac294..00000000 --- a/Source/UHLEditor/Private/UHLEditor.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLEditor.h" -#include "UHLEditorStyle.h" -#include "UHLEditorCommands.h" -#include "Misc/MessageDialog.h" -#include "ToolMenus.h" -#include "UHLEditorBlueprintThumbnailRenderer.h" -#include "ThumbnailRendering/ThumbnailManager.h" - -static const FName UHLDebugSystemEditorTabName("UHLEditor"); - -#define LOCTEXT_NAMESPACE "FUHLEditorModule" - -void FUHLEditorModule::StartupModule() -{ - // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module - - FUHLEditorStyle::Initialize(); - FUHLEditorStyle::ReloadTextures(); - - FUHLEditorCommands::Register(); - - PluginCommands = MakeShareable(new FUICommandList); - - PluginCommands->MapAction( - FUHLEditorCommands::Get().PluginAction, - FExecuteAction::CreateRaw(this, &FUHLEditorModule::PluginButtonClicked), - FCanExecuteAction()); - - UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FUHLEditorModule::RegisterMenus)); - - UThumbnailManager::Get().UnregisterCustomRenderer(UBlueprint::StaticClass()); - UThumbnailManager::Get().RegisterCustomRenderer(UBlueprint::StaticClass(), UUHLEditorBlueprintThumbnailRenderer::StaticClass()); -} - -void FUHLEditorModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. - - UToolMenus::UnRegisterStartupCallback(this); - - UToolMenus::UnregisterOwner(this); - - FUHLEditorStyle::Shutdown(); - - FUHLEditorCommands::Unregister(); -} - -void FUHLEditorModule::PluginButtonClicked() -{ - // Put your "OnButtonClicked" stuff here - FText DialogText = FText::Format( - LOCTEXT("PluginButtonDialogText", "Add code to {0} in {1} to override this button's actions"), - FText::FromString(TEXT("FUHLEditorModule::PluginButtonClicked()")), - FText::FromString(TEXT("UHLEditor.cpp")) - ); - FMessageDialog::Open(EAppMsgType::Ok, DialogText); -} - -void FUHLEditorModule::RegisterMenus() -{ - // Owner will be used for cleanup in call to UToolMenus::UnregisterOwner - FToolMenuOwnerScoped OwnerScoped(this); - - { - UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu.Window"); - { - FToolMenuSection& Section = Menu->FindOrAddSection("WindowLayout"); - Section.AddMenuEntryWithCommandList(FUHLEditorCommands::Get().PluginAction, PluginCommands); - } - } - - { - UToolMenu* ToolbarMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar.PlayToolBar"); - { - FToolMenuSection& Section = ToolbarMenu->FindOrAddSection("PluginTools"); - { - FToolMenuEntry& Entry = Section.AddEntry(FToolMenuEntry::InitToolBarButton(FUHLEditorCommands::Get().PluginAction)); - Entry.SetCommandList(PluginCommands); - } - } - } -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLEditorModule, UHLEditor) diff --git a/Source/UHLEditor/Private/UHLEditorBlueprintThumbnailRenderer.cpp b/Source/UHLEditor/Private/UHLEditorBlueprintThumbnailRenderer.cpp deleted file mode 100644 index d75dbfc5..00000000 --- a/Source/UHLEditor/Private/UHLEditorBlueprintThumbnailRenderer.cpp +++ /dev/null @@ -1,110 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UHLEditorBlueprintThumbnailRenderer.h" - -#include "CanvasItem.h" -#include "CanvasTypes.h" -#include "UHLEditorCustomThumbnail.h" -#include "ThumbnailRendering/ThumbnailManager.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLEditorBlueprintThumbnailRenderer) - -void UUHLEditorBlueprintThumbnailRenderer::GetThumbnailSize(UObject* Object, float Zoom, uint32& OutWidth, uint32& OutHeight) const -{ - UBlueprint* Blueprint = Cast(Object); - - if (Blueprint) - { - if (UTexture2D* Texture = GetTextureFromGeneratedClass(Blueprint->GeneratedClass)) - { - OutWidth = FMath::TruncToInt(Zoom * (float)Texture->GetSurfaceWidth()); - OutHeight = FMath::TruncToInt(Zoom * (float)Texture->GetSurfaceHeight()); - } - } - Super::GetThumbnailSize(Object, Zoom, OutWidth, OutHeight); -} - -void UUHLEditorBlueprintThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, uint32 Width, uint32 Height, FRenderTarget* RenderTarget, FCanvas* Canvas, bool bAdditionalViewFamily) -{ - UBlueprint* Blueprint = Cast(Object); - if (Blueprint) - { - if (UTexture2D* Texture2D = GetTextureFromGeneratedClass(Blueprint->GeneratedClass)) - { - const bool bUseTranslucentBlend = Texture2D && Texture2D->HasAlphaChannel() && ((Texture2D->LODGroup == TEXTUREGROUP_UI) || (Texture2D->LODGroup == TEXTUREGROUP_Pixels2D)); - TRefCountPtr BatchedElementParameters; - if (bUseTranslucentBlend) - { - // If using alpha, draw a checkerboard underneath first. - const int32 CheckerDensity = 8; - TObjectPtr Checker = UThumbnailManager::Get().CheckerboardTexture; - Canvas->DrawTile( - 0.0f, 0.0f, Width, Height, // Dimensions - 0.0f, 0.0f, CheckerDensity, CheckerDensity, // UVs - FLinearColor::White, Checker->GetResource()); // Tint & Texture - } - // Use A canvas tile item to draw - FCanvasTileItem CanvasTile(FVector2D(X, Y), Texture2D->GetResource(), FVector2D(Width, Height), FLinearColor::White); - CanvasTile.BlendMode = bUseTranslucentBlend ? SE_BLEND_Translucent : SE_BLEND_Opaque; - CanvasTile.BatchedElementParameters = BatchedElementParameters; - CanvasTile.Draw(Canvas); - if (Texture2D && Texture2D->IsCurrentlyVirtualTextured()) - { - auto VTChars = TEXT("VT"); - int32 VTWidth = 0; - int32 VTHeight = 0; - StringSize(GEngine->GetLargeFont(), VTWidth, VTHeight, VTChars); - float PaddingX = Width / 128.0f; - float PaddingY = Height / 128.0f; - float ScaleX = Width / 64.0f; //Text is 1/64'th of the size of the thumbnails - float ScaleY = Height / 64.0f; - // VT overlay - FCanvasTextItem TextItem(FVector2D(Width - PaddingX - VTWidth * ScaleX, Height - PaddingY - VTHeight * ScaleY), FText::FromString(VTChars), GEngine->GetLargeFont(), - FLinearColor::White); - TextItem.EnableShadow(FLinearColor::Black); - TextItem.Scale = FVector2D(ScaleX, ScaleY); - TextItem.Draw(Canvas); - } - return; - } - } - Super::Draw(Object, X, Y, Width, Height, RenderTarget, Canvas, bAdditionalViewFamily); -} - -bool UUHLEditorBlueprintThumbnailRenderer::CanVisualizeAsset(UObject* Object) -{ - UBlueprint* Blueprint = Cast(Object); - - if (Blueprint && GetTextureFromGeneratedClass(Blueprint->GeneratedClass) != nullptr) - { - return true; - } - return Super::CanVisualizeAsset(Object); -} - -UTexture2D* UUHLEditorBlueprintThumbnailRenderer::GetTextureFromGeneratedClass(UClass* Class) const -{ - if (Class) - { - if (Class->ImplementsInterface(UUHLEditorCustomThumbnail::StaticClass())) - { - if (UObject* CDO = Class->GetDefaultObject()) - { - IUHLEditorCustomThumbnail* CustomThumbnailInterface = Cast(CDO); - if (CustomThumbnailInterface) - { - return CustomThumbnailInterface->Execute_GetCustomThumbnailIcon(CDO); - } - } - } - // else if (Class->IsChildOf(UBuff::StaticClass())) - // { - // if (UBuff* CDO = Class->GetDefaultObject()) - // { - // return CDO->GetIcon(); - // } - // } - } - return nullptr; -} diff --git a/Source/UHLEditor/Private/UHLEditorCommands.cpp b/Source/UHLEditor/Private/UHLEditorCommands.cpp deleted file mode 100644 index d21cb5d1..00000000 --- a/Source/UHLEditor/Private/UHLEditorCommands.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLEditorCommands.h" - -#define LOCTEXT_NAMESPACE "FUHLEditorModule" - -void FUHLEditorCommands::RegisterCommands() -{ - UI_COMMAND(PluginAction, "UHLEditorCommands", "Execute UHLEditorCommands action", EUserInterfaceActionType::Button, FInputChord()); -} - -#undef LOCTEXT_NAMESPACE diff --git a/Source/UHLEditor/Private/UHLEditorCustomThumbnail.cpp b/Source/UHLEditor/Private/UHLEditorCustomThumbnail.cpp deleted file mode 100644 index 03be988b..00000000 --- a/Source/UHLEditor/Private/UHLEditorCustomThumbnail.cpp +++ /dev/null @@ -1,13 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UHLEditorCustomThumbnail.h" - -// Add default functionality here for any IUHLEditorCustomThumbnail functions that are not pure virtual. - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLEditorCustomThumbnail) - -UTexture2D* IUHLEditorCustomThumbnail::GetCustomThumbnailIcon_Implementation() const -{ - return nullptr; -} \ No newline at end of file diff --git a/Source/UHLEditor/Private/UHLEditorStyle.cpp b/Source/UHLEditor/Private/UHLEditorStyle.cpp deleted file mode 100644 index d892fdad..00000000 --- a/Source/UHLEditor/Private/UHLEditorStyle.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLEditorStyle.h" -#include "UHLEditor.h" -#include "AssetRegistry/AssetRegistryModule.h" -#include "Development/UHLEditorSettings.h" -#include "Framework/Application/SlateApplication.h" -#include "Styling/SlateStyleRegistry.h" -#include "Slate/SlateGameResources.h" -#include "Interfaces/IPluginManager.h" -#include "Styling/SlateStyleMacros.h" - -#define RootToContentDir Style->RootToContentDir - -TSharedPtr FUHLEditorStyle::StyleInstance = nullptr; - -void FUHLEditorStyle::Initialize() -{ - if (!StyleInstance.IsValid()) - { - StyleInstance = Create(); - FSlateStyleRegistry::RegisterSlateStyle(*StyleInstance); - } -} - -void FUHLEditorStyle::Shutdown() -{ - FSlateStyleRegistry::UnRegisterSlateStyle(*StyleInstance); - ensure(StyleInstance.IsUnique()); - StyleInstance.Reset(); -} - -FName FUHLEditorStyle::GetStyleSetName() -{ - static FName StyleSetName(TEXT("UHLEditorStyle")); - return StyleSetName; -} - - -const FVector2D Icon16x16(16.0f, 16.0f); -const FVector2D Icon20x20(20.0f, 20.0f); - -TSharedRef< FSlateStyleSet > FUHLEditorStyle::Create() -{ - TSharedRef< FSlateStyleSet > Style = MakeShareable(new FSlateStyleSet("UHLEditorStyle")); - Style->SetContentRoot(IPluginManager::Get().FindPlugin("UnrealHelperLibrary")->GetBaseDir() / TEXT("Resources")); - // Style->SetContentRoot(FPaths::ProjectContentDir()); - - const UUHLEditorSettings* DeveloperSettings = GetDefault(); - for (FUHLEditorCustomClassIconDescription CustomClassIcon : DeveloperSettings->CustomClassIcons) - { - // FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); - FString Path = CustomClassIcon.Texture2D.GetLongPackageName(); - UObject* IconImageObject = LoadObject(nullptr, *Path); - - if (IsValid(IconImageObject)) - { - UTexture2D* IconImage = Cast(IconImageObject); - // FSlateDynamicImageBrush* DynamicImageBrush = new FSlateDynamicImageBrush(IconImage, Icon20x20, FName("CapsuleHitRegistrator")); - FSlateImageBrush* ImageBrush = new FSlateImageBrush(IconImage, Icon20x20); - - TArray> AllClasses = CustomClassIcon.Classes; - // support deprecated value - if (IsValid(CustomClassIcon.Class)) - { - AllClasses.Add(CustomClassIcon.Class); - } - for (const TSubclassOf Class : AllClasses) - { - if (!Class) continue; - FString ClassName = Class->GetName(); - // Modify the class icons to use our new awesome icons - FString IconStyleName = FString::Printf(TEXT("ClassIcon.%s"), *ClassName); - Style->Set(FName(IconStyleName), ImageBrush); - } - } - } - - Style->Set("UHLEditor.PluginAction", new IMAGE_BRUSH_SVG(TEXT("PlaceholderButtonIcon"), Icon20x20)); - return Style; -} - -void FUHLEditorStyle::ReloadTextures() -{ - if (FSlateApplication::IsInitialized()) - { - FSlateApplication::Get().GetRenderer()->ReloadTextureResources(); - } -} - -const ISlateStyle& FUHLEditorStyle::Get() -{ - return *StyleInstance; -} diff --git a/Source/UHLEditor/Private/UI/EditorUtility/EUW_UHL_Utils.cpp b/Source/UHLEditor/Private/UI/EditorUtility/EUW_UHL_Utils.cpp deleted file mode 100644 index cf472ff6..00000000 --- a/Source/UHLEditor/Private/UI/EditorUtility/EUW_UHL_Utils.cpp +++ /dev/null @@ -1,6 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UI/EditorUtility/EUW_UHL_Utils.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(EUW_UHL_Utils) \ No newline at end of file diff --git a/Source/UHLEditor/Public/Development/UHLEditorSettings.h b/Source/UHLEditor/Public/Development/UHLEditorSettings.h deleted file mode 100644 index bef8665c..00000000 --- a/Source/UHLEditor/Public/Development/UHLEditorSettings.h +++ /dev/null @@ -1,35 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLEditorSettings.generated.h" - -USTRUCT(BlueprintType) -struct FUHLEditorCustomClassIconDescription -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CustomClassIconDescription") - TSoftObjectPtr Texture2D; - - // deprecated, TODO: remove - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CustomClassIconDescription", meta=(DeprecatedProperty, DeprecationMessage="Deprecated use Classes")) - TSubclassOf Class; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CustomClassIconDescription") - TArray> Classes; -}; - -/** - * - */ -UCLASS(Config="Editor", DefaultConfig, meta = (DisplayName="UHL Editor")) -class UHLEDITOR_API UUHLEditorSettings : public UDeveloperSettings -{ - GENERATED_BODY() - -public: - UPROPERTY(config, EditAnywhere, Category="Custom Class Icons", meta=(FullyExpand)) - TArray CustomClassIcons; -}; diff --git a/Source/UHLEditor/Public/UHLEditor.h b/Source/UHLEditor/Public/UHLEditor.h deleted file mode 100644 index fe63c6f0..00000000 --- a/Source/UHLEditor/Public/UHLEditor.h +++ /dev/null @@ -1,29 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Modules/ModuleManager.h" - -class FToolBarBuilder; -class FMenuBuilder; - -class FUHLEditorModule : public IModuleInterface -{ -public: - - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; - - /** This function will be bound to Command. */ - void PluginButtonClicked(); - -private: - - void RegisterMenus(); - - -private: - TSharedPtr PluginCommands; -}; diff --git a/Source/UHLEditor/Public/UHLEditorBlueprintThumbnailRenderer.h b/Source/UHLEditor/Public/UHLEditorBlueprintThumbnailRenderer.h deleted file mode 100644 index 04182941..00000000 --- a/Source/UHLEditor/Public/UHLEditorBlueprintThumbnailRenderer.h +++ /dev/null @@ -1,29 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "ThumbnailRendering/BlueprintThumbnailRenderer.h" -#include "UHLEditorBlueprintThumbnailRenderer.generated.h" - -/** - * - */ -UCLASS() -class UHLEDITOR_API UUHLEditorBlueprintThumbnailRenderer : public UBlueprintThumbnailRenderer -{ - GENERATED_BODY() -protected: - - UUHLEditorBlueprintThumbnailRenderer(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) - {} - - // UThumbnailRenderer implementation - virtual void GetThumbnailSize(UObject* Object, float Zoom, uint32& OutWidth, uint32& OutHeight) const override; - virtual void Draw(UObject* Object, int32 X, int32 Y, uint32 Width, uint32 Height, FRenderTarget*, FCanvas* Canvas, bool bAdditionalViewFamily) override; - virtual bool CanVisualizeAsset(UObject* Object) override; -protected: - - UTexture2D* GetTextureFromGeneratedClass(UClass* Class) const; -}; diff --git a/Source/UHLEditor/Public/UHLEditorCommands.h b/Source/UHLEditor/Public/UHLEditorCommands.h deleted file mode 100644 index e5edb779..00000000 --- a/Source/UHLEditor/Public/UHLEditorCommands.h +++ /dev/null @@ -1,23 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Framework/Commands/Commands.h" -#include "UHLEditorStyle.h" - -class FUHLEditorCommands : public TCommands -{ -public: - - FUHLEditorCommands() - : TCommands(TEXT("UHLEditor"), NSLOCTEXT("Contexts", "UHLEditor", "UHLEditor Plugin"), NAME_None, FUHLEditorStyle::GetStyleSetName()) - { - } - - // TCommands<> interface - virtual void RegisterCommands() override; - -public: - TSharedPtr< FUICommandInfo > PluginAction; -}; diff --git a/Source/UHLEditor/Public/UHLEditorCustomThumbnail.h b/Source/UHLEditor/Public/UHLEditorCustomThumbnail.h deleted file mode 100644 index 05fe2b89..00000000 --- a/Source/UHLEditor/Public/UHLEditorCustomThumbnail.h +++ /dev/null @@ -1,31 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UObject/Interface.h" -#include "UHLEditorCustomThumbnail.generated.h" - -// This class does not need to be modified. -UINTERFACE(MinimalAPI, meta = (Blueprintable)) -class UUHLEditorCustomThumbnail : public UInterface -{ - GENERATED_BODY() -}; - -/** - * - */ -class UHLEDITOR_API IUHLEditorCustomThumbnail -{ - GENERATED_BODY() - - // Add interface functions to this class. This is the class that will be inherited to implement this interface. -public: - -/** IUHLEditorCustomThumbnail **/ - UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="Custom Thumbnail") - UTexture2D* GetCustomThumbnailIcon() const; - virtual UTexture2D* GetCustomThumbnailIcon_Implementation() const; -/** ~IUHLEditorCustomThumbnail **/ -}; diff --git a/Source/UHLEditor/Public/UHLEditorStyle.h b/Source/UHLEditor/Public/UHLEditorStyle.h deleted file mode 100644 index 78c3096e..00000000 --- a/Source/UHLEditor/Public/UHLEditorStyle.h +++ /dev/null @@ -1,31 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Styling/SlateStyle.h" - -class FUHLEditorStyle -{ -public: - - static void Initialize(); - - static void Shutdown(); - - /** reloads textures used by slate renderer */ - static void ReloadTextures(); - - /** @return The Slate style set for the Shooter game */ - static const ISlateStyle& Get(); - - static FName GetStyleSetName(); - -private: - - static TSharedRef< class FSlateStyleSet > Create(); - -private: - - static TSharedPtr< class FSlateStyleSet > StyleInstance; -}; \ No newline at end of file diff --git a/Source/UHLEditor/Public/UI/EditorUtility/EUW_UHL_Utils.h b/Source/UHLEditor/Public/UI/EditorUtility/EUW_UHL_Utils.h deleted file mode 100644 index 6d3ed0ce..00000000 --- a/Source/UHLEditor/Public/UI/EditorUtility/EUW_UHL_Utils.h +++ /dev/null @@ -1,17 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "EditorUtilityWidget.h" -#include "EUW_UHL_Utils.generated.h" - -/** - * - */ -UCLASS(Blueprintable) -class UHLEDITOR_API UEUW_UHL_Utils : public UEditorUtilityWidget -{ - GENERATED_BODY() - -}; diff --git a/Source/UHLEditor/UHLEditor.Build.cs b/Source/UHLEditor/UHLEditor.Build.cs deleted file mode 100644 index f9a476ae..00000000 --- a/Source/UHLEditor/UHLEditor.Build.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class UHLEditor : ModuleRules -{ - public UHLEditor(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - "CoreUObject", - "Engine", - "PropertyEditor", - "Blutility", - "UMG", - "BehaviorTreeEditor", - // ... add other public dependencies that you statically link with here ... - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "Projects", - "InputCore", - "EditorFramework", - "UnrealEd", - "ToolMenus", - "Slate", - "SlateCore", - "UnrealEd", - "DeveloperSettings", - - "UnrealHelperLibrary", - "UHLModulesHelper", - - "EditorWidgets", - - "GameplayTags", - "GameplayTagsEditor", - // ... add private dependencies that you statically link with here ... - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/Source/UHLGAS/Private/Abilities/UHLGameplayAbility.cpp b/Source/UHLGAS/Private/Abilities/UHLGameplayAbility.cpp deleted file mode 100644 index d7d58c71..00000000 --- a/Source/UHLGAS/Private/Abilities/UHLGameplayAbility.cpp +++ /dev/null @@ -1,276 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Abilities/UHLGameplayAbility.h" - -#include "AbilitySystemComponent.h" -#include "AbilitySystemGlobals.h" -#include "UHLAbilitySystemComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLGameplayAbility) - -UUHLGameplayAbility::UUHLGameplayAbility(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - ReplicationPolicy = EGameplayAbilityReplicationPolicy::ReplicateNo; - InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor; - NetExecutionPolicy = EGameplayAbilityNetExecutionPolicy::LocalPredicted; - NetSecurityPolicy = EGameplayAbilityNetSecurityPolicy::ClientOrServer; -} - -UUHLAbilitySystemComponent* UUHLGameplayAbility::GetUHLAbilitySystemComponentFromActorInfo() const -{ - if (!ensure(CurrentActorInfo)) - { - return nullptr; - } - checkf(CastChecked(CurrentActorInfo->AbilitySystemComponent.Get()), TEXT("UUHLGameplayAbility::GetUHLAbilitySystemComponentFromActorInfo can be used only on characters with UHLAbilitySystemComponent")); - return StaticCast(CurrentActorInfo->AbilitySystemComponent.Get()); -} - -bool UUHLGameplayAbility::K2_CommitAbilityDuration(bool BroadcastCommitEvent) -{ - ensure(CurrentActorInfo); - if (BroadcastCommitEvent) - { - if (UAbilitySystemComponent* AbilitySystemComponent = - GetAbilitySystemComponentFromActorInfo_Ensured()) - { - AbilitySystemComponent->NotifyAbilityCommit(this); - } - } - return CommitAbilityDuration(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo); -} - -void UUHLGameplayAbility::TryActivateAbilityOnSpawn(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) const -{ - // Try to activate if activation policy is on spawn. - if (ActorInfo && !Spec.IsActive() && (ActivationPolicy == EUHLAbilityActivationPolicy::OnSpawn)) - { - UAbilitySystemComponent* ASC = ActorInfo->AbilitySystemComponent.Get(); - const AActor* AvatarActor = ActorInfo->AvatarActor.Get(); - - // If avatar actor is torn off or about to die, don't try to activate until we get the new one. - if (ASC && AvatarActor && !AvatarActor->GetTearOff() && (AvatarActor->GetLifeSpan() <= 0.0f)) - { - const bool bIsLocalExecution = (NetExecutionPolicy == EGameplayAbilityNetExecutionPolicy::LocalPredicted) || (NetExecutionPolicy == EGameplayAbilityNetExecutionPolicy::LocalOnly); - const bool bIsServerExecution = (NetExecutionPolicy == EGameplayAbilityNetExecutionPolicy::ServerOnly) || (NetExecutionPolicy == EGameplayAbilityNetExecutionPolicy::ServerInitiated); - - const bool bClientShouldActivate = ActorInfo->IsLocallyControlled() && bIsLocalExecution; - const bool bServerShouldActivate = ActorInfo->IsNetAuthority() && bIsServerExecution; - - if (bClientShouldActivate || bServerShouldActivate) - { - ASC->TryActivateAbility(Spec.Handle); - } - } - } -} - -void UUHLGameplayAbility::CommitExecute( - const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo) -{ - Super::CommitExecute(Handle, ActorInfo, ActivationInfo); - CommitAbilityDuration(Handle, ActorInfo, ActivationInfo); -} - -bool UUHLGameplayAbility::CommitAbilityDuration( - const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo, - FGameplayTagContainer* OptionalRelevantTags) -{ - if (!CheckAbilityDuration(Handle, ActorInfo, OptionalRelevantTags)) - { - return false; - } - ApplyDuration(Handle, ActorInfo, ActivationInfo); - return true; -} - -void UUHLGameplayAbility::ApplyDuration( - const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo) -{ - UGameplayEffect* AbilityDurationGE = GetAbilityDurationGameplayEffect(); - UAbilitySystemComponent* ASC = GetAbilitySystemComponentFromActorInfo(); - if (AbilityDurationGE && ASC) - { - FActiveGameplayEffectHandle EffectHandle = ApplyGameplayEffectToOwner( - Handle, - ActorInfo, - ActivationInfo, - AbilityDurationGE, - GetAbilityLevel(Handle, ActorInfo)); - - ASC->OnGameplayEffectRemoved_InfoDelegate(EffectHandle)->AddUObject( - this, - &UUHLGameplayAbility::OnDurationEnd); - } -} - -bool UUHLGameplayAbility::CheckAbilityDuration( - const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - OUT FGameplayTagContainer* OptionalRelevantTags) const -{ - if (!ensure(ActorInfo)) - { - return true; - } - - const FGameplayTagContainer* AbilityDurationTag = GetAbilityDurationTags(); - if (AbilityDurationTag && !AbilityDurationTag->IsEmpty()) - { - if (UAbilitySystemComponent* AbilitySystemComponent = ActorInfo->AbilitySystemComponent. - Get()) - { - if (AbilitySystemComponent->HasAnyMatchingGameplayTags(*AbilityDurationTag)) - { - if (OptionalRelevantTags) - { - // const FGameplayTag& FailAbilityDurationTag = UAbilitySystemGlobals::Get(). - // ActivateFailCooldownTag; - // if (FailAbilityDurationTag.IsValid()) - // { - // OptionalRelevantTags->AddTag(FailAbilityDurationTag); - // } - - // Let the caller know which tags were blocking - OptionalRelevantTags->AppendMatchingTags( - AbilitySystemComponent->GetOwnedGameplayTags(), - *AbilityDurationTag); - } - - return false; - } - } - } - return true; -} - -void UUHLGameplayAbility::OnDurationEnd_Implementation( - const FGameplayEffectRemovalInfo& GameplayEffectRemovalInfo) -{ - if (bEndAbilityOnDurationExpired) - { - K2_EndAbility(); - } -} - -const FGameplayTagContainer* UUHLGameplayAbility::GetAbilityDurationTags() const -{ - UGameplayEffect* CDGE = GetAbilityDurationGameplayEffect(); - return CDGE ? &CDGE->GetGrantedTags() : nullptr; -} - -UGameplayEffect* UUHLGameplayAbility::GetAbilityDurationGameplayEffect() const -{ - if (AbilityDurationGameplayEffectClass) - { - return AbilityDurationGameplayEffectClass->GetDefaultObject(); - } - return nullptr; -} - -bool UUHLGameplayAbility::CommitCheck( - const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo, - FGameplayTagContainer* OptionalRelevantTags) -{ - if (!CheckAbilityDuration(Handle, ActorInfo, OptionalRelevantTags)) - { - return false; - } - return Super::CommitCheck(Handle, ActorInfo, ActivationInfo, OptionalRelevantTags); -} - -void UUHLGameplayAbility::CancelAbility( - const FGameplayAbilitySpecHandle Handle, - const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo, - bool bReplicateCancelAbility) -{ - if (!bCancelManually) - { - Super::CancelAbility(Handle, ActorInfo, ActivationInfo, bReplicateCancelAbility); - return; - } - - // Intercept and mark cancel requested - bCancelRequested = true; - - // Blueprint hook for custom cancel handling - ReceiveCancelRequested(); - -#if WITH_EDITOR - // Schedule an editor-only reminder if ReleaseCancellation() isn't called within 60 seconds - if (UWorld* World = GetWorld()) - { - World->GetTimerManager().SetTimer( - EditorWarningHandle, - this, - &ThisClass::CheckCancelReminder, - 60.0f, - false - ); - } -#endif -} - -#if WITH_EDITOR -void UUHLGameplayAbility::CheckCancelReminder() -{ - if (bCancelRequested && IsActive()) - { - if (GEngine) - { - GEngine->AddOnScreenDebugMessage( - -1, - 5.0f, - FColor::Yellow, - TEXT("Warning: ReleaseCancellation() was not called for this ability within 60 seconds.") - ); - } - } -} -#endif - -void UUHLGameplayAbility::ReleaseCancellation() -{ - if (bCancelManually && bCancelRequested && IsActive()) - { -#if WITH_EDITOR - // Clear any pending editor warning - if (UWorld* World = GetWorld()) - { - World->GetTimerManager().ClearTimer(EditorWarningHandle); - } -#endif - // Perform actual cancel - Super::CancelAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true); - bCancelRequested = false; - - // Blueprint hook after cancel completed - ReceiveCancelCompleted(); - } -} - -void UUHLGameplayAbility::OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) -{ - Super::OnGiveAbility(ActorInfo, Spec); - - K2_OnAbilityAdded(); - - TryActivateAbilityOnSpawn(ActorInfo, Spec); -} - -void UUHLGameplayAbility::OnRemoveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) -{ - K2_OnAbilityRemoved(); - Super::OnRemoveAbility(ActorInfo, Spec); -} - -void UUHLGameplayAbility::OnPawnAvatarSet() -{ - K2_OnPawnAvatarSet(); -} diff --git a/Source/UHLGAS/Private/Animations/Notifies/ANS_ActivateAbility.cpp b/Source/UHLGAS/Private/Animations/Notifies/ANS_ActivateAbility.cpp deleted file mode 100644 index 555e35a7..00000000 --- a/Source/UHLGAS/Private/Animations/Notifies/ANS_ActivateAbility.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animations/Notifies/ANS_ActivateAbility.h" - -#include "Engine/World.h" -#include "Animation/AnimMontage.h" -#include "AbilitySystemComponent.h" -#include "AbilitySystemInterface.h" -#include "Components/SkeletalMeshComponent.h" -#include "Utils/UnrealHelperLibraryBPL.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(ANS_ActivateAbility) - -FString UANS_ActivateAbility::GetNotifyName_Implementation() const -{ - return FString("ActivateAbility ") + GameplayAbilityTag.ToString(); -} - -void UANS_ActivateAbility::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - if (!GameplayAbilityTag.IsValid()) - { - UUnrealHelperLibraryBPL::DebugPrintString(MeshComp->GetWorld(), FString::Printf(TEXT("%s GameplayAbilityTag not set"), *this->GetName())); - return; - } - - ActorWithASC = Cast(MeshComp->GetOwner()); - if (ActorWithASC.IsValid()) - { - ActorWithASC->GetAbilitySystemComponent()->TryActivateAbilitiesByTag(FGameplayTagContainer(GameplayAbilityTag), bAllowRemoteActivation); - } -} - -void UANS_ActivateAbility::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyEnd(MeshComp, Animation, EventReference); - - if (!GameplayAbilityTag.IsValid()) - { - UUnrealHelperLibraryBPL::DebugPrintString(MeshComp->GetWorld(), FString::Printf(TEXT("%s GameplayAbilityTag not set"), *this->GetName())); - return; - } - - CancelAbility(); -} - -void UANS_ActivateAbility::OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) -{ - if (!bDeactivateOnMontageBlendingOut || !Montage) - { - return; - } - - if (ActorWithASC.IsValid()) - { - CancelAbility(); - } -} - -void UANS_ActivateAbility::CancelAbility() -{ - if (ActorWithASC.IsValid()) - { - const FGameplayTagContainer Tags = FGameplayTagContainer(GameplayAbilityTag); - ActorWithASC->GetAbilitySystemComponent()->CancelAbilities(&Tags); - } -} diff --git a/Source/UHLGAS/Private/Animations/Notifies/ANS_CatchToAbilityInputCache.cpp b/Source/UHLGAS/Private/Animations/Notifies/ANS_CatchToAbilityInputCache.cpp deleted file mode 100644 index f25f810b..00000000 --- a/Source/UHLGAS/Private/Animations/Notifies/ANS_CatchToAbilityInputCache.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animations/Notifies/ANS_CatchToAbilityInputCache.h" - -#include "AbilitySystemInterface.h" -#include "UHLAbilitySystemComponent.h" -#include "Components/SkeletalMeshComponent.h" -#include "Core/UHLGameplayTags.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(ANS_CatchToAbilityInputCache) - -void UANS_CatchToAbilityInputCache::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - AActor* Actor = MeshComp->GetOwner(); - if (!IsValid(Actor)) return; - - checkf(Actor->Implements(), TEXT("ANS_CatchToAbilityInputCache can be used only on characters nested from UHL AbilitySystem")); - - IAbilitySystemInterface* AbilitySystemInterface = Cast(Actor); - if (AbilitySystemInterface == nullptr) return; - - ASC = Cast(AbilitySystemInterface->GetAbilitySystemComponent()); - checkf(ASC, TEXT("ANS_CatchToAbilityInputCache can be used only on characters nested from UHL AbilitySystem")); - - ASC->AddLooseGameplayTag(UHLGameplayTags::TAG_UHL_AbilityInputCache_Catching); -} - -void UANS_CatchToAbilityInputCache::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyEnd(MeshComp, Animation, EventReference); - - if (!IsValid(ASC)) return; - - ASC->RemoveLooseGameplayTagCompletly(UHLGameplayTags::TAG_UHL_AbilityInputCache_Catching); -} diff --git a/Source/UHLGAS/Private/Animations/Notifies/ANS_CheckAbilityInputCache.cpp b/Source/UHLGAS/Private/Animations/Notifies/ANS_CheckAbilityInputCache.cpp deleted file mode 100644 index cbfd4422..00000000 --- a/Source/UHLGAS/Private/Animations/Notifies/ANS_CheckAbilityInputCache.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animations/Notifies/ANS_CheckAbilityInputCache.h" - -#include "AbilitySystemInterface.h" -#include "UHLAbilitySystemComponent.h" -#include "Components/SkeletalMeshComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(ANS_CheckAbilityInputCache) - -void UANS_CheckAbilityInputCache::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - AActor* Actor = MeshComp->GetOwner(); - if (!IsValid(Actor)) return; - - checkf(Actor->Implements(), TEXT("ANS_CheckAbilityInputCache can be used only on characters nested from UHL AbilitySystem")); - - IAbilitySystemInterface* AbilitySystemInterface = Cast(Actor); - if (AbilitySystemInterface == nullptr) return; - - ASC = Cast(AbilitySystemInterface->GetAbilitySystemComponent()); - checkf(ASC, TEXT("ANS_CheckAbilityInputCache can be used only on characters nested from UHL AbilitySystem")); - - SavedTargetTags = TargetTags; -} - -void UANS_CheckAbilityInputCache::NotifyTick(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyTick(MeshComp, Animation, FrameDeltaTime, EventReference); - - if (!IsValid(ASC)) - { - return; - } - - // if (bUseCheckCacheOnlyWithThisTags) - // { - // if (SavedTargetTags.IsEmpty()) - // { - // NotifyEnd(MeshComp, Animation, EventReference); - // return; - // } - // - // TArray RemovedTags {}; - // for (const FGameplayTag& Tag : SavedTargetTags) - // { - // if (!ASC->GetAbilityInputCache()->GetAbilityInputCache().Contains(Tag)) continue; - // ASC->GetAbilityInputCache()->CheckCache(); - // if (bCacheOnce) - // { - // RemovedTags.Add(Tag); - // } - // } - // - // for (const FGameplayTag& Tag : RemovedTags) - // { - // SavedTargetTags.RemoveTag(Tag); - // } - // } - // else - // { - ASC->GetAbilityInputCache()->CheckCache(); - // } -} - -void UANS_CheckAbilityInputCache::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyEnd(MeshComp, Animation, EventReference); - - if (bClearCacheOnEnd && IsValid(ASC)) - { - ASC->GetAbilityInputCache()->ClearCache(); - } -} diff --git a/Source/UHLGAS/Private/Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.cpp b/Source/UHLGAS/Private/Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.cpp deleted file mode 100644 index ac06e50d..00000000 --- a/Source/UHLGAS/Private/Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.h" - -#include "Animation/AnimMontage.h" -#include "Components/SkeletalMeshComponent.h" -#include "Kismet/GameplayStatics.h" - - -void UANS_UHLGAS_GlobalTimeDilation::NotifyTick(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyTick(MeshComp, Animation, FrameDeltaTime, EventReference); - - float GlobalTimeDilationCurveValue = 1.0f; - MeshComp->GetAnimInstance()->GetCurveValueWithDefault("GlobalTimeDilation", 1.0f, GlobalTimeDilationCurveValue); - - UGameplayStatics::SetGlobalTimeDilation(MeshComp->GetOwner(), GlobalTimeDilationCurveValue); -} - -void UANS_UHLGAS_GlobalTimeDilation::OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) -{ - Super::OnMontageBlendingOut(Montage, bInterrupted); - - UObject* Outer = Montage->GetOuter(); - UGameplayStatics::SetGlobalTimeDilation(Outer, 1.0f); -} - diff --git a/Source/UHLGAS/Private/Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.cpp b/Source/UHLGAS/Private/Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.cpp deleted file mode 100644 index 2d35d9df..00000000 --- a/Source/UHLGAS/Private/Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.h" - -#include "AbilitySystemComponent.h" -#include "AbilitySystemGlobals.h" - -void UANS_UHLGAS_TimedNiagaraEffect::NotifyBegin( - USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, - const FAnimNotifyEventReference& EventReference) -{ - AActor* Owner = MeshComp->GetOwner(); - if (!Owner) return; - - if (CanActivateNiagara(Owner)) - { - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - } -} - -bool UANS_UHLGAS_TimedNiagaraEffect::GetAbilitySystemChecksRequired() const -{ - return ActivationRequiredTags.Num() > 0 - || ActivationBlockedTags.Num() > 0; -} - -bool UANS_UHLGAS_TimedNiagaraEffect::CanActivateNiagara(AActor* Owner) const -{ - if (bIgnoreTagRequirementsInPreview && Owner->GetWorld()->IsPreviewWorld()) return true; - if (!GetAbilitySystemChecksRequired()) return true; - - UAbilitySystemComponent* ASC = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(Owner); - if (!ASC) return false; - - const FGameplayTagContainer OwnedTags = ASC->GetOwnedGameplayTags(); - if (OwnedTags.HasAll(ActivationRequiredTags) && !OwnedTags.HasAny(ActivationBlockedTags)) - { - return true; - } - - return false; -} \ No newline at end of file diff --git a/Source/UHLGAS/Private/Animations/Notifies/AN_FireGameplayEvent.cpp b/Source/UHLGAS/Private/Animations/Notifies/AN_FireGameplayEvent.cpp deleted file mode 100644 index 7a27db5e..00000000 --- a/Source/UHLGAS/Private/Animations/Notifies/AN_FireGameplayEvent.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animations/Notifies/AN_FireGameplayEvent.h" - -#include "AbilitySystemComponent.h" -#include "AbilitySystemGlobals.h" -#include "Components/SkeletalMeshComponent.h" -#include "Abilities/GameplayAbilityTypes.h" - -#if WITH_EDITOR -void UAN_FireGameplayEvent::PostEditChangeProperty( - struct FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.Property != nullptr && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED(UAN_FireGameplayEvent, EventTag)) - { - if (UAnimSequenceBase* AnimSeq = Cast(GetOuter())) - { - AnimSeq->Modify(); - } - } -} -#endif - -FString UAN_FireGameplayEvent::GetNotifyName_Implementation() const -{ - return FString("FireGameplayEvent->") + EventTag.ToString(); -} - -void UAN_FireGameplayEvent::Notify( - USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, - const FAnimNotifyEventReference& EventReference) -{ - Super::Notify(MeshComp, Animation, EventReference); - - if (!MeshComp) return; - - AActor* TargetActor = MeshComp->GetOwner(); - if (!TargetActor) return; - - UAbilitySystemComponent* TargetASC = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(TargetActor); - - FGameplayEventData EventData; - EventData.Target = TargetActor; - EventData.Instigator = TargetActor; - EventData.EventMagnitude = EventMagnitude; - EventData.OptionalObject = OptionalObject; - EventData.OptionalObject2 = OptionalObject2; - EventData.TargetTags = TargetTags; - EventData.InstigatorTags = InstigatorTags; - TargetASC->HandleGameplayEvent(EventTag, &EventData); -} \ No newline at end of file diff --git a/Source/UHLGAS/Private/AttributeSets/UHLAttributeSet.cpp b/Source/UHLGAS/Private/AttributeSets/UHLAttributeSet.cpp deleted file mode 100644 index 5f506ef1..00000000 --- a/Source/UHLGAS/Private/AttributeSets/UHLAttributeSet.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "AttributeSets/UHLAttributeSet.h" - -#include "UHLAbilitySystemComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLAttributeSet) - -UUHLAttributeSet::UUHLAttributeSet() -{ -} - -UWorld* UUHLAttributeSet::GetWorld() const -{ - const UObject* Outer = GetOuter(); - check(Outer); - - return Outer->GetWorld(); -} - -UUHLAbilitySystemComponent* UUHLAttributeSet::GetUHLAbilitySystemComponent() const -{ - return Cast(GetOwningAbilitySystemComponent()); -} diff --git a/Source/UHLGAS/Private/Core/UHLAbilitySystemInterface.cpp b/Source/UHLGAS/Private/Core/UHLAbilitySystemInterface.cpp deleted file mode 100644 index bebb796c..00000000 --- a/Source/UHLGAS/Private/Core/UHLAbilitySystemInterface.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Core/UHLAbilitySystemInterface.h" - diff --git a/Source/UHLGAS/Private/Data/PayloadWithInstancedStructs.cpp b/Source/UHLGAS/Private/Data/PayloadWithInstancedStructs.cpp deleted file mode 100644 index 3a532afd..00000000 --- a/Source/UHLGAS/Private/Data/PayloadWithInstancedStructs.cpp +++ /dev/null @@ -1,11 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Data/PayloadWithInstancedStructs.h" - -UPayloadWithInstancedStructs::UPayloadWithInstancedStructs( - TArray InstancedStructs_In) -{ - InstancedStructs = InstancedStructs_In; -} \ No newline at end of file diff --git a/Source/UHLGAS/Private/Development/UHLGASSettings.cpp b/Source/UHLGAS/Private/Development/UHLGASSettings.cpp deleted file mode 100644 index ea5ace8c..00000000 --- a/Source/UHLGAS/Private/Development/UHLGASSettings.cpp +++ /dev/null @@ -1,6 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Development/UHLGASSettings.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLGASSettings) \ No newline at end of file diff --git a/Source/UHLGAS/Private/Input/AbilityInputCache.cpp b/Source/UHLGAS/Private/Input/AbilityInputCache.cpp deleted file mode 100644 index 1caf78e9..00000000 --- a/Source/UHLGAS/Private/Input/AbilityInputCache.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "Input/AbilityInputCache.h" - -#include "UHLAbilitySystemComponent.h" -#include "UHLGASBlueprintLibrary.h" -#include "Abilities/UHLGameplayAbility.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AbilityInputCache) - -DEFINE_LOG_CATEGORY(Log_UHL_AbilityInputCache); - -void UAbilityInputCache::SetUp(UUHLAbilitySystemComponent* ASC_In) -{ - if (!ASC_In) return; - - ASC = ASC_In; -} - -bool UAbilityInputCache::AddTagToCache(FGameplayTag AbilityTag_In) -{ - // not required to be unique - AbilityInputCache.Add(AbilityTag_In); - UE_LOG(Log_UHL_AbilityInputCache, Log, TEXT("Add ability to InputCache - %s"), *AbilityTag_In.ToString()); - return true; -} - -bool UAbilityInputCache::AddTagsToCache(TArray AbilityTags_In, bool bReverse) -{ - if (AbilityTags_In.IsEmpty()) return false; - - if (bReverse) - { - for (int32 i = AbilityTags_In.Num() - 1; i >= 0; i--) - { - AddTagToCache(AbilityTags_In[i]); - } - } - else - { - for (int32 i = 0; i < AbilityTags_In.Num(); i++) - { - AddTagToCache(AbilityTags_In[i]); - } - } - - return true; -} - -// should cancel all abilities that also cached but not fired -void UAbilityInputCache::CheckCache() -{ - UE_LOG(Log_UHL_AbilityInputCache, Log, TEXT("Check AbilityInputCache")); - - if (AbilityInputCache.IsEmpty()) - { - UE_LOG(Log_UHL_AbilityInputCache, Log, TEXT("AbilityInputCache is empty")); - return; - }; - - if (ASC.IsValid()) - { - bool bActivatedAtLeastOneTag = false; - for (int32 i = AbilityInputCache.Num() - 1; i >= 0; i--) - { - FGameplayTag AbilityTagToActivate = AbilityInputCache[i]; - if (AbilityTagToActivate.IsValid()) - { - // 1) активировать некст абилку и уповать на то что rollattack не активируется потому что условия не подходят - - // 2) [средне хуйевый] сделать добавление в разные типы кэшей, тогда будет кэш Default/Normal/RollCache, - // - Default - кэш содержащий все действия, если нет приоритезации cache'а, то из Default берется действие - // - Normal - обычные атаки и действия(кувырок, прыжок) - // - RollCache - roll атаки и действия(кувырок, прыжок) - // в check cache - // говорю приоритезируй RollCache, он берет и достает кувырочную атаку либо сам roll, либо чет еще что в RollCache'е есть - // т.е. у каждой абилки есть несколько кешей в которые она заносится - Default/Normal/RollCache/JumpCache - // мб тогда наоборот добавлять действие во все cache'ы, а указывать в абилке только те кэши - // в которые ее добавлять не надо, ExcludeFromCaches TArray и список кэшей в которые абилку - // включать не стоит, минусы - контр-интуитивно, плюсы - "типо меньше работы" - - // [хуйня варик] 3) prioritize abilities matching tag и тогда в кувырке я смогу сказать приоритезируй - // атаку кувырочную, а не обычную удобненько, а как эта приоритезация должна работать, вот есть такой стэк - // - Roll - // - MeleeAttack.RightHand - // - MeleeAttack.Roll - // если говорю приоритезируй атаку MeleeAttack.Roll, то возьмет не Roll, а MeleeAttack.Roll - хуйня варик - - // 4) [вроде оч гибкий] CacheInputActivationRequiredTags/CacheInputBlockedTags - запретить если чел не в кувырке добавлять некоторые абилки в cache - // пример есть Roll атака, если мы не в Roll'е тогда зачем ее добавлять в Cache воообще, нужно не только - // bCacheInput чекать, но и вот эти теги присутствуют/отсутствуют. - // Единственная проблема вот я кувырок и ЛКМ почти одновременно нажал че произойдет? - // успеет ли tag кувырка наложится прежде чем я - - // TODO should we get another Ability from cache to activate - // if failed to activation of last ability failed ??? mb it should be an option - UE_LOG(Log_UHL_AbilityInputCache, Log, TEXT("InputCache checked found ability to activate - %s!"), *AbilityTagToActivate.ToString()); - - // FGameplayAbilitySpec AbilitySpec; - // UUHLGASBlueprintLibrary::FindAbilitySpecByTagUsingASC(ASC.Get(), AbilityTagToActivate, AbilitySpec); - // if (AbilitySpec.IsActive()) - // { - // const UUHLGameplayAbility* AbilityCDO = Cast(AbilitySpec.Ability); - // if (AbilityCDO->bIgnoreActivatedState) - // { - // // ASC->CancelAbilityHandle(AbilitySpec.Handle); - // // bool bCanceledSuccessfully = ASC->TryCancelAbilityWithTag(AbilityTagToActivate); - // // bCanceledSuccessfully; - // } - // } - - bool bActivated = ASC->TryActivateAbilityWithTag(AbilityTagToActivate); - UE_LOG(Log_UHL_AbilityInputCache, Log, TEXT("Activation %s - %s!"), bActivated ? TEXT("successful") : TEXT("failed"), *AbilityTagToActivate.ToString()); - - if (bActivated) - { - bActivatedAtLeastOneTag = true; - break; - } - } - } - - // possibly is shit, ANS_CheckAbilityInputCache clears cache on end (forgot how its related) - if (bActivatedAtLeastOneTag) - { - ClearCache(); - UE_LOG(Log_UHL_AbilityInputCache, Log, TEXT("AbilityInputCache activated at least on tag from cache - clean")); - } - } -} - -void UAbilityInputCache::ClearCache() -{ - AbilityInputCache.Empty(); -} - -// void UAbilityInputCache::RemoveTagFromCache(FGameplayTag AbilityTag_In) -// { -// AbilityInputCache.Remove(AbilityTag_In); -// } diff --git a/Source/UHLGAS/Private/Input/UHLInputComponent.cpp b/Source/UHLGAS/Private/Input/UHLInputComponent.cpp deleted file mode 100644 index e94de885..00000000 --- a/Source/UHLGAS/Private/Input/UHLInputComponent.cpp +++ /dev/null @@ -1,10 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Input/UHLInputComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLInputComponent) - -UUHLInputComponent::UUHLInputComponent(const FObjectInitializer& ObjectInitializer) -{ -} diff --git a/Source/UHLGAS/Private/Input/UHLInputConfig.cpp b/Source/UHLGAS/Private/Input/UHLInputConfig.cpp deleted file mode 100644 index 2a71bf76..00000000 --- a/Source/UHLGAS/Private/Input/UHLInputConfig.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "Input/UHLInputConfig.h" -// #include "LyraLogChannels.h" -// #include "InputMappingContext.h" -// #include "Settings/LyraSettingsLocal.h" -// #include "Player/LyraLocalPlayer.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLInputConfig) - -UUHLInputConfig::UUHLInputConfig(const FObjectInitializer& ObjectInitializer) {} - -// const UInputAction* UGCInputConfig::FindNativeInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound) const -// { -// for (const FGCInputAction& Action : NativeInputActions) -// { -// if (Action.InputAction && (Action.InputTag == InputTag)) -// { -// return Action.InputAction; -// } -// } -// -// if (bLogNotFound) -// { -// UE_LOG(LogTemp, Error, TEXT("Can't find NativeInputAction for InputTag [%s] on InputConfig [%s]."), *InputTag.ToString(), *GetNameSafe(this)); -// } -// -// return nullptr; -// } - -// const UInputAction* UGCInputConfig::FindAbilityInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound) const -// { -// for (const FGCInputActionAbilities& Action : AbilityInputActions) -// { -// if (Action.InputAction && (Action.AbilityTag == InputTag)) -// { -// return Action.InputAction; -// } -// } -// -// if (bLogNotFound) -// { -// UE_LOG(LogTemp, Error, TEXT("Can't find AbilityInputAction for InputTag [%s] on InputConfig [%s]."), *InputTag.ToString(), *GetNameSafe(this)); -// } -// -// return nullptr; -// } diff --git a/Source/UHLGAS/Private/Tasks/AA_TryActivateAbilityAndWait.cpp b/Source/UHLGAS/Private/Tasks/AA_TryActivateAbilityAndWait.cpp deleted file mode 100644 index 1faa8978..00000000 --- a/Source/UHLGAS/Private/Tasks/AA_TryActivateAbilityAndWait.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/AA_TryActivateAbilityAndWait.h" - -#include "AbilitySystemBlueprintLibrary.h" -#include "AbilitySystemComponent.h" -#include "UHLGASBlueprintLibrary.h" -#include "Abilities/GameplayAbility.h" -#include "Data/PayloadWithInstancedStructs.h" -#include "Utils/UnrealHelperLibraryBPL.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AA_TryActivateAbilityAndWait) - -void UAA_TryActivateAbilityAndWait::OnAbilityActivate(UGameplayAbility* ActivatedAbility) -{ - if (!IncludeTriggeredAbilities && ActivatedAbility->IsTriggered()) - { - return; - } - - const FGameplayTagContainer& AbilityTags = ActivatedAbility->GetAssetTags(); - if (WithTag.IsValid() && !AbilityTags.HasTag(WithTag)) - { - // Failed tag check - return; - } - - if (ShouldBroadcastDelegates()) - { - OnActivate.Broadcast(ActivatedAbility); - } - - // if (TriggerOnce) - // { - // EndAction(); - // } -} - -void UAA_TryActivateAbilityAndWait::OnAbilityDeactivate(UGameplayAbility* ActivatedAbility) -{ - const FGameplayTagContainer& AbilityTags = ActivatedAbility->GetAssetTags(); - if (WithTag.IsValid() && !AbilityTags.HasTag(WithTag)) - { - // Failed tag check - return; - } - - if (ShouldBroadcastDelegates()) - { - OnEndAbility.Broadcast(ActivatedAbility); - } - - if (TriggerOnce) - { - EndAction(); - } -} - -UAA_TryActivateAbilityAndWait* UAA_TryActivateAbilityAndWait::TryActivateAbilityAndWait(AActor* TargetActor, - FGameplayTag InWithTag, bool bUsingEvent_In, const TArray& PayloadInfo, bool InIncludeTriggeredAbilities, bool bAllowRemoteActivation, bool InTriggerOnce) -{ - UAA_TryActivateAbilityAndWait* MyObj = NewObject(); - MyObj->SetAbilityActor(TargetActor); - MyObj->WithTag = InWithTag; - MyObj->bUsingEvent = bUsingEvent_In; - MyObj->IncludeTriggeredAbilities = InIncludeTriggeredAbilities; - MyObj->TriggerOnce = InTriggerOnce; - MyObj->bAllowRemoteActivation = bAllowRemoteActivation; - MyObj->PayloadInfo = PayloadInfo; - return MyObj; -} - -// UAA_TryActivateAbilityAndWait* UAA_TryActivateAbilityAndWait::WaitForAbilityDeactivateWithTagRequirements( -// AActor* TargetActor, FGameplayTagRequirements TagRequirements, bool InIncludeTriggeredAbilities, -// bool InTriggerOnce) -// { -// UAA_TryActivateAbilityAndWait* MyObj = NewObject(); -// MyObj->SetAbilityActor(TargetActor); -// MyObj->TagRequirements = TagRequirements; -// MyObj->IncludeTriggeredAbilities = InIncludeTriggeredAbilities; -// MyObj->TriggerOnce = InTriggerOnce; -// return MyObj; -// } -// -// UAA_TryActivateAbilityAndWait* UAA_TryActivateAbilityAndWait::WaitForAbilityDeactivate_Query( -// AActor* TargetActor, FGameplayTagQuery Query, bool InIncludeTriggeredAbilities, bool InTriggerOnce) -// { -// UAA_TryActivateAbilityAndWait* MyObj = NewObject(); -// MyObj->SetAbilityActor(TargetActor); -// MyObj->Query = Query; -// MyObj->IncludeTriggeredAbilities = InIncludeTriggeredAbilities; -// MyObj->TriggerOnce = InTriggerOnce; -// return MyObj; -// } - -void UAA_TryActivateAbilityAndWait::Activate() -{ - Super::Activate(); - - if (UAbilitySystemComponent* ASC = GetAbilitySystemComponent()) - { - OnAbilityActivateDelegateHandle = ASC->AbilityActivatedCallbacks.AddUObject(this, &UAA_TryActivateAbilityAndWait::OnAbilityActivate); - OnAbilityActivateDelegateHandle = ASC->AbilityEndedCallbacks.AddUObject(this, &UAA_TryActivateAbilityAndWait::OnAbilityDeactivate); - - bool bActivated = false; - if (bUsingEvent) - { - UPayloadWithInstancedStructs* Payload = NewObject(); - Payload->InstancedStructs = PayloadInfo; - FGameplayEventData EventData; - EventData.OptionalObject = Payload; - int32 ActivatedAbilitiesCount = ASC->HandleGameplayEvent(WithTag, &EventData); - bActivated = (ActivatedAbilitiesCount > 0); - } - else - { - bActivated = UUHLGASBlueprintLibrary::TryActivateAbilityWithTag(ASC, WithTag, bAllowRemoteActivation); - } - if (!bActivated) - { - EndAction(); - } - } - else - { - EndAction(); - } -} - -void UAA_TryActivateAbilityAndWait::EndAction() -{ - if (UAbilitySystemComponent* ASC = GetAbilitySystemComponent()) - { - ASC->AbilityActivatedCallbacks.Remove(OnAbilityActivateDelegateHandle); - } - Super::EndAction(); -} - diff --git a/Source/UHLGAS/Private/Tasks/AA_UHLGAS_WaitAbilityActivate.cpp b/Source/UHLGAS/Private/Tasks/AA_UHLGAS_WaitAbilityActivate.cpp deleted file mode 100644 index 71366fbd..00000000 --- a/Source/UHLGAS/Private/Tasks/AA_UHLGAS_WaitAbilityActivate.cpp +++ /dev/null @@ -1,114 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/AA_UHLGAS_WaitAbilityActivate.h" -#include "AbilitySystemGlobals.h" -#include "AbilitySystemComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AA_UHLGAS_WaitAbilityActivate) - -void UAA_UHLGAS_WaitAbilityActivate::OnAbilityActivate(UGameplayAbility* ActivatedAbility) -{ - if (!IncludeTriggeredAbilities && ActivatedAbility->IsTriggered()) - { - return; - } - - const FGameplayTagContainer& AbilityTags = ActivatedAbility->GetAssetTags(); - - if (TagRequirements.IsEmpty()) - { - if ((WithTag.IsValid() && !AbilityTags.HasTag(WithTag)) || - (WithoutTag.IsValid() && AbilityTags.HasTag(WithoutTag))) - { - // Failed tag check - return; - } - } - else - { - if (!TagRequirements.RequirementsMet(AbilityTags)) - { - // Failed tag check - return; - } - } - - if (Query.IsEmpty() == false) - { - if (Query.Matches(AbilityTags) == false) - { - // Failed query - return; - } - } - - if (ShouldBroadcastDelegates()) - { - OnActivate.Broadcast(ActivatedAbility); - } - - if (TriggerOnce) - { - EndAction(); - } -} - -UAA_UHLGAS_WaitAbilityActivate* UAA_UHLGAS_WaitAbilityActivate::WaitForAbilityActivate(AActor* TargetActor, - FGameplayTag InWithTag, FGameplayTag InWithoutTag, bool InIncludeTriggeredAbilities, bool InTriggerOnce) -{ - UAA_UHLGAS_WaitAbilityActivate* MyObj = NewObject(); - MyObj->SetAbilityActor(TargetActor); - MyObj->WithTag = InWithTag; - MyObj->WithoutTag = InWithoutTag; - MyObj->IncludeTriggeredAbilities = InIncludeTriggeredAbilities; - MyObj->TriggerOnce = InTriggerOnce; - return MyObj; -} - -UAA_UHLGAS_WaitAbilityActivate* UAA_UHLGAS_WaitAbilityActivate::WaitForAbilityActivateWithTagRequirements( - AActor* TargetActor, FGameplayTagRequirements TagRequirements, bool InIncludeTriggeredAbilities, - bool InTriggerOnce) -{ - UAA_UHLGAS_WaitAbilityActivate* MyObj = NewObject(); - MyObj->SetAbilityActor(TargetActor); - MyObj->TagRequirements = TagRequirements; - MyObj->IncludeTriggeredAbilities = InIncludeTriggeredAbilities; - MyObj->TriggerOnce = InTriggerOnce; - return MyObj; -} - -UAA_UHLGAS_WaitAbilityActivate* UAA_UHLGAS_WaitAbilityActivate::WaitForAbilityActivate_Query( - AActor* TargetActor, FGameplayTagQuery Query, bool InIncludeTriggeredAbilities, bool InTriggerOnce) -{ - UAA_UHLGAS_WaitAbilityActivate* MyObj = NewObject(); - MyObj->SetAbilityActor(TargetActor); - MyObj->Query = Query; - MyObj->IncludeTriggeredAbilities = InIncludeTriggeredAbilities; - MyObj->TriggerOnce = InTriggerOnce; - return MyObj; -} - -void UAA_UHLGAS_WaitAbilityActivate::Activate() -{ - Super::Activate(); - - if (UAbilitySystemComponent* ASC = GetAbilitySystemComponent()) - { - OnAbilityActivateDelegateHandle = ASC->AbilityActivatedCallbacks.AddUObject(this, &UAA_UHLGAS_WaitAbilityActivate::OnAbilityActivate); - } - else - { - EndAction(); - } -} - -void UAA_UHLGAS_WaitAbilityActivate::EndAction() -{ - if (UAbilitySystemComponent* ASC = GetAbilitySystemComponent()) - { - ASC->AbilityActivatedCallbacks.Remove(OnAbilityActivateDelegateHandle); - } - Super::EndAction(); -} - diff --git a/Source/UHLGAS/Private/Tasks/AA_WaitAbilityDeactivate.cpp b/Source/UHLGAS/Private/Tasks/AA_WaitAbilityDeactivate.cpp deleted file mode 100644 index 1fbb026c..00000000 --- a/Source/UHLGAS/Private/Tasks/AA_WaitAbilityDeactivate.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/AA_WaitAbilityDeactivate.h" -#include "AbilitySystemGlobals.h" -#include "AbilitySystemComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AA_WaitAbilityDeactivate) - -void UAA_WaitAbilityDeactivate::OnAbilityDeactivate(UGameplayAbility* DeactivatedAbility) -{ - const FGameplayTagContainer& AbilityTags = DeactivatedAbility->GetAssetTags(); - - if (TagRequirements.IsEmpty()) - { - if ((WithTag.IsValid() && !AbilityTags.HasTag(WithTag)) || - (WithoutTag.IsValid() && AbilityTags.HasTag(WithoutTag))) - { - // Failed tag check - return; - } - } - else - { - if (!TagRequirements.RequirementsMet(AbilityTags)) - { - // Failed tag check - return; - } - } - - if (Query.IsEmpty() == false) - { - if (Query.Matches(AbilityTags) == false) - { - // Failed query - return; - } - } - - if (ShouldBroadcastDelegates()) - { - OnDeactivate.Broadcast(DeactivatedAbility); - } - - if (TriggerOnce) - { - EndAction(); - } -} - -UAA_WaitAbilityDeactivate* UAA_WaitAbilityDeactivate::WaitForAbilityDeactivate(AActor* TargetActor, - FGameplayTag InWithTag, FGameplayTag InWithoutTag, bool InTriggerOnce) -{ - UAA_WaitAbilityDeactivate* MyObj = NewObject(); - MyObj->SetAbilityActor(TargetActor); - MyObj->WithTag = InWithTag; - MyObj->WithoutTag = InWithoutTag; - MyObj->TriggerOnce = InTriggerOnce; - return MyObj; -} - -UAA_WaitAbilityDeactivate* UAA_WaitAbilityDeactivate::WaitForAbilityDeactivateWithTagRequirements( - AActor* TargetActor, FGameplayTagRequirements TagRequirements, bool InTriggerOnce) -{ - UAA_WaitAbilityDeactivate* MyObj = NewObject(); - MyObj->SetAbilityActor(TargetActor); - MyObj->TagRequirements = TagRequirements; - MyObj->TriggerOnce = InTriggerOnce; - return MyObj; -} - -UAA_WaitAbilityDeactivate* UAA_WaitAbilityDeactivate::WaitForAbilityDeactivate_Query( - AActor* TargetActor, FGameplayTagQuery Query, bool InTriggerOnce) -{ - UAA_WaitAbilityDeactivate* MyObj = NewObject(); - MyObj->SetAbilityActor(TargetActor); - MyObj->Query = Query; - MyObj->TriggerOnce = InTriggerOnce; - return MyObj; -} - -void UAA_WaitAbilityDeactivate::Activate() -{ - Super::Activate(); - - if (UAbilitySystemComponent* ASC = GetAbilitySystemComponent()) - { - OnAbilityDeactivateDelegateHandle = ASC->AbilityEndedCallbacks.AddUObject(this, &UAA_WaitAbilityDeactivate::OnAbilityDeactivate); - } - else - { - EndAction(); - } -} - -void UAA_WaitAbilityDeactivate::EndAction() -{ - if (UAbilitySystemComponent* ASC = GetAbilitySystemComponent()) - { - ASC->AbilityEndedCallbacks.Remove(OnAbilityDeactivateDelegateHandle); - } - Super::EndAction(); -} - diff --git a/Source/UHLGAS/Private/Tasks/AA_WaitAttributeChangeRatioThreshold.cpp b/Source/UHLGAS/Private/Tasks/AA_WaitAttributeChangeRatioThreshold.cpp deleted file mode 100644 index a198b207..00000000 --- a/Source/UHLGAS/Private/Tasks/AA_WaitAttributeChangeRatioThreshold.cpp +++ /dev/null @@ -1,148 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/AA_WaitAttributeChangeRatioThreshold.h" - -#include "AbilitySystemComponent.h" -#include "AbilitySystemGlobals.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AA_WaitAttributeChangeRatioThreshold) - -UAA_WaitAttributeChangeRatioThreshold::UAA_WaitAttributeChangeRatioThreshold(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - bTriggerOnce = false; - bMatchedComparisonLastAttributeChange = false; - LastAttributeNumeratorValue = 1.f; - LastAttributeDenominatorValue = 1.f; -} - -UAA_WaitAttributeChangeRatioThreshold* UAA_WaitAttributeChangeRatioThreshold::WaitForAttributeChangeRatioThreshold(AActor* TargetActor, FGameplayAttribute AttributeNumerator, FGameplayAttribute AttributeDenominator, TEnumAsByte ComparisonType, float ComparisonValue, bool bTriggerOnce, AActor* OptionalExternalOwner) -{ - UAA_WaitAttributeChangeRatioThreshold* MyTask = NewObject(); - MyTask->SetAbilityActor(TargetActor); - MyTask->AttributeNumerator = AttributeNumerator; - MyTask->AttributeDenominator = AttributeDenominator; - MyTask->ComparisonType = ComparisonType; - MyTask->ComparisonValue = ComparisonValue; - MyTask->bTriggerOnce = bTriggerOnce; - MyTask->ExternalOwner = OptionalExternalOwner ? UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(OptionalExternalOwner) : nullptr; - - return MyTask; -} - -void UAA_WaitAttributeChangeRatioThreshold::Activate() -{ - if (UAbilitySystemComponent* ASC = GetFocusedASC()) - { - LastAttributeNumeratorValue = ASC->GetNumericAttribute(AttributeNumerator); - LastAttributeDenominatorValue = ASC->GetNumericAttribute(AttributeDenominator); - bMatchedComparisonLastAttributeChange = DoesValuePassComparison(LastAttributeNumeratorValue, LastAttributeDenominatorValue); - - // Broadcast OnChange immediately with current value - if (ShouldBroadcastDelegates()) - { - OnChange.Broadcast(bMatchedComparisonLastAttributeChange, LastAttributeDenominatorValue != 0.f ? LastAttributeNumeratorValue/LastAttributeDenominatorValue : 0.f); - } - - OnNumeratorAttributeChangeDelegateHandle = ASC->GetGameplayAttributeValueChangeDelegate(AttributeNumerator).AddUObject(this, &UAA_WaitAttributeChangeRatioThreshold::OnNumeratorAttributeChange); - OnDenominatorAttributeChangeDelegateHandle = ASC->GetGameplayAttributeValueChangeDelegate(AttributeDenominator).AddUObject(this, &UAA_WaitAttributeChangeRatioThreshold::OnDenominatorAttributeChange); - } - else - { - EndAction(); - } -} - -void UAA_WaitAttributeChangeRatioThreshold::EndAction() -{ - if (UAbilitySystemComponent* ASC = GetFocusedASC()) - { - ASC->GetGameplayAttributeValueChangeDelegate(AttributeNumerator).Remove(OnNumeratorAttributeChangeDelegateHandle); - ASC->GetGameplayAttributeValueChangeDelegate(AttributeDenominator).Remove(OnDenominatorAttributeChangeDelegateHandle); - } - - Super::EndAction(); -} - -UAbilitySystemComponent* UAA_WaitAttributeChangeRatioThreshold::GetFocusedASC() const -{ - return ExternalOwner ? ToRawPtr(ExternalOwner) : GetAbilitySystemComponent(); -} - -void UAA_WaitAttributeChangeRatioThreshold::OnAttributeChange() -{ - UWorld* World = GetAbilitySystemComponent()->GetWorld(); - if (World && !CheckAttributeTimer.IsValid()) - { - // Trigger OnRatioChange check at the end of this frame/next so that any individual attribute change - // has time for the other attribute to update (in case they're linked) - World->GetTimerManager().SetTimer(CheckAttributeTimer, this, &UAA_WaitAttributeChangeRatioThreshold::OnRatioChange, 0.001f, false); - } -} - -void UAA_WaitAttributeChangeRatioThreshold::OnRatioChange() -{ - CheckAttributeTimer.Invalidate(); - - bool bPassedComparison = DoesValuePassComparison(LastAttributeNumeratorValue, LastAttributeDenominatorValue); - if (bPassedComparison != bMatchedComparisonLastAttributeChange) - { - bMatchedComparisonLastAttributeChange = bPassedComparison; - if (ShouldBroadcastDelegates()) - { - OnChange.Broadcast(bMatchedComparisonLastAttributeChange, LastAttributeDenominatorValue != 0.f ? LastAttributeNumeratorValue/LastAttributeDenominatorValue : 0.f); - } - if (bTriggerOnce) - { - EndAction(); - } - } -} - -void UAA_WaitAttributeChangeRatioThreshold::OnNumeratorAttributeChange(const FOnAttributeChangeData& CallbackData) -{ - LastAttributeNumeratorValue = CallbackData.NewValue; - OnAttributeChange(); -} - -void UAA_WaitAttributeChangeRatioThreshold::OnDenominatorAttributeChange(const FOnAttributeChangeData& CallbackData) -{ - LastAttributeDenominatorValue = CallbackData.NewValue; - OnAttributeChange(); -} - -bool UAA_WaitAttributeChangeRatioThreshold::DoesValuePassComparison(float ValueNumerator, float ValueDenominator) const -{ - if (ValueDenominator == 0.f) - { - return bMatchedComparisonLastAttributeChange; - } - - const float CurrentRatio = ValueNumerator / ValueDenominator; - bool bPassedComparison = true; - switch (ComparisonType) - { - case EWaitAttributeChangeComparison::ExactlyEqualTo: - bPassedComparison = (CurrentRatio == ComparisonValue); - break; - case EWaitAttributeChangeComparison::GreaterThan: - bPassedComparison = (CurrentRatio > ComparisonValue); - break; - case EWaitAttributeChangeComparison::GreaterThanOrEqualTo: - bPassedComparison = (CurrentRatio >= ComparisonValue); - break; - case EWaitAttributeChangeComparison::LessThan: - bPassedComparison = (CurrentRatio < ComparisonValue); - break; - case EWaitAttributeChangeComparison::LessThanOrEqualTo: - bPassedComparison = (CurrentRatio <= ComparisonValue); - break; - case EWaitAttributeChangeComparison::NotEqualTo: - bPassedComparison = (CurrentRatio != ComparisonValue); - break; - default: - break; - } - return bPassedComparison; -} diff --git a/Source/UHLGAS/Private/Tasks/AT_InterpolateToPosition.cpp b/Source/UHLGAS/Private/Tasks/AT_InterpolateToPosition.cpp deleted file mode 100644 index 48e2b2fc..00000000 --- a/Source/UHLGAS/Private/Tasks/AT_InterpolateToPosition.cpp +++ /dev/null @@ -1,299 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Tasks/AT_InterpolateToPosition.h" - -#include "Components/CapsuleComponent.h" -#include "Curves/CurveVector.h" -#include "Curves/CurveFloat.h" -#include "Engine/World.h" -#include "GameFramework/Character.h" -#include "GameFramework/CharacterMovementComponent.h" -#include "Kismet/KismetSystemLibrary.h" -#include "Net/UnrealNetwork.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AT_InterpolateToPosition) - -UAT_InterpolateToPosition::UAT_InterpolateToPosition(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - bTickingTask = true; - bSimulatedTask = true; - bIsFinished = false; -} - -UAT_InterpolateToPosition* UAT_InterpolateToPosition::InterpolateToPosition( - FHitResult& OutHit, - UGameplayAbility* OwningAbility, - const FName TaskInstanceName, - FVector Location, - const FRotator Rotation, - float Duration, - UCurveFloat* OptionalInterpolationCurve, - UCurveVector* OptionalVectorInterpolationCurve, - AActor* OptionalActorToInterpolate, - const bool bIsIgnoreHit, - const float DistanceOffset, - const bool bUseCapsuleTrace -) -{ - UAT_InterpolateToPosition* MyObj = NewAbilityTask(OwningAbility, TaskInstanceName); - - MyObj->ActorToInterpolate = OptionalActorToInterpolate != nullptr ? OptionalActorToInterpolate : MyObj->GetAvatarActor(); - if (MyObj->ActorToInterpolate != nullptr) - { - MyObj->StartLocation = MyObj->ActorToInterpolate->GetActorLocation(); - MyObj->StartRotation = MyObj->ActorToInterpolate->GetActorRotation(); - } - - if (!bIsIgnoreHit) - { - bool bBlockingHit = false; - if (bUseCapsuleTrace) - { - const ACharacter* Character = Cast(MyObj->ActorToInterpolate); - if (IsValid(Character)) - { - const float Radius = Character->GetCapsuleComponent()->GetUnscaledCapsuleRadius(); - const float HalfHeight = Character->GetCapsuleComponent()->GetUnscaledCapsuleHalfHeight(); - - bBlockingHit = CheckCapsuleHit( - MyObj->GetWorld(), - MyObj->ActorToInterpolate->GetActorLocation(), - Location, - Radius, - HalfHeight, - {MyObj->ActorToInterpolate}, - OutHit - ); - } - } - else - { - bBlockingHit = CheckHit( - MyObj->GetWorld(), - MyObj->ActorToInterpolate->GetActorLocation(), - Location, - {MyObj->ActorToInterpolate}, - OutHit - ); - } - - if (bBlockingHit) - { - const FVector Start = MyObj->ActorToInterpolate->GetActorLocation(); - const FVector CurrentEnd = GetCurrentEndLocation( - Start, - OutHit.Location, - DistanceOffset - ); - - Duration = GetCurrentDuration(Duration, Start, Location, CurrentEnd); - Location = CurrentEnd; - } - } - - MyObj->TargetLocation = Location; - MyObj->TargetRotation = Rotation; - MyObj->DurationOfMovement = FMath::Max(Duration, 0.001f); // Avoid negative or divide-by-zero cases - MyObj->TimeMoveStarted = MyObj->GetWorld()->GetTimeSeconds(); - MyObj->TimeMoveWillEnd = MyObj->TimeMoveStarted + MyObj->DurationOfMovement; - MyObj->LerpCurve = OptionalInterpolationCurve; - MyObj->LerpCurveVector = OptionalVectorInterpolationCurve; - - return MyObj; -} - -void UAT_InterpolateToPosition::InitSimulatedTask(UGameplayTasksComponent& InGameplayTasksComponent) -{ - Super::InitSimulatedTask(InGameplayTasksComponent); - - TimeMoveStarted = GetWorld()->GetTimeSeconds(); - TimeMoveWillEnd = TimeMoveStarted + DurationOfMovement; -} - -void UAT_InterpolateToPosition::Activate() -{ - Super::Activate(); -} - -void UAT_InterpolateToPosition::TickTask(float DeltaTime) -{ - if (bIsFinished) - { - return; - } - - Super::TickTask(DeltaTime); - AActor* MyActor = ActorToInterpolate; - if (MyActor) - { - const ACharacter* MyCharacter = Cast(MyActor); - if (MyCharacter) - { - UCharacterMovementComponent* CharMoveComp = Cast(MyCharacter->GetMovementComponent()); - if (CharMoveComp) - { - CharMoveComp->SetMovementMode(MOVE_Custom, 0); - } - } - - const float CurrentTime = GetWorld()->GetTimeSeconds(); - - if (CurrentTime >= TimeMoveWillEnd) - { - bIsFinished = true; - - // Teleport in attempt to find a valid collision spot - MyActor->TeleportTo(TargetLocation, MyActor->GetActorRotation()); - if (!bIsSimulating) - { - MyActor->ForceNetUpdate(); - if (ShouldBroadcastAbilityTaskDelegates()) - { - OnTargetLocationReached.Broadcast(); - } - EndTask(); - } - } - else - { - FVector NewLocation; - FRotator NewRotation; - - float MoveFraction = (CurrentTime - TimeMoveStarted) / DurationOfMovement; - if (LerpCurveVector) - { - const FVector ComponentInterpolationFraction = LerpCurveVector->GetVectorValue(MoveFraction); - NewLocation = FMath::Lerp(StartLocation, TargetLocation, ComponentInterpolationFraction); - NewRotation = FRotator::ZeroRotator; // TODO: make it work, here its initialized to remove warning - } - else - { - if (LerpCurve) - { - MoveFraction = LerpCurve->GetFloatValue(MoveFraction); - } - - NewLocation = FMath::Lerp(StartLocation, TargetLocation, MoveFraction); - NewRotation = FMath::Lerp(StartRotation, TargetRotation, MoveFraction); - } - - MyActor->SetActorLocation(NewLocation); - MyActor->SetActorRotation(NewRotation); - } - } - else - { - bIsFinished = true; - EndTask(); - } -} - -void UAT_InterpolateToPosition::PreDestroyFromReplication() -{ - bIsFinished = true; - EndTask(); -} - -void UAT_InterpolateToPosition::GetLifetimeReplicatedProps(TArray< FLifetimeProperty > & OutLifetimeProps) const -{ - DOREPLIFETIME(UAT_InterpolateToPosition, StartLocation); - DOREPLIFETIME(UAT_InterpolateToPosition, StartRotation); - DOREPLIFETIME(UAT_InterpolateToPosition, TargetLocation); - DOREPLIFETIME(UAT_InterpolateToPosition, StartRotation); - DOREPLIFETIME(UAT_InterpolateToPosition, DurationOfMovement); - DOREPLIFETIME(UAT_InterpolateToPosition, LerpCurve); - DOREPLIFETIME(UAT_InterpolateToPosition, LerpCurveVector); -} - -void UAT_InterpolateToPosition::OnDestroy(bool bInOwnerFinished) -{ - AActor* MyActor = ActorToInterpolate; - if (MyActor) - { - ACharacter* MyCharacter = Cast(MyActor); - if (MyCharacter) - { - UCharacterMovementComponent* CharMoveComp = Cast(MyCharacter->GetMovementComponent()); - if (CharMoveComp && CharMoveComp->MovementMode == MOVE_Custom) - { - CharMoveComp->SetMovementMode(MOVE_Walking); - } - } - } - - Super::OnDestroy(bInOwnerFinished); -} - -bool UAT_InterpolateToPosition::CheckHit( - const UWorld* World, - const FVector& Start, - const FVector& End, - const TArray& ActorsToIgnore, - FHitResult& OutHit -) -{ - return UKismetSystemLibrary::LineTraceSingle( - World, - Start, - End, - ETraceTypeQuery::TraceTypeQuery1, - false, - ActorsToIgnore, - EDrawDebugTrace::None, - OutHit, - true - ); -} - -bool UAT_InterpolateToPosition::CheckCapsuleHit( - const UWorld* World, - const FVector& Start, - const FVector& End, - const float Radius, - const float HalfHeight, - const TArray& ActorsToIgnore, - FHitResult& OutHit -) -{ - return UKismetSystemLibrary::CapsuleTraceSingle( - World, - Start, - End, - Radius, - HalfHeight, - ETraceTypeQuery::TraceTypeQuery1, - false, - ActorsToIgnore, - EDrawDebugTrace::None, - OutHit, - true - ); -} - -FVector UAT_InterpolateToPosition::GetCurrentEndLocation( - const FVector& Start, - const FVector& End, - const float DistanceOffset -) -{ - FVector Result {}; - const FVector Direction = End - Start; - float Distance = FVector::Dist(Start, End); - - Distance = FMath::Max(Distance + DistanceOffset, 0.f); - Result = Start + Direction.GetSafeNormal() * Distance; - - return Result; -} - -float UAT_InterpolateToPosition::GetCurrentDuration(const float Duration, const FVector& Start, const FVector& End, const FVector& CurrentEnd) -{ - float Result = Duration; - const float OriginalDistance = (End - Start).Size(); - const float NewDistance = (CurrentEnd - Start).Size(); - Result = Duration * (NewDistance / OriginalDistance); - - return Result; -} diff --git a/Source/UHLGAS/Private/UHLAbilitySet.cpp b/Source/UHLGAS/Private/UHLAbilitySet.cpp deleted file mode 100644 index cd201fb5..00000000 --- a/Source/UHLGAS/Private/UHLAbilitySet.cpp +++ /dev/null @@ -1,181 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLAbilitySet.h" - -#include "AbilitySystemComponent.h" -#include "GameplayAbilitySpec.h" -#include "UHLGAS.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLAbilitySet) - -void FUHLAbilitySet_GrantedHandles::SetAbilitySetTags(const FGameplayTagContainer& AbilitySetTagContainer) { AbilitySetTags = AbilitySetTagContainer; } - -void FUHLAbilitySet_GrantedHandles::AddAbilitySpecHandle(const FGameplayAbilitySpecHandle& Handle) -{ - if (Handle.IsValid()) - { - AbilitySpecHandles.Add(Handle); - } -} - -void FUHLAbilitySet_GrantedHandles::AddGameplayEffectHandle(const FActiveGameplayEffectHandle& Handle) -{ - if (Handle.IsValid()) - { - GameplayEffectHandles.Add(Handle); - } -} - -void FUHLAbilitySet_GrantedHandles::AddAttributeSet(UAttributeSet* Set) { GrantedAttributeSets.Add(Set); } - -void FUHLAbilitySet_GrantedHandles::TakeFromAbilitySystem(UAbilitySystemComponent* ASC) -{ - check(ASC); - - if (!ASC->IsOwnerActorAuthoritative()) - { - // Must be authoritative to give or take ability sets. - return; - } - - for (const FGameplayAbilitySpecHandle& Handle : AbilitySpecHandles) - { - if (Handle.IsValid()) - { - ASC->ClearAbility(Handle); - } - } - - for (const FActiveGameplayEffectHandle& Handle : GameplayEffectHandles) - { - if (Handle.IsValid()) - { - ASC->RemoveActiveGameplayEffect(Handle); - } - } - - for (UAttributeSet* Set : GrantedAttributeSets) - { - ASC->RemoveSpawnedAttribute(Set); - } - - AbilitySetTags.Reset(); - AbilitySpecHandles.Reset(); - GameplayEffectHandles.Reset(); - GrantedAttributeSets.Reset(); -} - -UUHLAbilitySet::UUHLAbilitySet(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) {} - -void UUHLAbilitySet::GiveToAbilitySystem(UAbilitySystemComponent* ASC, FUHLAbilitySet_GrantedHandles* OutGrantedHandles, UObject* SourceObject) const -{ - check(ASC); - - if (!ASC->IsOwnerActorAuthoritative()) - { - // Must be authoritative to give or take ability sets. - return; - } - - // Save AbilitySetTags to handles - OutGrantedHandles->SetAbilitySetTags(AbilitySetTags); - - // Grant the simple gameplay abilities. - for (int32 AbilityIndex = 0; AbilityIndex < GrantedSimpleGameplayAbilities.Num(); ++AbilityIndex) - { - TSubclassOf AbilityToGrant = GrantedSimpleGameplayAbilities[AbilityIndex]; - - if (!IsValid(AbilityToGrant)) - { - UE_LOG(LogUHLAbilitySystem, Error, TEXT("GrantedSimpleGameplayAbilities[%d] on ability set [%s] is not valid."), AbilityIndex, *GetNameSafe(this)); - continue; - } - - UGameplayAbility* AbilityCDO = AbilityToGrant->GetDefaultObject(); - - FGameplayAbilitySpec AbilitySpec(AbilityCDO, 1); - AbilitySpec.SourceObject = SourceObject; - - const FGameplayAbilitySpecHandle AbilitySpecHandle = ASC->GiveAbility(AbilitySpec); - - if (OutGrantedHandles) - { - OutGrantedHandles->AddAbilitySpecHandle(AbilitySpecHandle); - } - } - - // Grant the gameplay abilities. - for (int32 AbilityIndex = 0; AbilityIndex < GrantedGameplayAbilities.Num(); ++AbilityIndex) - { - const FUHLAbilitySet_GameplayAbility& AbilityToGrant = GrantedGameplayAbilities[AbilityIndex]; - - if (!IsValid(AbilityToGrant.Ability)) - { - UE_LOG(LogUHLAbilitySystem, Error, TEXT("GrantedGameplayAbilities[%d] on ability set [%s] is not valid."), AbilityIndex, *GetNameSafe(this)); - continue; - } - - UGameplayAbility* AbilityCDO = AbilityToGrant.Ability->GetDefaultObject(); - - FGameplayAbilitySpec AbilitySpec(AbilityCDO, AbilityToGrant.AbilityLevel); - AbilitySpec.SourceObject = SourceObject; - AbilitySpec.GetDynamicSpecSourceTags().AddTag(AbilityToGrant.InputTag); - - const FGameplayAbilitySpecHandle AbilitySpecHandle = ASC->GiveAbility(AbilitySpec); - - if (OutGrantedHandles) - { - OutGrantedHandles->AddAbilitySpecHandle(AbilitySpecHandle); - } - } - - // Grant the gameplay effects. - for (int32 EffectIndex = 0; EffectIndex < GrantedGameplayEffects.Num(); ++EffectIndex) - { - const FUHLAbilitySet_GameplayEffect& EffectToGrant = GrantedGameplayEffects[EffectIndex]; - - if (!IsValid(EffectToGrant.GameplayEffect)) - { - UE_LOG(LogUHLAbilitySystem, Error, TEXT("GrantedGameplayEffects[%d] on ability set [%s] is not valid"), EffectIndex, *GetNameSafe(this)); - continue; - } - - const UGameplayEffect* GameplayEffect = EffectToGrant.GameplayEffect->GetDefaultObject(); - const FActiveGameplayEffectHandle GameplayEffectHandle = ASC->ApplyGameplayEffectToSelf(GameplayEffect, EffectToGrant.EffectLevel, ASC->MakeEffectContext()); - - if (OutGrantedHandles) - { - OutGrantedHandles->AddGameplayEffectHandle(GameplayEffectHandle); - } - } - - // Grant the attribute sets. - for (int32 SetIndex = 0; SetIndex < GrantedAttributes.Num(); ++SetIndex) - { - const FUHLAbilitySet_AttributeSet& SetToGrant = GrantedAttributes[SetIndex]; - - if (!IsValid(SetToGrant.AttributeSet)) - { - UE_LOG(LogUHLAbilitySystem, Error, TEXT("GrantedAttributes[%d] on ability set [%s] is not valid"), SetIndex, *GetNameSafe(this)); - continue; - } - - UAttributeSet* NewSet = NewObject(ASC->GetOwner(), SetToGrant.AttributeSet); - ASC->AddAttributeSetSubobject(NewSet); - - if (OutGrantedHandles) - { - OutGrantedHandles->AddAttributeSet(NewSet); - } - } -} - -TArray> UUHLAbilitySet::GetAllAbilitiesList() const -{ - TArray> Result = GrantedSimpleGameplayAbilities; - for (const FUHLAbilitySet_GameplayAbility& GrantedGameplayAbility : GrantedGameplayAbilities) - { - Result.Add(GrantedGameplayAbility.Ability); - } - return Result; -} diff --git a/Source/UHLGAS/Private/UHLAbilitySystemComponent.cpp b/Source/UHLGAS/Private/UHLAbilitySystemComponent.cpp deleted file mode 100644 index 4f931d4a..00000000 --- a/Source/UHLGAS/Private/UHLAbilitySystemComponent.cpp +++ /dev/null @@ -1,527 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UHLAbilitySystemComponent.h" - -#include "UHLAbilitySet.h" -#include "UHLGASBlueprintLibrary.h" -#include "Abilities/UHLGameplayAbility.h" -#include "Core/UHLGameplayTags.h" -#include "Development/UHLGASSettings.h" -#include "Utils/UnrealHelperLibraryBPL.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLAbilitySystemComponent) - -void UUHLAbilitySystemComponent::BeginPlay() -{ - Super::BeginPlay(); - - AbilityInputCache = NewObject(this); - AbilityInputCache->SetUp(this); - - InputPressedSpecHandles.Reset(); - InputReleasedSpecHandles.Reset(); - InputHeldSpecHandles.Reset(); - - AbilitySetGrantedHandles.Reset(); - - // AbilityActivatedCallbacks.AddUObject(this, ) -} - -UUHLAbilitySystemComponent::UUHLAbilitySystemComponent() -{ - const UUHLGASSettings* UHLSettings = GetDefault(); - if (UHLSettings->bUseAbilitySystemConfigDefaultsInASC) - { - FillSettingsFromConfig(UHLSettings->AbilitySystemConfigDefaults); - } -} - -void UUHLAbilitySystemComponent::InitAbilitySystem(AActor* NewOwner, AActor* InAvatarActor, bool bActivateInitialAbilities) -{ - if (bUseAbilitySystemConfig && AbilitySystemConfig) - { - FillSettingsFromConfig(AbilitySystemConfig->Settings); - } - - InitAbilityActorInfo(NewOwner, InAvatarActor); - - if (bGiveAttributesSetsOnStart) - { - for (TSubclassOf AttributeSet : AttributeSets) - { - UAttributeSet* NewSet = NewObject(GetOwner(), AttributeSet); - AddAttributeSetSubobject(NewSet); - } - } - - InitAttributes(); - GiveInitialTags(); - - if (bGiveAbilitiesOnStart) - { - for (auto& Ability : Abilities) - { - GiveAbility(FGameplayAbilitySpec(Ability)); - } - } - - // TODO: - // What if I want to give AbilitySet that initialized with my attributes? - // Move attributes initialize to AbilitySet? Already can be done through GameplayEffect? - // Try to initialize only attributes from AttributeSet? and after abilities/gameplayeffects? - if (bGiveAbilitySetsOnStart) - { - for (const TObjectPtr& AbilitySet : AbilitySets) - { - GiveAbilitySet(AbilitySet); - } - } - - if (bActivateInitialAbilities) - { - ActivateInitialAbilities(); - } -} - -void UUHLAbilitySystemComponent::InitAttributes_Implementation() -{ - if (bInitializeGameplayAttributes) - { - SetAttributes(InitialAttributes); - } -} - -void UUHLAbilitySystemComponent::GiveInitialTags() -{ - if (bGiveInitialGameplayTags) - { - AddLooseGameplayTags(InitialGameplayTags, 1); - } -} - -void UUHLAbilitySystemComponent::SetAttributes(TMap Attributes_In) -{ - for (TTuple InitialAttributePair : Attributes_In) - { - if (!HasAttributeSetForAttribute(InitialAttributePair.Key)) continue; - - SetNumericAttributeBase(InitialAttributePair.Key, InitialAttributePair.Value); - } -} - -void UUHLAbilitySystemComponent::ActivateInitialAbilities() -{ - if (bActivateAbilitiesOnStart) - { - for (const auto AbilityTags : ActiveAbilitiesOnStart) - { - TryActivateAbilityWithTag(AbilityTags.First()); - } - } -} - -void UUHLAbilitySystemComponent::GiveAbilitySet(const UUHLAbilitySet* AbilitySet) -{ - FUHLAbilitySet_GrantedHandles OutGrantedHandles; - AbilitySet->GiveToAbilitySystem(this, &OutGrantedHandles, this); - AbilitySetGrantedHandles.Add(OutGrantedHandles); -} - -void UUHLAbilitySystemComponent::RemoveAbilitySetByTag(const FGameplayTag& GameplayTag) -{ - for (int32 i = 0; i < AbilitySetGrantedHandles.Num(); i++) - { - FUHLAbilitySet_GrantedHandles& AbilitySetGrantedHandle = AbilitySetGrantedHandles[i]; - if (AbilitySetGrantedHandle.GetAbilitySetTags().HasAny(FGameplayTagContainer(GameplayTag))) - { - AbilitySetGrantedHandle.TakeFromAbilitySystem(this); - AbilitySetGrantedHandles.RemoveAt(i, 1); - } - } -} - -void UUHLAbilitySystemComponent::OnUnregister() -{ - FGameplayTagContainer AllTags; - GetOwnedGameplayTags(AllTags); - RemoveLooseGameplayTags(AllTags); - - Super::OnUnregister(); -} - -#if WITH_EDITOR - -bool UUHLAbilitySystemComponent::CanEditChange(const FProperty* InProperty) const -{ - const bool ParentVal = Super::CanEditChange(InProperty); - - if (InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bInitializeGameplayAttributes) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, InitialAttributes) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bGiveAbilitiesOnStart) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, Abilities) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bGiveAttributesSetsOnStart) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, AttributeSets) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bActivateAbilitiesOnStart) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, ActiveAbilitiesOnStart) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bGiveInitialGameplayTags) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, InitialGameplayTags) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bGiveAbilitySetsOnStart) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, AbilitySets) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bPreviewAllAbilities) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, DebugPreviewAbilitiesFromAbilitySets) - - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bUseInputConfig) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, InputConfig) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bUseAbilityInputCache) - || InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, bUseInputCacheWindows) - ) - { - return !bUseAbilitySystemConfig; - } - - return ParentVal; -} - -void UUHLAbilitySystemComponent::PostInitProperties() -{ - Super::PostInitProperties(); - - UpdatePreviewAbilitiesMap(); -} - -void UUHLAbilitySystemComponent::PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.GetPropertyName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, AbilitySets) - || PropertyChangedEvent.GetPropertyName() == GET_MEMBER_NAME_CHECKED(UUHLAbilitySystemComponent, DebugPreviewAbilitiesFromAbilitySets)) - { - UpdatePreviewAbilitiesMap(); - } -} - -void UUHLAbilitySystemComponent::UpdatePreviewAbilitiesMap() -{ - DebugPreviewAbilitiesFromAbilitySets.Reset(); - - if (!bPreviewAllAbilities) - { - return; - } - - for (const UUHLAbilitySet* AbilitySet : AbilitySets) - { - if (!AbilitySet) continue; - - TTuple TuplePreview; - TuplePreview.Key = AbilitySet->GetName(); - - for (const TSubclassOf& AbilityRef : AbilitySet->GetAllAbilitiesList()) - { - if (!AbilityRef.Get()) continue; - TuplePreview.Value += AbilityRef->GetName().Replace(TEXT("_C"), TEXT("")) + "\n"; - } - DebugPreviewAbilitiesFromAbilitySets.Add(TuplePreview); - } -} -#endif - -void UUHLAbilitySystemComponent::FillSettingsFromConfig(const FUHLAbilitySystemSettings& AbilitySystemConfig_In) -{ - bInitializeGameplayAttributes = AbilitySystemConfig_In.bInitializeGameplayAttributes; - InitialAttributes = AbilitySystemConfig_In.InitialAttributes; - - bGiveAbilitiesOnStart = AbilitySystemConfig_In.bGiveAbilitiesOnStart; - Abilities = AbilitySystemConfig_In.Abilities; - - bGiveAttributesSetsOnStart = AbilitySystemConfig_In.bGiveAttributesSetsOnStart; - AttributeSets = AbilitySystemConfig_In.AttributeSets; - - bActivateAbilitiesOnStart = AbilitySystemConfig_In.bActivateAbilitiesOnStart; - ActiveAbilitiesOnStart = AbilitySystemConfig_In.ActiveAbilitiesOnStart; - - bGiveInitialGameplayTags = AbilitySystemConfig_In.bGiveInitialGameplayTags; - InitialGameplayTags = AbilitySystemConfig_In.InitialGameplayTags; - - bGiveAbilitySetsOnStart = AbilitySystemConfig_In.bGiveAbilitySetsOnStart; - AbilitySets = AbilitySystemConfig_In.AbilitySets; - - // bPreviewAllAbilities = AbilitySystemConfig_In.bPreviewAllAbilities; - // DebugPreviewAbilitiesFromAbilitySets = AbilitySystemConfig_In.DebugPreviewAbilitiesFromAbilitySets; - - bUseInputConfig = AbilitySystemConfig_In.bUseInputConfig; - InputConfig = AbilitySystemConfig_In.InputConfig; - bUseAbilityInputCache = AbilitySystemConfig_In.bUseAbilityInputCache; - bUseInputCacheWindows = AbilitySystemConfig_In.bUseInputCacheWindows; -} - -bool UUHLAbilitySystemComponent::TryActivateAbilityWithTag(FGameplayTag GameplayTag, bool bAllowRemoteActivation) -{ - return UUHLGASBlueprintLibrary::TryActivateAbilityWithTag(this, GameplayTag, bAllowRemoteActivation); -} - -bool UUHLAbilitySystemComponent::TryCancelAbilityWithTag(FGameplayTag GameplayTag) -{ - return UUHLGASBlueprintLibrary::TryCancelAbilityWithTag(this, GameplayTag); -} - -TArray UUHLAbilitySystemComponent::TryCancelAbilitiesWithTags(TArray GameplayTags) -{ - return UUHLGASBlueprintLibrary::TryCancelAbilitiesWithTags(this, GameplayTags); -} - -int32 UUHLAbilitySystemComponent::FireGameplayEvent(FGameplayTag EventTag, const FGameplayEventData& Payload) -{ - return HandleGameplayEvent(EventTag, &Payload); -} - -bool UUHLAbilitySystemComponent::CanAddAbilityToCache(UUHLGameplayAbility* GameplayAbility_In) const -{ - bool bHasRequiredTags = HasAllMatchingGameplayTags(GameplayAbility_In->AddToCacheRequiredTags); - bool bDontHaveBlockedTags = !HasAnyMatchingGameplayTags(GameplayAbility_In->AddToCacheBlockedTags); - - return bHasRequiredTags && bDontHaveBlockedTags; -} - -bool UUHLAbilitySystemComponent::IsAbilityActive(FGameplayTag GameplayTag) const -{ - return UUHLGASBlueprintLibrary::IsAbilityActiveByTag(this, GameplayTag); -} - -void UUHLAbilitySystemComponent::RemoveLooseGameplayTagCompletly(const FGameplayTag& GameplayTag) -{ - RemoveLooseGameplayTag(GameplayTag, 999999); -} - -void UUHLAbilitySystemComponent::AbilitySpecInputPressed(FGameplayAbilitySpec& Spec) -{ - Super::AbilitySpecInputPressed(Spec); - - // We don't support UGameplayAbility::bReplicateInputDirectly. - // Use replicated events instead so that the WaitInputPress ability task works. - if (Spec.IsActive()) - { -PRAGMA_DISABLE_DEPRECATION_WARNINGS - const UGameplayAbility* Instance = Spec.GetPrimaryInstance(); - FPredictionKey OriginalPredictionKey = Instance ? Instance->GetCurrentActivationInfo().GetActivationPredictionKey() : Spec.ActivationInfo.GetActivationPredictionKey(); -PRAGMA_ENABLE_DEPRECATION_WARNINGS - - // Invoke the InputPressed event. This is not replicated here. If someone is listening, they may replicate the InputPressed event to the server. - InvokeReplicatedEvent(EAbilityGenericReplicatedEvent::InputPressed, Spec.Handle, OriginalPredictionKey); - } -} - -void UUHLAbilitySystemComponent::AbilitySpecInputReleased(FGameplayAbilitySpec& Spec) -{ - Super::AbilitySpecInputReleased(Spec); - - // We don't support UGameplayAbility::bReplicateInputDirectly. - // Use replicated events instead so that the WaitInputRelease ability task works. - if (Spec.IsActive()) - { -PRAGMA_DISABLE_DEPRECATION_WARNINGS - const UGameplayAbility* Instance = Spec.GetPrimaryInstance(); - FPredictionKey OriginalPredictionKey = Instance ? Instance->GetCurrentActivationInfo().GetActivationPredictionKey() : Spec.ActivationInfo.GetActivationPredictionKey(); -PRAGMA_ENABLE_DEPRECATION_WARNINGS - - // Invoke the InputReleased event. This is not replicated here. If someone is listening, they may replicate the InputReleased event to the server. - InvokeReplicatedEvent(EAbilityGenericReplicatedEvent::InputReleased, Spec.Handle, OriginalPredictionKey); - } -} - -void UUHLAbilitySystemComponent::AbilityInputTagPressed(const FGameplayTag InputTag) -{ - if (InputTag.IsValid()) - { - for (const FGameplayAbilitySpec& AbilitySpec : ActivatableAbilities.Items) - { - // Replaced AbilitySpec.DynamicAbilityTags on AbilitySpec.Ability->GetAssetTags() - if (AbilitySpec.Ability && (AbilitySpec.Ability->GetAssetTags().HasTagExact(InputTag))) - { - InputPressedSpecHandles.AddUnique(AbilitySpec.Handle); - InputHeldSpecHandles.AddUnique(AbilitySpec.Handle); - } - } - } -} - -void UUHLAbilitySystemComponent::AbilityInputTagReleased(const FGameplayTag InputTag) -{ - if (InputTag.IsValid()) - { - for (const FGameplayAbilitySpec& AbilitySpec : ActivatableAbilities.Items) - { - // Replaced AbilitySpec.DynamicAbilityTags on AbilitySpec.Ability->AbilityTags - if (AbilitySpec.Ability && (AbilitySpec.Ability->GetAssetTags().HasTagExact(InputTag))) - { - InputReleasedSpecHandles.AddUnique(AbilitySpec.Handle); - InputHeldSpecHandles.Remove(AbilitySpec.Handle); - } - } - } -} - -// copy paste from LyraAbilitySystemComponent -void UUHLAbilitySystemComponent::ProcessAbilityInput(float DeltaTime, bool bGamePaused) -{ - if (!bUseInputConfig) return; - - if (HasMatchingGameplayTag(UHLGameplayTags::TAG_Gameplay_AbilityInputBlocked)) - { - ClearAbilityInput(); - return; - } - - static TArray AbilitiesToActivate; - AbilitiesToActivate.Reset(); - - //@TODO: See if we can use FScopedServerAbilityRPCBatcher ScopedRPCBatcher in some of these loops - - // - // Process all abilities that activate when the input is held. - // - for (const FGameplayAbilitySpecHandle& SpecHandle : InputHeldSpecHandles) - { - if (const FGameplayAbilitySpec* AbilitySpec = FindAbilitySpecFromHandle(SpecHandle)) - { - if (AbilitySpec->Ability && !AbilitySpec->IsActive()) - { - const UUHLGameplayAbility* AbilityCDO = Cast(AbilitySpec->Ability); - if (AbilityCDO->GetActivationPolicy() == EUHLAbilityActivationPolicy::WhileInputActive) - { - AbilitiesToActivate.AddUnique(AbilitySpec->Handle); - } - } - } - } - - // - // Process all abilities that had their input pressed this frame. - // - for (const FGameplayAbilitySpecHandle& SpecHandle : InputPressedSpecHandles) - { - if (FGameplayAbilitySpec* AbilitySpec = FindAbilitySpecFromHandle(SpecHandle)) - { - if (AbilitySpec->Ability) - { - AbilitySpec->InputPressed = true; - - const UUHLGameplayAbility* AbilityCDO = Cast(AbilitySpec->Ability); - if (AbilitySpec->IsActive() - // TODO move this logic to "OnInputTriggeredForceReactivate" ?? - // If ability active, we should try to activate it again, instead of sending data - // so that's why if "OnInputTriggered" choosed - skip - && AbilityCDO - && AbilityCDO->GetActivationPolicy() != EUHLAbilityActivationPolicy::OnInputTriggered) - { - // Ability is active so pass along the input event. - AbilitySpecInputPressed(*AbilitySpec); - } - else - { - // const UUHLGameplayAbility* AbilityCDO = Cast(AbilitySpec->Ability); - if (AbilityCDO && AbilityCDO->GetActivationPolicy() == EUHLAbilityActivationPolicy::OnInputTriggered) - { - AbilitiesToActivate.AddUnique(AbilitySpec->Handle); - } - } - } - } - } - - // - // Try to activate all the abilities that are from presses and holds. - // We do it all at once so that held inputs don't activate the ability - // and then also send a input event to the ability because of the press. - // - // TODO AbiilityInputCache field of improvement - check not "bAtLeastOneCachedAbilityActivated" - // but how much abilities was activated from "FUHLInputActionAbilities" - // if at least one from "FUHLInputActionAbilities" activated skip adding others to cache - bool bAtLeastOneCachedAbilityActivated = false; - TArray AbilityTagsRequiredToBeCached = {}; - for (const FGameplayAbilitySpecHandle& AbilitySpecHandle : AbilitiesToActivate) - { - if (!AbilitySpecHandle.IsValid()) continue; - - bool bActivated = TryActivateAbility(AbilitySpecHandle); - - // check AbilityCache - if (bUseAbilityInputCache && AbilitySpecHandle.IsValid()) - { - // works if not using cache windows or use them and now in "CatchTo AbilityInputCache" window - if (!bUseInputCacheWindows || (bUseInputCacheWindows && HasMatchingGameplayTag(UHLGameplayTags::TAG_UHL_AbilityInputCache_Catching))) - { - FGameplayAbilitySpec* AbilitySpec = FindAbilitySpecFromHandle(AbilitySpecHandle); - if (AbilitySpec->Ability) - { - UUHLGameplayAbility* GameplayAbility = StaticCast(AbilitySpec->Ability.Get()); - if (GameplayAbility->bCacheInput && (!bActivated || GameplayAbility->bIgnoreActivatedState)) - { - if (CanAddAbilityToCache(GameplayAbility)) - { - AbilityTagsRequiredToBeCached.Add(GameplayAbility->GetAssetTags().First()); - } - } - - if (GameplayAbility->bCacheInput && bActivated) - { - bAtLeastOneCachedAbilityActivated = true; - UUnrealHelperLibraryBPL::DebugPrintStrings(FString::Printf(TEXT("At least one activated %s"), *GameplayAbility->GetAssetTags().First().ToString())); - } - } - } - } - } - - if (!bAtLeastOneCachedAbilityActivated) - { - AbilityInputCache->AddTagsToCache(AbilityTagsRequiredToBeCached); - } - - // - // Process all abilities that had their input released this frame. - // - for (const FGameplayAbilitySpecHandle& SpecHandle : InputReleasedSpecHandles) - { - if (FGameplayAbilitySpec* AbilitySpec = FindAbilitySpecFromHandle(SpecHandle)) - { - if (AbilitySpec->Ability) - { - AbilitySpec->InputPressed = false; - - if (AbilitySpec->IsActive()) - { - // Ability is active so pass along the input event. - AbilitySpecInputReleased(*AbilitySpec); - - // if "WhileInputActive" EndAbility automatically - // const UUHLGameplayAbility* AbilityCDO = Cast(AbilitySpec->Ability); - // if (AbilityCDO && AbilityCDO->GetActivationPolicy() == EUHLAbilityActivationPolicy::WhileInputActive) - // { - // const FUHLWhileInputActiveSettings& WhileInputActiveSettings = AbilityCDO->GetWhileInputActiveSettings(); - // if (WhileInputActiveSettings.bCancelAbilityAutomatically) - // { - // // "EndAbility" not accessible, so try to cancel if "bCancelAbilityAutomatically" - // AbilitySpec->Ability->CancelAbility(AbilitySpec->Handle, AbilityActorInfo.Get(), AbilitySpec->ActivationInfo, WhileInputActiveSettings.bReplicateEndAbility); - // // AbilitySpec->Ability->EndAbility(AbilitySpec->Handle, AbilityActorInfo.Get(), AbilitySpec->ActivationInfo, WhileInputActiveSettings.bReplicateEndAbility, WhileInputActiveSettings.bMarkAsCanceledOnEnd); - // } - // } - } - } - } - } - - // - // Clear the cached ability handles. - // - InputPressedSpecHandles.Reset(); - InputReleasedSpecHandles.Reset(); -} - -void UUHLAbilitySystemComponent::ClearAbilityInput() -{ - InputPressedSpecHandles.Reset(); - InputReleasedSpecHandles.Reset(); - InputHeldSpecHandles.Reset(); -} diff --git a/Source/UHLGAS/Private/UHLAbilitySystemConfig.cpp b/Source/UHLGAS/Private/UHLAbilitySystemConfig.cpp deleted file mode 100644 index e73e60aa..00000000 --- a/Source/UHLGAS/Private/UHLAbilitySystemConfig.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UHLAbilitySystemConfig.h" - -#include "Development/UHLGASSettings.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLAbilitySystemConfig) - -UUHLAbilitySystemConfig::UUHLAbilitySystemConfig() -{ - const UUHLGASSettings* UHLSettings = GetDefault(); - Settings = UHLSettings->AbilitySystemConfigDefaults; -} \ No newline at end of file diff --git a/Source/UHLGAS/Private/UHLGAS.cpp b/Source/UHLGAS/Private/UHLGAS.cpp deleted file mode 100644 index 3ba06aa1..00000000 --- a/Source/UHLGAS/Private/UHLGAS.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLGAS.h" - -#include "Misc/Paths.h" -#include "GameplayTagsManager.h" - -#define LOCTEXT_NAMESPACE "FUHLGASModule" - -DEFINE_LOG_CATEGORY(LogUHLAbilitySystem); - -void FUHLGASModule::StartupModule() -{ - UGameplayTagsManager& TagsManager = UGameplayTagsManager::Get(); - // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module - TagsManager.AddTagIniSearchPath(FPaths::ProjectPluginsDir() / TEXT("UnrealHelperLibrary/Config/Tags")); -} - -void FUHLGASModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUHLGASModule, UHLGAS) diff --git a/Source/UHLGAS/Private/UHLGASBlueprintLibrary.cpp b/Source/UHLGAS/Private/UHLGASBlueprintLibrary.cpp deleted file mode 100644 index 8a759ad3..00000000 --- a/Source/UHLGAS/Private/UHLGASBlueprintLibrary.cpp +++ /dev/null @@ -1,256 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UHLGASBlueprintLibrary.h" - -#include "AbilitySystemComponent.h" -#include "GameplayTagsManager.h" -#include "Misc/ConfigCacheIni.h" -#include "Animation/AnimMontage.h" -#include "DrawDebugHelpers.h" -#include "Core/UHLAbilitySystemInterface.h" -#include "Engine/World.h" -#include "Engine/GameInstance.h" -#include "UI/UHLHUD.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLGASBlueprintLibrary) - -UUHLAbilitySystemComponent* UUHLGASBlueprintLibrary::GetUHLAbilitySystemComponent(AActor* Actor) -{ - if (Actor == nullptr) - { - return nullptr; - } - - const IUHLAbilitySystemInterface* ASI = Cast(Actor); - if (ASI) - { - return IUHLAbilitySystemInterface::Execute_GetUHLAbilitySystemComponent(Actor); - } - - return Actor->FindComponentByClass(); -} - -FGameplayEffectSpec UUHLGASBlueprintLibrary::CreateGenericGASGameplayEffectSpec( - TSubclassOf GameplayEffectClass, AActor* HitInstigator, AActor* InEffectCauser, const FHitResult& HitResult, const UObject* SourceObject) -{ - const UGameplayEffect* GameplayEffect = GameplayEffectClass->GetDefaultObject(); - FGameplayEffectContext* GameplayEffectContext = new FGameplayEffectContext(HitInstigator, InEffectCauser); - FGameplayEffectContextHandle GameplayEffectContextHandle(GameplayEffectContext); - GameplayEffectContextHandle.AddHitResult(HitResult); - GameplayEffectContextHandle.AddSourceObject(SourceObject); - FGameplayEffectSpec GameplayEffectSpec(GameplayEffect, GameplayEffectContextHandle); - return GameplayEffectSpec; -} - -void UUHLGASBlueprintLibrary::UpdateStateGameplayTags(UAbilitySystemComponent* ASC, bool bCondition, FGameplayTag PositiveConditionTag, FGameplayTag NegativeConditionTag, bool bShouldReplicate) -{ - if (!ASC) - { - return; - } - - if (bCondition) - { - if (!ASC->HasMatchingGameplayTag(PositiveConditionTag)) - { - if (bShouldReplicate) - { - ASC->AddReplicatedLooseGameplayTag(PositiveConditionTag); - } - else - { - ASC->AddLooseGameplayTag(PositiveConditionTag); - } - } - if (NegativeConditionTag != FGameplayTag::EmptyTag) - { - if (bShouldReplicate) - { - ASC->RemoveReplicatedLooseGameplayTag(PositiveConditionTag); - } - else - { - ASC->RemoveLooseGameplayTag(NegativeConditionTag, 999999); - } - } - } - else - { - if (NegativeConditionTag == FGameplayTag::EmptyTag) - { - if (bShouldReplicate) - { - ASC->RemoveReplicatedLooseGameplayTag(PositiveConditionTag); - } - else - { - ASC->RemoveLooseGameplayTag(PositiveConditionTag, 999999); - } - } - else - { - if (!ASC->HasMatchingGameplayTag(NegativeConditionTag)) - { - if (bShouldReplicate) - { - ASC->AddReplicatedLooseGameplayTag(NegativeConditionTag); - } - else - { - ASC->AddLooseGameplayTag(NegativeConditionTag); - } - } - if (bShouldReplicate) - { - ASC->RemoveReplicatedLooseGameplayTag(PositiveConditionTag); - } - else - { - ASC->RemoveLooseGameplayTag(PositiveConditionTag, 999999); - } - } - } -} - -bool UUHLGASBlueprintLibrary::IsAbilityActiveByTag(const UAbilitySystemComponent* ASC, FGameplayTag GameplayTag) -{ - if (!IsValid(ASC)) return false; - - bool bResult = false; - TArray AbilitiesToActivate; - ASC->GetActivatableGameplayAbilitySpecsByAllMatchingTags(FGameplayTagContainer(GameplayTag), AbilitiesToActivate, false); - - for (FGameplayAbilitySpec* AbilitySpec : AbilitiesToActivate) - { - TArray AbilityInstances = AbilitySpec->GetAbilityInstances(); - for (UGameplayAbility* Ability : AbilityInstances) - { - bResult |= Ability->IsActive(); - } - } - return bResult; -} - -bool UUHLGASBlueprintLibrary::TryActivateAbilityWithTag(UAbilitySystemComponent* ASC, FGameplayTag GameplayTag, bool bAllowRemoteActivation) -{ - if (!IsValid(ASC)) return false; - return ASC->TryActivateAbilitiesByTag(FGameplayTagContainer(GameplayTag), bAllowRemoteActivation); -} - -bool UUHLGASBlueprintLibrary::TryCancelAbilityWithTag(UAbilitySystemComponent* ASC, FGameplayTag GameplayTag) -{ - if (!IsValid(ASC)) - return false; - - bool bResult = false; - TArray AbilitiesToCancel; - ASC->GetActivatableGameplayAbilitySpecsByAllMatchingTags(FGameplayTagContainer(GameplayTag), AbilitiesToCancel, false); - - for (FGameplayAbilitySpec* AbilitySpec : AbilitiesToCancel) - { - TArray AbilityInstances = AbilitySpec->GetAbilityInstances(); - for (UGameplayAbility* Ability : AbilityInstances) - { - if (Ability->IsActive()) - { - Ability->K2_CancelAbility(); - bResult = true; - } - } - } - return bResult; -} - -bool UUHLGASBlueprintLibrary::ToggleAbilityWithTag(UAbilitySystemComponent* ASC, FGameplayTag GameplayTag, bool bAllowRemoteActivation) -{ - if (!IsValid(ASC)) return false; - - bool bResult = false; - - if (IsAbilityActiveByTag(ASC, GameplayTag)) - { - bResult = TryCancelAbilityWithTag(ASC, GameplayTag); - } - else - { - bResult = TryActivateAbilityWithTag(ASC, GameplayTag, bAllowRemoteActivation); - } - - return bResult; -} - -TArray UUHLGASBlueprintLibrary::TryCancelAbilitiesWithTags(UAbilitySystemComponent* ASC, TArray GameplayTags) -{ - if (!IsValid(ASC)) - return {}; - - TArray Result; - for (auto GameplayTag : GameplayTags) - { - Result.Add(TryCancelAbilityWithTag(ASC, GameplayTag)); - } - return Result; -} - -int32 UUHLGASBlueprintLibrary::FireGameplayEvent(UAbilitySystemComponent* ASC, FGameplayTag EventTag, const FGameplayEventData& Payload) { return ASC->HandleGameplayEvent(EventTag, &Payload); } - -FGameplayTag UUHLGASBlueprintLibrary::FindTagByString(const FString& TagString, bool bMatchPartialString) -{ - const UGameplayTagsManager& Manager = UGameplayTagsManager::Get(); - FGameplayTag Tag = Manager.RequestGameplayTag(FName(*TagString), false); - - if (!Tag.IsValid() && bMatchPartialString) - { - FGameplayTagContainer AllTags; - Manager.RequestAllGameplayTags(AllTags, true); - - for (const FGameplayTag& TestTag : AllTags) - { - if (TestTag.ToString().Contains(TagString)) - { - // UE_LOG(LogUnrealHelperLibrary, Display, TEXT("Could not find exact match for tag [%s] but found partial match on tag [%s]."), *TagString, *TestTag.ToString()); - Tag = TestTag; - break; - } - } - } - - return Tag; -} - -void UUHLGASBlueprintLibrary::FindAbilitySpecByTag( - const TArray& AbilitiesSpecsContainer, FGameplayTag TagToFind, FGameplayAbilitySpec& AbilitySpec_Out) -{ - // Iterate all specs provided - for (const FGameplayAbilitySpec& Spec : AbilitiesSpecsContainer) - { - // Check the static tags on the ability class - const UGameplayAbility* AbilityCDO = Spec.GetPrimaryInstance() - ? Spec.GetPrimaryInstance() - : Spec.Ability.Get(); - - if (AbilityCDO) - { - // combine ability‐level and dynamic tags - const FGameplayTagContainer& StaticTags = AbilityCDO->GetAssetTags(); - const FGameplayTagContainer& DynamicTags = Spec.GetDynamicSpecSourceTags(); - - // If either has our desired tag, return this spec - if (StaticTags.HasTag(TagToFind) || DynamicTags.HasTag(TagToFind)) - { - AbilitySpec_Out = Spec; - return; - } - } - } - - // Not found - return; -} - -void UUHLGASBlueprintLibrary::FindAbilitySpecByTagUsingASC( - UAbilitySystemComponent* ASC, - FGameplayTag TagToFind, FGameplayAbilitySpec& AbilitySpec_Out) -{ - FindAbilitySpecByTag(ASC->GetActivatableAbilities(), TagToFind, AbilitySpec_Out); -} diff --git a/Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h b/Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h deleted file mode 100644 index 9ba91806..00000000 --- a/Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h +++ /dev/null @@ -1,197 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Abilities/GameplayAbility.h" -#include "UHLGameplayAbility.generated.h" - -class UUHLAbilitySystemComponent; - -/** - * EUHLAbilityActivationPolicy - * - * Defines how an ability is meant to activate. - */ -UENUM(BlueprintType) -enum class EUHLAbilityActivationPolicy : uint8 -{ - // Try to activate the ability when the input is triggered. - OnInputTriggered, - - // Continually try to activate the ability while the input is active. - // Subscribe on "WaitInputRelease" and "EndAbility" in blueprint, - // it's not possible to EndAbility from C++ - WhileInputActive, - - // Try to activate the ability when an avatar is assigned. - OnSpawn -}; - -// USTRUCT(BlueprintType) -// struct FUHLWhileInputActiveSettings -// { -// GENERATED_BODY() -// -// UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) -// bool bCancelAbilityAutomatically = true; -// UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) -// bool bReplicateEndAbility = true; -// // UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) -// // bool bMarkAsCanceledOnEnd = false; -// }; - -/** - * - */ -UCLASS(Abstract, Category="UnrealHelperLibrary", Blueprintable, BlueprintType) -class UHLGAS_API UUHLGameplayAbility : public UGameplayAbility -{ - GENERATED_BODY() - -public: - UUHLGameplayAbility(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); - - UFUNCTION(BlueprintCallable, Category = "UHL GameplayAbility") - EUHLAbilityActivationPolicy GetActivationPolicy() const { return ActivationPolicy; } - - // UFUNCTION(BlueprintCallable) - // FUHLWhileInputActiveSettings GetWhileInputActiveSettings() const { return WhileInputActiveSettings; } - - // should cache input if ability can't be activated for now - // Requirements: - // - ASC should enable "bUseAbilityInputCache" - // - Ability should have at least one AbilityTag - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AbilityInputCache") - bool bCacheInput = false; - - // ignore fact that ability already activated while checking cache - // it means - // - ability should be added to InputCache even if its already activated - // - "bRetriggerInstancedAbility" setting should be disabled to work because during - // AbilityInputCache->CheckCache() we cancel previous ability and start it again - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AbilityInputCache") - bool bIgnoreActivatedState = false; - - // tags required on owner ASC to be cache ability - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AbilityInputCache", DisplayName="[Add to Cache] RequiredTags") - FGameplayTagContainer AddToCacheRequiredTags; - // tags blocked on owner ASC - if present ability won't be cached - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AbilityInputCache", DisplayName="[Add to Cache] BlockedTags") - FGameplayTagContainer AddToCacheBlockedTags; - - /** - * When true, external CancelAbility calls are intercepted and must be completed manually via ReleaseCancellation(). - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UHL GameplayAbility") - bool bCancelManually = false; - - UFUNCTION(BlueprintCallable, Category="UHL GameplayAbility") - bool GetIsCancelRequested() const { return bCancelRequested; }; - - UFUNCTION(BlueprintCallable, Category="UHL GameplayAbility") - UUHLAbilitySystemComponent* GetUHLAbilitySystemComponentFromActorInfo() const; - - UFUNCTION(BlueprintCallable, Category="Ability", DisplayName = "CommitAbilityDuration") - bool K2_CommitAbilityDuration(bool BroadcastCommitEvent); - - void TryActivateAbilityOnSpawn(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) const; - - // Commit Ability - virtual void CommitExecute( - const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo) override; - virtual bool CommitAbilityDuration( - const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo, - FGameplayTagContainer* OptionalRelevantTags = nullptr); - - void ApplyDuration( - const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo); - bool CheckAbilityDuration( - FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, - FGameplayTagContainer* OptionalRelevantTags) const; - - UFUNCTION(BlueprintNativeEvent, Category = "UHL GameplayAbility") - void OnDurationEnd(const FGameplayEffectRemovalInfo& GameplayEffectRemovalInfo); - - const FGameplayTagContainer* GetAbilityDurationTags() const; - virtual UGameplayEffect* GetAbilityDurationGameplayEffect() const; - - virtual bool CommitCheck(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, FGameplayTagContainer* OptionalRelevantTags = nullptr) override; - // ~Commit Ability - - /** - * Completes a pending cancel request immediately. Call this to actually end the ability when bCancelManually is true. - */ - UFUNCTION(BlueprintCallable, Category = "UHL GameplayAbility") - void ReleaseCancellation(); - -protected: - // Defines how this ability is meant to activate. - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="UHL GameplayAbility") - EUHLAbilityActivationPolicy ActivationPolicy = EUHLAbilityActivationPolicy::OnInputTriggered; - - // UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta=(EditCondition="ActivationPolicy == EUHLAbilityActivationPolicy::WhileInputActive", EditConditionHides)) - // FUHLWhileInputActiveSettings WhileInputActiveSettings; - - - /** Tracks whether a cancel request has been received */ - bool bCancelRequested = false; - -#if WITH_EDITORONLY_DATA - /** Timer handle for editor warning if ReleaseCancellation isn't called in time */ - FTimerHandle EditorWarningHandle; -#endif - - /** - * Override external cancel: either intercept or pass through. - */ - virtual void CancelAbility( - const FGameplayAbilitySpecHandle Handle, - const FGameplayAbilityActorInfo* ActorInfo, - const FGameplayAbilityActivationInfo ActivationInfo, - bool bReplicateCancelAbility = true) override; - - /** - * Called when a manual cancel request is intercepted. - */ - UFUNCTION(BlueprintImplementableEvent, Category = "Cancellation", meta = (DisplayName = "OnCancelRequested")) - void ReceiveCancelRequested(); - - /** - * Called when cancellation is completed (after manual release). - */ - UFUNCTION(BlueprintImplementableEvent, Category = "Cancellation", meta = (DisplayName = "OnCancelCompleted")) - void ReceiveCancelCompleted(); - -#if WITH_EDITORONLY_DATA - /** - * Editor-only: checks if cancellation was never released and draws a warning. - */ - void CheckCancelReminder(); -#endif - - - virtual void OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) override; - virtual void OnRemoveAbility(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) override; - virtual void OnPawnAvatarSet(); - - /** Called when this ability is granted to the ability system component. */ - UFUNCTION(BlueprintImplementableEvent, Category="UHL GameplayAbility", DisplayName = "OnAbilityAdded") - void K2_OnAbilityAdded(); - /** Called when this ability is removed from the ability system component. */ - UFUNCTION(BlueprintImplementableEvent, Category="UHL GameplayAbility", DisplayName = "OnAbilityRemoved") - void K2_OnAbilityRemoved(); - /** Called when the ability system is initialized with a pawn avatar. */ - UFUNCTION(BlueprintImplementableEvent, Category="UHL GameplayAbility", DisplayName = "OnPawnAvatarSet") - void K2_OnPawnAvatarSet(); - -private: - UPROPERTY(EditDefaultsOnly, Category="Ability Duration") - TSubclassOf AbilityDurationGameplayEffectClass = nullptr; - - UPROPERTY(EditDefaultsOnly, Category="Ability Duration") - bool bEndAbilityOnDurationExpired = true; -}; diff --git a/Source/UHLGAS/Public/Animations/Notifies/ANS_ActivateAbility.h b/Source/UHLGAS/Public/Animations/Notifies/ANS_ActivateAbility.h deleted file mode 100644 index ac565b06..00000000 --- a/Source/UHLGAS/Public/Animations/Notifies/ANS_ActivateAbility.h +++ /dev/null @@ -1,50 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UObject/WeakInterfacePtr.h" -#include "GameplayTagContainer.h" -#include "AbilitySystemInterface.h" -#include "Animation/Notifies/ANS_UHL_Base.h" -#include "ANS_ActivateAbility.generated.h" - -/** - * - */ -UCLASS(Blueprintable, Category="UnrealHelperLibrary") -class UHLGAS_API UANS_ActivateAbility : public UANS_UHL_Base -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="ActivateAbility") - FGameplayTag GameplayAbilityTag = FGameplayTag::EmptyTag; - // TODO check should work only if montage exists - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="ActivateAbility") - bool bDeactivateOnMontageBlendingOut = true; - // by default don't allow remote execution, cause its requires time - // abilities in ANS's mostly don't have that time - // and not impacts gameplay, only enhances input and game feel - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="ActivateAbility") - bool bAllowRemoteActivation = false; - -protected: -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } -#endif - virtual FString GetNotifyName_Implementation() const override; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - - virtual void OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) override; - -private: - // TODO check ANS's should be stateless!? - TWeakInterfacePtr ActorWithASC; - - UFUNCTION() - void CancelAbility(); -}; diff --git a/Source/UHLGAS/Public/Animations/Notifies/ANS_CatchToAbilityInputCache.h b/Source/UHLGAS/Public/Animations/Notifies/ANS_CatchToAbilityInputCache.h deleted file mode 100644 index a12cca27..00000000 --- a/Source/UHLGAS/Public/Animations/Notifies/ANS_CatchToAbilityInputCache.h +++ /dev/null @@ -1,34 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/AnimNotifies/AnimNotifyState.h" -#include "ANS_CatchToAbilityInputCache.generated.h" - -class UUHLAbilitySystemComponent; - -/** - * Should end then anything that "BlockActions" end - */ -UCLASS() -class UHLGAS_API UANS_CatchToAbilityInputCache : public UAnimNotifyState -{ - GENERATED_BODY() - -public: -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } -#endif - - virtual FLinearColor GetEditorColor() override { return FColor::FromHex("#FFB341"); }; - virtual FString GetNotifyName_Implementation() const override { return FString("[UHL] CatchTo AbilityInputCache"); }; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - -private: - UPROPERTY() - TObjectPtr ASC; -}; diff --git a/Source/UHLGAS/Public/Animations/Notifies/ANS_CheckAbilityInputCache.h b/Source/UHLGAS/Public/Animations/Notifies/ANS_CheckAbilityInputCache.h deleted file mode 100644 index 40dc6a24..00000000 --- a/Source/UHLGAS/Public/Animations/Notifies/ANS_CheckAbilityInputCache.h +++ /dev/null @@ -1,49 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLAbilitySystemComponent.h" -#include "Animation/AnimNotifies/AnimNotifyState.h" -#include "ANS_CheckAbilityInputCache.generated.h" - -/** - * Should start after anything that "BlockActions" end - * by default clears AbilityInputCache on end - */ -UCLASS(Category="UnrealHelperLibrary") -class UHLGAS_API UANS_CheckAbilityInputCache final : public UAnimNotifyState -{ - GENERATED_BODY() - - FGameplayTagContainer SavedTargetTags = {}; - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CheckAbilityInputCache") - bool bClearCacheOnEnd = true; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CheckAbilityInputCache") - bool bCacheOnce = false; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CheckAbilityInputCache") - bool bUseCheckCacheOnlyWithThisTags = false; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="CheckAbilityInputCache", meta = (EditCondition = "bUseCheckCacheOnlyWithThisTags")) - FGameplayTagContainer TargetTags = {}; - -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } -#endif - - virtual FLinearColor GetEditorColor() override { return FColor::FromHex("#FFA420"); }; - virtual FString GetNotifyName_Implementation() const override { return FString("[UHL] Check AbilityInputCache"); }; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyTick(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - -private: - UPROPERTY() - TObjectPtr ASC; -}; diff --git a/Source/UHLGAS/Public/Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.h b/Source/UHLGAS/Public/Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.h deleted file mode 100644 index 919717d8..00000000 --- a/Source/UHLGAS/Public/Animations/Notifies/ANS_UHLGAS_GlobalTimeDilation.h +++ /dev/null @@ -1,23 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animations/Notifies/ANS_ActivateAbility.h" -#include "ANS_UHLGAS_GlobalTimeDilation.generated.h" - -/** - * - */ -UCLASS(Blueprintable, meta=(ToolTip="Controls when GlobalTimeDilation can be changed by GlobalTimeDilation Curve")) -class UHLGAS_API UANS_UHLGAS_GlobalTimeDilation : public UANS_UHL_Base -{ - GENERATED_BODY() - -public: - virtual void NotifyTick(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime, const FAnimNotifyEventReference& EventReference) override; - virtual void OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) override; - - virtual FLinearColor GetEditorColor() override { return FLinearColor(232/256.0f, 229/256.0f, 139/256.0f); }; - virtual FString GetNotifyName_Implementation() const override { return FString("GlobalTimeDilation"); }; -}; diff --git a/Source/UHLGAS/Public/Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.h b/Source/UHLGAS/Public/Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.h deleted file mode 100644 index ae2012f6..00000000 --- a/Source/UHLGAS/Public/Animations/Notifies/ANS_UHLGAS_TimedNiagaraEffect.h +++ /dev/null @@ -1,34 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AnimNotifyState_TimedNiagaraEffect.h" -#include "GameplayTagContainer.h" -#include "ANS_UHLGAS_TimedNiagaraEffect.generated.h" - -/** - * Drop in replacement for "AnimNotifyState_TimedNiagaraEffect" but with GAS functions - * like checking that tags are present on Actor - */ -UCLASS() -class UHLGAS_API UANS_UHLGAS_TimedNiagaraEffect : public UAnimNotifyState_TimedNiagaraEffect -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL GAS") - FGameplayTagContainer ActivationRequiredTags = {}; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL GAS") - FGameplayTagContainer ActivationBlockedTags = {}; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL GAS") - bool bIgnoreTagRequirementsInPreview = true; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - - bool GetAbilitySystemChecksRequired() const; - - bool CanActivateNiagara(AActor* Owner) const; -}; diff --git a/Source/UHLGAS/Public/Animations/Notifies/AN_FireGameplayEvent.h b/Source/UHLGAS/Public/Animations/Notifies/AN_FireGameplayEvent.h deleted file mode 100644 index 870050a2..00000000 --- a/Source/UHLGAS/Public/Animations/Notifies/AN_FireGameplayEvent.h +++ /dev/null @@ -1,51 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameplayTagContainer.h" -#include "Animation/Notifies/AN_UHL_Base.h" -#include "AN_FireGameplayEvent.generated.h" - -/** - * - */ -UCLASS(Blueprintable, Category="UnrealHelperLibrary") -class UHLGAS_API UAN_FireGameplayEvent : public UAN_UHL_Base -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, Category="FireGameplayEvent") - FGameplayTag EventTag = FGameplayTag::EmptyTag; - - // TODO use "UPayloadWithInstancedStructs" from "UAA_TryActivateAbilityAndWait" - UPROPERTY(EditAnywhere, Category="FireGameplayEvent", Instanced) - UObject* OptionalObject = nullptr; - - UPROPERTY(EditAnywhere, Category="FireGameplayEvent", Instanced) - UObject* OptionalObject2 = nullptr; - - // tags that required on instigator to fire event ?? - UPROPERTY(EditAnywhere, Category="FireGameplayEvent") - FGameplayTagContainer InstigatorTags = {}; - - // tags that required on target to fire event ?? - UPROPERTY(EditAnywhere, Category="FireGameplayEvent") - FGameplayTagContainer TargetTags = {}; - - UPROPERTY(EditAnywhere, Category="FireGameplayEvent") - float EventMagnitude = 0.0f; - -protected: -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } - virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override; -#endif - - virtual FLinearColor GetEditorColor() override { return FColor::FromHex("#FF7DE7"); }; - virtual FString GetNotifyName_Implementation() const override; - - virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; -}; diff --git a/Source/UHLGAS/Public/AttributeSets/UHLAttributeSet.h b/Source/UHLGAS/Public/AttributeSets/UHLAttributeSet.h deleted file mode 100644 index f5e6460c..00000000 --- a/Source/UHLGAS/Public/AttributeSets/UHLAttributeSet.h +++ /dev/null @@ -1,54 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AttributeSet.h" -#include "GameplayEffect.h" -#include "UHLAttributeSet.generated.h" - -class UUHLAbilitySystemComponent; - -/** - * This macro defines a set of helper functions for accessing and initializing attributes. - * - * The following example of the macro: - * ATTRIBUTE_ACCESSORS(ULyraHealthSet, Health) - * will create the following functions: - * static FGameplayAttribute GetHealthAttribute(); - * float GetHealth() const; - * void SetHealth(float NewVal); - * void InitHealth(float NewVal); - */ -#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \ - GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \ - GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \ - GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \ - GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName) - -/** - * Delegate used to broadcast attribute events, some of these parameters may be null on clients: - * @param EffectInstigator The original instigating actor for this event - * @param EffectCauser The physical actor that caused the change - * @param EffectSpec The full effect spec for this change - * @param EffectMagnitude The raw magnitude, this is before clamping - * @param OldValue The value of the attribute before it was changed - * @param NewValue The value after it was changed -*/ -DECLARE_MULTICAST_DELEGATE_SixParams(FUHLAttributeEvent, AActor* /*EffectInstigator*/, AActor* /*EffectCauser*/, const FGameplayEffectSpec* /*EffectSpec*/, float /*EffectMagnitude*/, float /*OldValue*/, float /*NewValue*/); - -/** - * Lyra based class for sharing common attribute set functions - */ -UCLASS() -class UHLGAS_API UUHLAttributeSet : public UAttributeSet -{ - GENERATED_BODY() - -public: - UUHLAttributeSet(); - - UWorld* GetWorld() const override; - - UUHLAbilitySystemComponent* GetUHLAbilitySystemComponent() const; -}; diff --git a/Source/UHLGAS/Public/Core/UHLAbilitySystemInterface.h b/Source/UHLGAS/Public/Core/UHLAbilitySystemInterface.h deleted file mode 100644 index 5408a7ce..00000000 --- a/Source/UHLGAS/Public/Core/UHLAbilitySystemInterface.h +++ /dev/null @@ -1,28 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLAbilitySystemComponent.h" -#include "UObject/Interface.h" -#include "UHLAbilitySystemInterface.generated.h" - -// This class does not need to be modified. -UINTERFACE(Blueprintable, MinimalAPI) -class UUHLAbilitySystemInterface : public UInterface -{ - GENERATED_BODY() -}; - -/** - * - */ -class UHLGAS_API IUHLAbilitySystemInterface -{ - GENERATED_BODY() - -public: - /** Returns the ability system component to use for this actor. It may live on another actor, such as a Pawn using the PlayerState's component */ - UFUNCTION(Category="UHLAbilitySystemInterface", BlueprintNativeEvent, BlueprintCallable) - UUHLAbilitySystemComponent* GetUHLAbilitySystemComponent() const; -}; \ No newline at end of file diff --git a/Source/UHLGAS/Public/Data/PayloadWithInstancedStructs.h b/Source/UHLGAS/Public/Data/PayloadWithInstancedStructs.h deleted file mode 100644 index aa00c191..00000000 --- a/Source/UHLGAS/Public/Data/PayloadWithInstancedStructs.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "StructUtils/InstancedStruct.h" -#include "PayloadWithInstancedStructs.generated.h" - -UCLASS(Blueprintable) -class UPayloadWithInstancedStructs : public UObject -{ - GENERATED_BODY() - -public: - UPayloadWithInstancedStructs() = default; - UPayloadWithInstancedStructs(TArray InstancedStructs_In); - - UPROPERTY(EditAnywhere, BlueprintReadWrite) - TArray InstancedStructs = {}; -}; diff --git a/Source/UHLGAS/Public/Development/UHLGASSettings.h b/Source/UHLGAS/Public/Development/UHLGASSettings.h deleted file mode 100644 index e1274926..00000000 --- a/Source/UHLGAS/Public/Development/UHLGASSettings.h +++ /dev/null @@ -1,30 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLAbilitySystemConfig.h" -#include "Engine/DeveloperSettings.h" -#include "Misc/App.h" -#include "UHLGASSettings.generated.h" - -/** - * - */ -UCLASS(Config="Game", DefaultConfig, DisplayName="UHL GAS") -class UHLGAS_API UUHLGASSettings : public UDeveloperSettings -{ - GENERATED_BODY() - -public: - UPROPERTY(Config, EditAnywhere, Category="Ability System Defaults") - FUHLAbilitySystemSettings AbilitySystemConfigDefaults = {}; - - UPROPERTY(Config, EditAnywhere, Category="Ability System Defaults") - bool bUseAbilitySystemConfigDefaultsInASC = true; - -protected: -//~UDeveloperSettings interface - virtual FName GetCategoryName() const override { return FApp::GetProjectName(); }; -//~End of UDeveloperSettings interface -}; diff --git a/Source/UHLGAS/Public/Input/AbilityInputCache.h b/Source/UHLGAS/Public/Input/AbilityInputCache.h deleted file mode 100644 index d07deb9b..00000000 --- a/Source/UHLGAS/Public/Input/AbilityInputCache.h +++ /dev/null @@ -1,53 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameplayTagContainer.h" -#include "AbilityInputCache.generated.h" - -class UUHLAbilitySystemComponent; - -DECLARE_LOG_CATEGORY_EXTERN(Log_UHL_AbilityInputCache, Log, All); - -UCLASS(Blueprintable) -class UAbilityInputCachePayload : public UObject -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Payload") - FGameplayTag AbilityGameplayTagToCache; -}; - -/** - * TODO clear cache on successfully activated ability? is it option? - */ -UCLASS() -class UHLGAS_API UAbilityInputCache final : public UObject -{ - GENERATED_BODY() - -public: - UFUNCTION(Category = "AbilityInputCache") - void SetUp(UUHLAbilitySystemComponent* ASC_In); - - UFUNCTION(BlueprintCallable, Category = "AbilityInputCache") - bool AddTagToCache(FGameplayTag AbilityTag_In); - UFUNCTION(BlueprintCallable, Category = "AbilityInputCache") - bool AddTagsToCache(TArray AbilityTags_In, bool bReverse = false); - UFUNCTION(BlueprintCallable, Category = "AbilityInputCache") - void CheckCache(); - UFUNCTION(BlueprintCallable, Category = "AbilityInputCache") - void ClearCache(); - UFUNCTION(BlueprintCallable, Category = "AbilityInputCache") - const TArray& GetAbilityInputCache() const { return AbilityInputCache; }; - // TODO: remove tags from cache explicitly (probably bad practice, dont give option to do so?) - // UFUNCTION(BlueprintCallable) - // void RemoveTagFromCache(FGameplayTag AbilityTag_In); - -private: - UPROPERTY() - TArray AbilityInputCache = {}; - TWeakObjectPtr ASC; -}; diff --git a/Source/UHLGAS/Public/Input/UHLInputComponent.h b/Source/UHLGAS/Public/Input/UHLInputComponent.h deleted file mode 100644 index 1fe0cb6d..00000000 --- a/Source/UHLGAS/Public/Input/UHLInputComponent.h +++ /dev/null @@ -1,66 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UHLInputConfig.h" -#include "GameplayTagContainer.h" -#include "EnhancedInputComponent.h" -#include "EnhancedInputSubsystems.h" -#include "UHLInputComponent.generated.h" - -/** - * WARNING: Copy-paste from "Lyra project" - /Source/Input/LyraInputConfig - */ - -/** - * UUHLInputComponent - * - * Component used to manage input mappings and bindings using an input config data asset. - */ -UCLASS(Config = Input) -class UHLGAS_API UUHLInputComponent : public UEnhancedInputComponent -{ - GENERATED_BODY() - -public: - UUHLInputComponent(const FObjectInitializer& ObjectInitializer); - - // void AddInputMappings(const UGCInputConfig* InputConfig, UEnhancedInputLocalPlayerSubsystem* InputSubsystem) const; - // void RemoveInputMappings(const UGCInputConfig* InputConfig, UEnhancedInputLocalPlayerSubsystem* InputSubsystem) const; - - template - void BindAbilityActions(const UUHLInputConfig* InputConfig, UserClass* Object, PressedFuncType PressedFunc, ReleasedFuncType ReleasedFunc, TArray& BindHandles); - - // void RemoveBinds(TArray& BindHandles); - - // TODO: вроде ненужно - // void AddInputConfig(const FLoadedMappableConfigPair& ConfigPair, UEnhancedInputLocalPlayerSubsystem* InputSubsystem); - // void RemoveInputConfig(const FLoadedMappableConfigPair& ConfigPair, UEnhancedInputLocalPlayerSubsystem* InputSubsystem); -}; - -template -void UUHLInputComponent::BindAbilityActions(const UUHLInputConfig* InputConfig, UserClass* Object, PressedFuncType PressedFunc, ReleasedFuncType ReleasedFunc, TArray& BindHandles) -{ - check(InputConfig); - - for (const FUHLInputActionAbilities& Action : InputConfig->AbilityInputActions) - { - if (Action.InputAction && Action.bEnabled && !Action.AbilitiesToActivate.IsEmpty()) - { - for (FGameplayTag AbilityTag : Action.AbilitiesToActivate) - { - if (PressedFunc) - { - BindHandles.Add(BindAction(Action.InputAction, ETriggerEvent::Triggered, Object, PressedFunc, AbilityTag).GetHandle()); - } - - if (ReleasedFunc) - { - BindHandles.Add(BindAction(Action.InputAction, ETriggerEvent::Completed, Object, ReleasedFunc, AbilityTag).GetHandle()); - BindHandles.Add(BindAction(Action.InputAction, ETriggerEvent::Canceled, Object, ReleasedFunc, AbilityTag).GetHandle()); - } - } - } - } -} diff --git a/Source/UHLGAS/Public/Input/UHLInputConfig.h b/Source/UHLGAS/Public/Input/UHLInputConfig.h deleted file mode 100644 index 90018324..00000000 --- a/Source/UHLGAS/Public/Input/UHLInputConfig.h +++ /dev/null @@ -1,86 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Engine/DataAsset.h" -#include "GameplayTagContainer.h" -#include "UHLInputConfig.generated.h" - -/** - * WARNING: Copy paste from "Lyra project" - /Source/Input/LyraInputConfig - */ - -class UInputAction; -class UInputMappingContext; -// class ULyraLocalPlayer; - -/** - * FGCInputAction - * - * Struct used to map a input action to a gameplay input tag. - */ -USTRUCT(BlueprintType) -struct FUHLInputAction -{ - GENERATED_BODY() - -public: - UPROPERTY(EditDefaultsOnly, Category = "InputAction") - const UInputAction* InputAction = nullptr; - UPROPERTY(EditDefaultsOnly, Category = "InputAction", Meta = (Categories = "InputTag")) - FGameplayTag InputTag; -}; - -/** - * FGCInputActionAbilities - * - * Struct used to map a input action to a gameplay abilities tags - */ -USTRUCT(BlueprintType) -struct FUHLInputActionAbilities -{ - GENERATED_BODY() - -public: - UPROPERTY(EditDefaultsOnly, Category = "InputActionAbilities") - bool bEnabled = true; - UPROPERTY(EditDefaultsOnly, Category = "InputActionAbilities") - const UInputAction* InputAction = nullptr; - UPROPERTY(EditDefaultsOnly, Category = "InputActionAbilities") - TArray AbilitiesToActivate; -}; - -/** - * ULyraInputConfig - * - * Non-mutable data asset that contains input configuration properties. - */ -UCLASS(BlueprintType, Const) -class UHLGAS_API UUHLInputConfig : public UDataAsset -{ - GENERATED_BODY() - -public: - UUHLInputConfig(const FObjectInitializer& ObjectInitializer); - - // const UInputAction* FindNativeInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound = true) const; - // const UInputAction* FindAbilityInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound = true) const; - -public: - // List of input actions used by the owner. These input actions are mapped to a gameplay tag and must be manually bound. - // UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Meta = (TitleProperty = "InputAction")) - // TArray NativeInputActions; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Native Input Actions") - FUHLInputAction NativeInputAction_Move; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Native Input Actions") - FUHLInputAction NativeInputAction_LookMouse; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Native Input Actions") - FUHLInputAction NativeInputAction_LookStick; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Native Input Actions") - FUHLInputAction NativeInputAction_Interact; - - // List of input actions used by the owner. These input actions are mapped to a gameplay tag and are automatically bound to abilities with matching input tags. - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "AbilityInputActions", Meta = (TitleProperty = "InputAction")) - TArray AbilityInputActions; -}; diff --git a/Source/UHLGAS/Public/Tasks/AA_TryActivateAbilityAndWait.h b/Source/UHLGAS/Public/Tasks/AA_TryActivateAbilityAndWait.h deleted file mode 100644 index dc54d5c6..00000000 --- a/Source/UHLGAS/Public/Tasks/AA_TryActivateAbilityAndWait.h +++ /dev/null @@ -1,63 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Abilities/Async/AbilityAsync.h" -#include "StructUtils/InstancedStruct.h" -#include "AA_TryActivateAbilityAndWait.generated.h" - -/** - * - */ -UCLASS() -class UHLGAS_API UAA_TryActivateAbilityAndWait : public UAbilityAsync -{ - GENERATED_BODY() - -public: - UFUNCTION() - void OnAbilityActivate(UGameplayAbility *ActivatedAbility); - UFUNCTION() - void OnAbilityDeactivate(UGameplayAbility *ActivatedAbility); - - /** - * Wait until the specified gameplay attribute is changed on a target ability system component - * It will keep listening as long as OnlyTriggerOnce = false - * If used in an ability graph, this async action will wait even after activation ends. It's recommended to use WaitForAttributeChange instead. - * - * If InstancedStructs specified will "SendGameplayEventToActor" with "UPayloadWithInstancedStructs" in "OptionalObject1" - * you should fill "AbilityTriggers" in GameplayAbility to activate it with this Event, - * also to wait for activate/endability "WithTag" should be GameplayAbility "AbilityTags"(not strict tag check) - * TODO: "PayloadInfo" not great solution probably better to check AN_FireGameplayEvent with its OptionalObject1/2 - */ - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Ability|Tasks", meta = (DefaultToSelf = "TargetActor", BlueprintInternalUseOnly = "TRUE")) - static UAA_TryActivateAbilityAndWait* TryActivateAbilityAndWait(AActor* TargetActor, FGameplayTag WithTag, - bool bUsingEvent, const TArray& PayloadInfo, bool IncludeTriggeredAbilities=false, bool bAllowRemoteActivation=true, bool TriggerOnce=true); - - DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWaitAbilityActivateDelegate, UGameplayAbility*, ActivatedAbility); - UPROPERTY(BlueprintAssignable) - FWaitAbilityActivateDelegate OnActivate; - - DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWaitAbilityDeactivateDelegate, UGameplayAbility*, ActivatedAbility); - UPROPERTY(BlueprintAssignable) - FWaitAbilityActivateDelegate OnEndAbility; - -protected: - virtual void Activate() override; - virtual void EndAction() override; - - FGameplayTag WithTag; - FGameplayTag WithoutTag; - TArray PayloadInfo; - bool bUsingEvent = false; - bool IncludeTriggeredAbilities = false; - bool TriggerOnce; - bool bAllowRemoteActivation = true; - FGameplayTagRequirements TagRequirements; - - FGameplayTagQuery Query; - -protected: - FDelegateHandle OnAbilityActivateDelegateHandle; -}; diff --git a/Source/UHLGAS/Public/Tasks/AA_UHLGAS_WaitAbilityActivate.h b/Source/UHLGAS/Public/Tasks/AA_UHLGAS_WaitAbilityActivate.h deleted file mode 100644 index 918e63fa..00000000 --- a/Source/UHLGAS/Public/Tasks/AA_UHLGAS_WaitAbilityActivate.h +++ /dev/null @@ -1,60 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Abilities/Async/AbilityAsync.h" -#include "AA_UHLGAS_WaitAbilityActivate.generated.h" - -/** - * - */ -UCLASS() -class UHLGAS_API UAA_UHLGAS_WaitAbilityActivate : public UAbilityAsync -{ - GENERATED_BODY() - -public: - - UFUNCTION() - void OnAbilityActivate(UGameplayAbility *ActivatedAbility); - - /** - * Wait until the specified gameplay attribute is changed on a target ability system component - * It will keep listening as long as OnlyTriggerOnce = false - * If used in an ability graph, this async action will wait even after activation ends. It's recommended to use WaitForAttributeChange instead. - */ - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Ability|Tasks", meta = (DefaultToSelf = "TargetActor", BlueprintInternalUseOnly = "TRUE")) - static UAA_UHLGAS_WaitAbilityActivate* WaitForAbilityActivate(AActor* TargetActor, FGameplayTag WithTag, - FGameplayTag WithoutTag, bool IncludeTriggeredAbilities=false, bool TriggerOnce=true); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Ability|Tasks", meta = (DefaultToSelf = "TargetActor", BlueprintInternalUseOnly = "TRUE")) - static UAA_UHLGAS_WaitAbilityActivate* WaitForAbilityActivateWithTagRequirements(AActor* TargetActor, - FGameplayTagRequirements TagRequirements, bool IncludeTriggeredAbilities = false, - bool TriggerOnce = true); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Ability|Tasks", meta = (DefaultToSelf = "TargetActor", BlueprintInternalUseOnly = "TRUE")) - static UAA_UHLGAS_WaitAbilityActivate* WaitForAbilityActivate_Query(AActor* TargetActor, - FGameplayTagQuery Query, bool IncludeTriggeredAbilities = false, bool TriggerOnce = true); - - - DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWaitAbilityActivateDelegate, UGameplayAbility*, ActivatedAbility); - UPROPERTY(BlueprintAssignable) - FWaitAbilityActivateDelegate OnActivate; - -protected: - virtual void Activate() override; - virtual void EndAction() override; - - FGameplayTag WithTag; - FGameplayTag WithoutTag; - bool IncludeTriggeredAbilities = false; - bool TriggerOnce; - FGameplayTagRequirements TagRequirements; - - FGameplayTagQuery Query; - -protected: - - FDelegateHandle OnAbilityActivateDelegateHandle; -}; diff --git a/Source/UHLGAS/Public/Tasks/AA_WaitAbilityDeactivate.h b/Source/UHLGAS/Public/Tasks/AA_WaitAbilityDeactivate.h deleted file mode 100644 index 1639358a..00000000 --- a/Source/UHLGAS/Public/Tasks/AA_WaitAbilityDeactivate.h +++ /dev/null @@ -1,57 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Abilities/Async/AbilityAsync.h" -#include "AA_WaitAbilityDeactivate.generated.h" - -/** - * - */ -UCLASS() -class UHLGAS_API UAA_WaitAbilityDeactivate : public UAbilityAsync -{ - GENERATED_BODY() - -public: - - UFUNCTION() - void OnAbilityDeactivate(UGameplayAbility *DeactivatedAbility); - - /** - * Wait until the specified gameplay attribute is changed on a target ability system component - * It will keep listening as long as OnlyTriggerOnce = false - * If used in an ability graph, this async action will wait even after activation ends. It's recommended to use WaitForAttributeChange instead. - */ - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Ability|Tasks", meta = (DefaultToSelf = "TargetActor", BlueprintInternalUseOnly = "TRUE")) - static UAA_WaitAbilityDeactivate* WaitForAbilityDeactivate(AActor* TargetActor, FGameplayTag WithTag, - FGameplayTag WithoutTag, bool TriggerOnce=true); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Ability|Tasks", meta = (DefaultToSelf = "TargetActor", BlueprintInternalUseOnly = "TRUE")) - static UAA_WaitAbilityDeactivate* WaitForAbilityDeactivateWithTagRequirements(AActor* TargetActor, - FGameplayTagRequirements TagRequirements, bool TriggerOnce = true); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Ability|Tasks", meta = (DefaultToSelf = "TargetActor", BlueprintInternalUseOnly = "TRUE")) - static UAA_WaitAbilityDeactivate* WaitForAbilityDeactivate_Query(AActor* TargetActor, - FGameplayTagQuery Query, bool TriggerOnce = true); - - - DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWaitAbilityDeactivateDelegate, UGameplayAbility*, ActivatedAbility); - UPROPERTY(BlueprintAssignable) - FWaitAbilityDeactivateDelegate OnDeactivate; - -protected: - virtual void Activate() override; - virtual void EndAction() override; - - FGameplayTag WithTag; - FGameplayTag WithoutTag; - bool TriggerOnce; - FGameplayTagRequirements TagRequirements; - - FGameplayTagQuery Query; - -protected: - FDelegateHandle OnAbilityDeactivateDelegateHandle; -}; diff --git a/Source/UHLGAS/Public/Tasks/AA_WaitAttributeChangeRatioThreshold.h b/Source/UHLGAS/Public/Tasks/AA_WaitAttributeChangeRatioThreshold.h deleted file mode 100644 index c996b354..00000000 --- a/Source/UHLGAS/Public/Tasks/AA_WaitAttributeChangeRatioThreshold.h +++ /dev/null @@ -1,62 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Abilities/Async/AbilityAsync.h" -#include "Abilities/Tasks/AbilityTask_WaitAttributeChangeRatioThreshold.h" -#include "AA_WaitAttributeChangeRatioThreshold.generated.h" - -struct FGameplayEffectModCallbackData; - -/** - * - */ -UCLASS() -class UHLGAS_API UAA_WaitAttributeChangeRatioThreshold : public UAbilityAsync -{ - GENERATED_BODY() - - UAA_WaitAttributeChangeRatioThreshold(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(BlueprintAssignable) - FWaitAttributeChangeRatioThresholdDelegate OnChange; - - - void OnNumeratorAttributeChange(const FOnAttributeChangeData& CallbackData); - void OnDenominatorAttributeChange(const FOnAttributeChangeData& CallbackData); - - /** Wait on attribute ratio change meeting a comparison threshold. */ - UFUNCTION(BlueprintCallable, Category="Ability|Tasks", meta = (DefaultToSelf = "TargetActor", BlueprintInternalUseOnly = "TRUE")) - static UAA_WaitAttributeChangeRatioThreshold* WaitForAttributeChangeRatioThreshold(AActor* TargetActor, FGameplayAttribute AttributeNumerator, FGameplayAttribute AttributeDenominator, TEnumAsByte ComparisonType, float ComparisonValue, bool bTriggerOnce, AActor* OptionalExternalOwner = nullptr); - - FGameplayAttribute AttributeNumerator; - FGameplayAttribute AttributeDenominator; - TEnumAsByte ComparisonType = EWaitAttributeChangeComparison::LessThanOrEqualTo; - float ComparisonValue = 0.0f; - bool bTriggerOnce; - FDelegateHandle OnNumeratorAttributeChangeDelegateHandle; - FDelegateHandle OnDenominatorAttributeChangeDelegateHandle; - -protected: - virtual void Activate() override; - virtual void EndAction() override; - - float LastAttributeNumeratorValue; - float LastAttributeDenominatorValue; - bool bMatchedComparisonLastAttributeChange; - - /** Timer used when either numerator or denominator attribute is changed to delay checking of ratio to avoid false positives (MaxHealth changed before Health updates accordingly) */ - FTimerHandle CheckAttributeTimer; - - UPROPERTY() - TObjectPtr ExternalOwner; - - UAbilitySystemComponent* GetFocusedASC() const; - - void OnAttributeChange(); - void OnRatioChange(); - - bool DoesValuePassComparison(float ValueNumerator, float ValueDenominator) const; - -}; diff --git a/Source/UHLGAS/Public/Tasks/AT_InterpolateToPosition.h b/Source/UHLGAS/Public/Tasks/AT_InterpolateToPosition.h deleted file mode 100644 index 7cf91a1a..00000000 --- a/Source/UHLGAS/Public/Tasks/AT_InterpolateToPosition.h +++ /dev/null @@ -1,103 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Abilities/Tasks/AbilityTask.h" -#include "AT_InterpolateToPosition.generated.h" - -class UCurveVector; -DECLARE_DYNAMIC_MULTICAST_DELEGATE(FInterpolateToPositionSimpleDelegate); - -/** - * Based on "AbilityTask_MoveToLocation" - */ -UCLASS(Category = "UnrealHelperLibrary") -class UHLGAS_API UAT_InterpolateToPosition : public UAbilityTask -{ - GENERATED_BODY() - -public: - UAT_InterpolateToPosition(const FObjectInitializer& ObjectInitializer); - - /** Move to the specified location, using the vector curve (range 0 - 1) if specified, otherwise the float curve (range 0 - 1) or fallback to linear interpolation */ - UFUNCTION(BlueprintCallable, Category = "Ability|Tasks", meta = (HidePin = "OwningAbility", DefaultToSelf = "OwningAbility", BlueprintInternalUseOnly = "TRUE")) - static UAT_InterpolateToPosition* InterpolateToPosition( - FHitResult& OutHit, - UGameplayAbility* OwningAbility, - FName TaskInstanceName, - FVector Location, - FRotator Rotation, - float Duration, - UCurveFloat* OptionalInterpolationCurve, - UCurveVector* OptionalVectorInterpolationCurve, - AActor* OptionalActorToInterpolate, - const bool bIsIgnoreHits = true, - const float DistanceOffset = 0.f, - const bool bUseCapsuleTrace = false - ); - - UPROPERTY(BlueprintAssignable, Category="Ability|Tasks") - FInterpolateToPositionSimpleDelegate OnTargetLocationReached; - - virtual void InitSimulatedTask(UGameplayTasksComponent& InGameplayTasksComponent) override; - - virtual void Activate() override; - virtual void TickTask(float DeltaTime) override; - virtual void PreDestroyFromReplication() override; - virtual void OnDestroy(bool bInOwnerFinished) override; - -private: - bool bIsFinished; - - UPROPERTY(Replicated) - FRotator StartRotation; - UPROPERTY(Replicated) - FRotator TargetRotation; - - UPROPERTY(Replicated) - FVector StartLocation; - UPROPERTY(Replicated) - FVector TargetLocation; - - UPROPERTY(Replicated) - float DurationOfMovement = 0.0f; - - float TimeMoveStarted = 0.0f; - float TimeMoveWillEnd = 0.0f; - - UPROPERTY(Replicated) - TObjectPtr LerpCurve; - UPROPERTY(Replicated) - TObjectPtr LerpCurveVector; - UPROPERTY(Replicated) - TObjectPtr ActorToInterpolate = nullptr; - - static bool CheckHit( - const UWorld* World, - const FVector& Start, - const FVector& End, - const TArray& ActorsToIgnore, - FHitResult& OutHit - ); - static bool CheckCapsuleHit( - const UWorld* World, - const FVector& Start, - const FVector& End, - const float Radius, - const float HalfHeight, - const TArray& ActorsToIgnore, - FHitResult& OutHit - ); - static FVector GetCurrentEndLocation( - const FVector& Start, - const FVector& End, - const float DistanceOffset = 0.f - ); - static float GetCurrentDuration( - const float Duration, - const FVector& Start, - const FVector& End, - const FVector& CurrentEnd - ); -}; diff --git a/Source/UHLGAS/Public/UHLAbilitySet.h b/Source/UHLGAS/Public/UHLAbilitySet.h deleted file mode 100644 index e3ff7998..00000000 --- a/Source/UHLGAS/Public/UHLAbilitySet.h +++ /dev/null @@ -1,158 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "ActiveGameplayEffectHandle.h" -#include "Engine/DataAsset.h" -#include "AttributeSet.h" -#include "GameplayTagContainer.h" - -#include "GameplayAbilitySpecHandle.h" -#include "UHLAbilitySet.generated.h" - -class UGameplayAbility; -class UAttributeSet; -class UGameplayEffect; -class UUHLAbilitySystemComponent; -class UUHLGameplayAbility; -class UObject; - -/** - * FUHLAbilitySet_GameplayAbility - * - * Data used by the ability set to grant gameplay abilities. - */ -USTRUCT(BlueprintType) -struct FUHLAbilitySet_GameplayAbility -{ - GENERATED_BODY() - -public: - // Gameplay ability to grant. - UPROPERTY(EditDefaultsOnly, Category = "GameplayAbility") - TSubclassOf Ability = nullptr; - - // Level of ability to grant. - UPROPERTY(EditDefaultsOnly, Category = "GameplayAbility") - int32 AbilityLevel = 1; - - // Tag used to process input for the ability. - UPROPERTY(EditDefaultsOnly, Category = "GameplayAbility", Meta = (Categories = "InputTag")) - FGameplayTag InputTag; -}; - -/** - * FUHLAbilitySet_GameplayEffect - * - * Data used by the ability set to grant gameplay effects. - */ -USTRUCT(BlueprintType) -struct FUHLAbilitySet_GameplayEffect -{ - GENERATED_BODY() - -public: - // Gameplay effect to grant. - UPROPERTY(EditDefaultsOnly, Category = "GameplayEffect") - TSubclassOf GameplayEffect = nullptr; - - // Level of gameplay effect to grant. - UPROPERTY(EditDefaultsOnly, Category = "GameplayEffect") - float EffectLevel = 1.0f; -}; - -/** - * FUHLAbilitySet_AttributeSet - * - * Data used by the ability set to grant attribute sets. - */ -USTRUCT(BlueprintType) -struct FUHLAbilitySet_AttributeSet -{ - GENERATED_BODY() - -public: - // Gameplay effect to grant. - UPROPERTY(EditDefaultsOnly, Category = "AttributeSet") - TSubclassOf AttributeSet; -}; - -/** - * FUHLAbilitySet_GrantedHandles - * - * Data used to store handles to what has been granted by the ability set. - */ -USTRUCT(BlueprintType) -struct FUHLAbilitySet_GrantedHandles -{ - GENERATED_BODY() - -public: - FGameplayTagContainer GetAbilitySetTags() const { return AbilitySetTags; } - void SetAbilitySetTags(const FGameplayTagContainer& AbilitySetTagContainer); - - void AddAbilitySpecHandle(const FGameplayAbilitySpecHandle& Handle); - void AddGameplayEffectHandle(const FActiveGameplayEffectHandle& Handle); - void AddAttributeSet(UAttributeSet* Set); - - void TakeFromAbilitySystem(UAbilitySystemComponent* ASC); - -protected: - UPROPERTY() - FGameplayTagContainer AbilitySetTags; - - // Handles to the granted abilities. - UPROPERTY() - TArray AbilitySpecHandles; - - // Handles to the granted gameplay effects. - UPROPERTY() - TArray GameplayEffectHandles; - - // Pointers to the granted attribute sets - UPROPERTY() - TArray> GrantedAttributeSets; -}; - -/** - * UUHLAbilitySet - * - * Non-mutable data asset used to grant gameplay abilities and gameplay effects. - * - * Based on Lyra "AbilitySets" - */ -UCLASS(BlueprintType, Const) -class UUHLAbilitySet : public UPrimaryDataAsset -{ - GENERATED_BODY() - -public: - UUHLAbilitySet(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); - - // Grants the ability set to the specified ability system component. - // The returned handles can be used later to take away anything that was granted. - void GiveToAbilitySystem(UAbilitySystemComponent* ASC, FUHLAbilitySet_GrantedHandles* OutGrantedHandles, UObject* SourceObject = nullptr) const; - - TArray> GetAllAbilitiesList() const; - -protected: - // AbilitySetTag to associate with and can be removed "RemoveAbilitySetByTag" - UPROPERTY(EditDefaultsOnly, Category = "AbilitySet Tags", meta = (TitleProperty = Ability)) - FGameplayTagContainer AbilitySetTags; - - // Gameplay abilities to grant when this ability set is granted. - UPROPERTY(EditDefaultsOnly, Category = "Gameplay Abilities", meta = (TitleProperty = Ability)) - TArray> GrantedSimpleGameplayAbilities; - - // Gameplay abilities to grant when this ability set is granted. - UPROPERTY(EditDefaultsOnly, Category = "Gameplay Abilities", meta = (TitleProperty = Ability)) - TArray GrantedGameplayAbilities; - - // Gameplay effects to grant when this ability set is granted. - UPROPERTY(EditDefaultsOnly, Category = "Gameplay Effects", meta = (TitleProperty = GameplayEffect)) - TArray GrantedGameplayEffects; - - // Attribute sets to grant when this ability set is granted. - UPROPERTY(EditDefaultsOnly, Category = "Attribute Sets", meta = (TitleProperty = AttributeSet)) - TArray GrantedAttributes; -}; diff --git a/Source/UHLGAS/Public/UHLAbilitySystemComponent.h b/Source/UHLGAS/Public/UHLAbilitySystemComponent.h deleted file mode 100644 index efadf2fd..00000000 --- a/Source/UHLGAS/Public/UHLAbilitySystemComponent.h +++ /dev/null @@ -1,160 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AbilitySystemComponent.h" -#include "UHLAbilitySet.h" -#include "UHLAbilitySystemConfig.h" -#include "Input/AbilityInputCache.h" -#include "UHLAbilitySystemComponent.generated.h" - -class UUHLAbilitySystemConfig; -class UUHLAbilitySet; -class UUHLInputConfig; -class UUHLGameplayAbility; - -/** - * - */ -UCLASS(Category = "UnrealHelperLibrary", Blueprintable, meta=(BlueprintSpawnableComponent)) -class UHLGAS_API UUHLAbilitySystemComponent : public UAbilitySystemComponent -{ - GENERATED_BODY() - -public: - UUHLAbilitySystemComponent(); - - // "PropertyRedirects" don't or can't redirect properties to struct like "Settings" - // checked many ways nothing worked. Don't want to create "migration" so just fill - // properties from "AbilitySystemConfig" - // UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL AbilitySystemComponent", meta=(ShowOnlyInnerProperties)) - // FUHLAbilitySystemSettings Settings = {}; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL AbilitySystemComponent", meta=(InlineEditConditionToggle)) - bool bInitializeGameplayAttributes = true; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL AbilitySystemComponent", meta=(ForceInlineRow, EditCondition="bInitializeGameplayAttributes")) - TMap InitialAttributes = {}; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL AbilitySystemComponent", meta=(InlineEditConditionToggle)) - bool bGiveAbilitiesOnStart = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="UHL AbilitySystemComponent", meta=(EditCondition="bGiveAbilitiesOnStart")) - TArray> Abilities = {}; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL AbilitySystemComponent", meta=(InlineEditConditionToggle)) - bool bGiveAttributesSetsOnStart = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="UHL AbilitySystemComponent", meta=(EditCondition="bGiveAttributesSetsOnStart")) - TArray> AttributeSets = {}; - - // TODO replace by "EUHLAbilityActivationPolicy::OnSpawn" - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL AbilitySystemComponent", meta=(InlineEditConditionToggle)) - bool bActivateAbilitiesOnStart = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="UHL AbilitySystemComponent", meta=(EditCondition="bActivateAbilitiesOnStart")) - TArray ActiveAbilitiesOnStart = {}; - - // TODO initial GameplayEffects? - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL AbilitySystemComponent", meta=(InlineEditConditionToggle)) - bool bGiveInitialGameplayTags = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="UHL AbilitySystemComponent", meta=(EditCondition="bGiveInitialGameplayTags")) - FGameplayTagContainer InitialGameplayTags; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL AbilitySystemComponent", meta=(InlineEditConditionToggle)) - bool bGiveAbilitySetsOnStart = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="UHL AbilitySystemComponent", meta=(EditCondition="bGiveAbilitySetsOnStart")) - TArray AbilitySets = {}; - - UPROPERTY(EditAnywhere, Transient, BlueprintReadWrite, Category="UHL AbilitySystemComponent", AdvancedDisplay, meta=(InlineEditConditionToggle)) - bool bPreviewAllAbilities = true; - UPROPERTY(VisibleDefaultsOnly, Transient, AdvancedDisplay, Category="UHL AbilitySystemComponent", meta=(EditCondition="bPreviewAllAbilities", MultiLine=true)) - TMap DebugPreviewAbilitiesFromAbilitySets = {}; - - // binding inputs to tags check Readme.MD on how to setup it - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="InputConfig", meta=(EditCondition="!bUseAbilitySystemConfig")) - bool bUseInputConfig = false; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="InputConfig", meta=(EditCondition="bUseInputConfig")) - UUHLInputConfig* InputConfig = nullptr; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="InputConfig", meta=(EditCondition="bUseInputConfig")) - bool bUseAbilityInputCache = false; - // if enabled - caching works only in predefined user windows - ANS_AbilityInputCache_CacheWindow - // if disabled - works always - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="InputConfig", meta=(EditCondition="bUseInputConfig && bUseAbilityInputCache")) - bool bUseInputCacheWindows = true; - - // manage settings in config - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystem Config") - bool bUseAbilitySystemConfig = false; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystem Config", meta=(EditCondition="bUseAbilitySystemConfig")) - UUHLAbilitySystemConfig* AbilitySystemConfig; - - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent", meta=(DefaultToSelf="InAvatarActor")) - virtual void InitAbilitySystem(AActor* NewOwner, AActor* InAvatarActor, bool bActivateInitialAbilities = true); - UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="UHL AbilitySystemComponent") - void InitAttributes(); - virtual void InitAttributes_Implementation(); - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual void GiveInitialTags(); - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual void SetAttributes(TMap Attributes_In); - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual void ActivateInitialAbilities(); - - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual void GiveAbilitySet(const UUHLAbilitySet* AbilitySet); - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual void RemoveAbilitySetByTag(const FGameplayTag& GameplayTag); - -/** Input Config **/ - void ProcessAbilityInput(float DeltaTime, bool bGamePaused); - void ClearAbilityInput(); - - virtual void AbilitySpecInputPressed(FGameplayAbilitySpec& Spec) override; - virtual void AbilitySpecInputReleased(FGameplayAbilitySpec& Spec) override; - virtual void AbilityInputTagPressed(const FGameplayTag InputTag); - virtual void AbilityInputTagReleased(const FGameplayTag InputTag); -/** Input Config **/ - - UFUNCTION(BlueprintCallable, Category = "UHL AbilitySystemComponent|AbilityInputCache") - UAbilityInputCache* GetAbilityInputCache() const { return AbilityInputCache; }; - UFUNCTION(BlueprintCallable, Category = "UHL AbilitySystemComponent|AbilityInputCache") - bool CanAddAbilityToCache(UUHLGameplayAbility* GameplayAbility_In) const; - - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual bool TryActivateAbilityWithTag(FGameplayTag GameplayTag, bool bAllowRemoteActivation = true); - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual bool TryCancelAbilityWithTag(FGameplayTag GameplayTag); - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual TArray TryCancelAbilitiesWithTags(TArray GameplayTags); - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual void RemoveLooseGameplayTagCompletly(const FGameplayTag& GameplayTag); - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual bool IsAbilityActive(FGameplayTag GameplayTag) const; - - UFUNCTION(BlueprintCallable, Category="UHL AbilitySystemComponent") - virtual int32 FireGameplayEvent(FGameplayTag EventTag, const FGameplayEventData& Payload); - -protected: - virtual void BeginPlay() override; - virtual void OnUnregister() override; - -#if WITH_EDITOR - virtual bool CanEditChange(const FProperty* InProperty) const override; - virtual void PostInitProperties() override; - virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override; - void UpdatePreviewAbilitiesMap(); -#endif - -private: - UPROPERTY() - TObjectPtr AbilityInputCache; - - // Handles to abilities that had their input pressed this frame. - TArray InputPressedSpecHandles; - // Handles to abilities that had their input released this frame. - TArray InputReleasedSpecHandles; - // Handles to abilities that have their input held. - TArray InputHeldSpecHandles; - // AbilitySets given to ASC - TArray AbilitySetGrantedHandles; - - void FillSettingsFromConfig(const FUHLAbilitySystemSettings& AbilitySystemConfig_In); -}; diff --git a/Source/UHLGAS/Public/UHLAbilitySystemConfig.h b/Source/UHLGAS/Public/UHLAbilitySystemConfig.h deleted file mode 100644 index aaab97a4..00000000 --- a/Source/UHLGAS/Public/UHLAbilitySystemConfig.h +++ /dev/null @@ -1,85 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AttributeSet.h" -#include "GameplayTagContainer.h" -#include "Engine/DataAsset.h" -#include "UHLAbilitySystemConfig.generated.h" - -class UGameplayAbility; -class UUHLAbilitySet; -class UUHLInputConfig; -class UAttributeSet; - -USTRUCT(BlueprintType) -struct FUHLAbilitySystemSettings -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystemSettings", meta=(InlineEditConditionToggle)) - bool bInitializeGameplayAttributes = true; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystemSettings", meta=(ForceInlineRow, EditCondition="bInitializeGameplayAttributes")) - TMap InitialAttributes = {}; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystemSettings", meta=(InlineEditConditionToggle)) - bool bGiveAbilitiesOnStart = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="AbilitySystemSettings", meta=(EditCondition="bGiveAbilitiesOnStart")) - TArray> Abilities = {}; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystemSettings", meta=(InlineEditConditionToggle)) - bool bGiveAttributesSetsOnStart = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="AbilitySystemSettings", meta=(EditCondition="bGiveAttributesSetsOnStart")) - TArray> AttributeSets = {}; - - // TODO replace by "EUHLAbilityActivationPolicy::OnSpawn" - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystemSettings", meta=(InlineEditConditionToggle)) - bool bActivateAbilitiesOnStart = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="AbilitySystemSettings", meta=(EditCondition="bActivateAbilitiesOnStart")) - TArray ActiveAbilitiesOnStart = {}; - - // TODO initial GameplayEffects? - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystemSettings", meta=(InlineEditConditionToggle)) - bool bGiveInitialGameplayTags = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="AbilitySystemSettings", meta=(EditCondition="bGiveInitialGameplayTags")) - FGameplayTagContainer InitialGameplayTags; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystemSettings", AdvancedDisplay, meta=(InlineEditConditionToggle)) - bool bGiveAbilitySetsOnStart = true; - UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="AbilitySystemSettings", AdvancedDisplay, meta=(EditCondition="bGiveAbilitySetsOnStart")) - TArray AbilitySets = {}; - - UPROPERTY(EditAnywhere, Transient, BlueprintReadWrite, Category="AbilitySystemSettings", AdvancedDisplay, meta=(InlineEditConditionToggle)) - bool bPreviewAllAbilities = true; - UPROPERTY(VisibleDefaultsOnly, Transient, Category="AbilitySystemSettings", AdvancedDisplay, meta=(EditCondition="bPreviewAllAbilities", MultiLine=true)) - TMap DebugPreviewAbilitiesFromAbilitySets = {}; - - // binding inputs to tags check Readme.MD on how to setup it - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="InputConfig") - bool bUseInputConfig = false; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="InputConfig", meta=(EditCondition="bUseInputConfig")) - UUHLInputConfig* InputConfig = nullptr; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="InputConfig", meta=(EditCondition="bUseInputConfig")) - bool bUseAbilityInputCache = false; - // if enabled - caching works only in predefined user windows - ANS_AbilityInputCache_CacheWindow - // if disabled - works always - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="InputConfig", meta=(EditCondition="bUseInputConfig && bUseAbilityInputCache")) - bool bUseInputCacheWindows = true; -}; - -/** - * if you want to set default values like "AttributeSets" or something just nest from this - */ -UCLASS(Blueprintable, BlueprintType) -class UHLGAS_API UUHLAbilitySystemConfig : public UPrimaryDataAsset -{ - GENERATED_BODY() - -public: - UUHLAbilitySystemConfig(); - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AbilitySystemConfig", meta=(ShowOnlyInnerProperties)) - FUHLAbilitySystemSettings Settings; -}; diff --git a/Source/UHLGAS/Public/UHLGAS.h b/Source/UHLGAS/Public/UHLGAS.h deleted file mode 100644 index 45241fe1..00000000 --- a/Source/UHLGAS/Public/UHLGAS.h +++ /dev/null @@ -1,15 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Modules/ModuleManager.h" - -UHLGAS_API DECLARE_LOG_CATEGORY_EXTERN(LogUHLAbilitySystem, Log, All); - -class FUHLGASModule : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; diff --git a/Source/UHLGAS/Public/UHLGASBlueprintLibrary.h b/Source/UHLGAS/Public/UHLGASBlueprintLibrary.h deleted file mode 100644 index 4aed7ef6..00000000 --- a/Source/UHLGAS/Public/UHLGASBlueprintLibrary.h +++ /dev/null @@ -1,91 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "GameplayEffect.h" -#include "UHLAbilitySystemComponent.h" -#include "AssetRegistry/AssetData.h" -#include "Kismet/BlueprintFunctionLibrary.h" -#include "UHLGASBlueprintLibrary.generated.h" - -class UWidget; -struct FBlackboardKeySelector; - -// TODO improve -// - validations if Actor1/Actors2 is nullptr - DebugPrintString it -// - keywords for every method - -/* - * Function library class. - * Each function in it is expected to be static and represents blueprint node that can be called in any blueprint. - * - * When declaring function you can define metadata for the node. Key function specifiers will be BlueprintPure and BlueprintCallable. - * BlueprintPure - means the function does not affect the owning object in any way and thus creates a node without Exec pins. - * BlueprintCallable - makes a function which can be executed in Blueprints - Thus it has Exec pins. - * DisplayName - full name of the node, shown when you mouse over the node and in the blueprint drop down menu. - * Its lets you name the node using characters not allowed in C++ function names. - * CompactNodeTitle - the word(s) that appear on the node. - * Keywords - the list of keywords that helps you to find node when you search for it using Blueprint drop-down menu. - * Good example is "Print String" node which you can find also by using keyword "log". - * Category - the category your node will be under in the Blueprint drop-down menu. - * - * For more info on custom blueprint nodes visit documentation: - * https://wiki.unrealengine.com/Custom_Blueprint_Node_Creation - */ -UCLASS() -class UHLGAS_API UUHLGASBlueprintLibrary : public UBlueprintFunctionLibrary -{ - GENERATED_BODY() - -public: - /** Tries to find an ability system component on the actor, will use AbilitySystemInterface or fall back to a component search */ - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary", Meta=(DefaultToSelf = "Actor")) - static UUHLAbilitySystemComponent* GetUHLAbilitySystemComponent(AActor* Actor); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary debug GAS Development")) - static FGameplayEffectSpec CreateGenericGASGameplayEffectSpec( - TSubclassOf GameplayEffectClass, AActor* HitInstigator, AActor* InEffectCauser, const FHitResult& HitResult, const UObject* SourceObject); - - /** - * UUnrealHelperLibraryBPL::UpdateStateGameplayTags(ASC, GetMovementComponent()->Velocity.Length() > 0, - UHLGameplayTags::TAG_Character_State_IsMoving, - UHLGameplayTags::TAG_Character_State_IsIdling); - bCondition = true ? TAG_Character_State_IsMoving : TAG_Character_State_IsIdling - - UUnrealHelperLibraryBPL::UpdateStateGameplayTags(ASC, CharacterMovementVector.Length() > 0.4f, - UHLGameplayTags::TAG_Character_State_HasMoveInput, - FGameplayTag::EmptyTag); - bCondition = true ? TAG_Character_State_HasMoveInput : NONE - */ - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary ability")) - static void UpdateStateGameplayTags(UAbilitySystemComponent* ASC, bool bCondition, FGameplayTag PositiveConditionTag, FGameplayTag NegativeConditionTag, bool bShouldReplicate = false); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary ability")) - static bool IsAbilityActiveByTag(const UAbilitySystemComponent* ASC, FGameplayTag GameplayTag); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary ability")) - static bool TryActivateAbilityWithTag(UAbilitySystemComponent* ASC, FGameplayTag GameplayTag, bool bAllowRemoteActivation); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary ability")) - static bool TryCancelAbilityWithTag(UAbilitySystemComponent* ASC, FGameplayTag GameplayTag); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary ability")) - static bool ToggleAbilityWithTag(UAbilitySystemComponent* ASC, FGameplayTag GameplayTag, bool bAllowRemoteActivation); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary ability")) - static TArray TryCancelAbilitiesWithTags(UAbilitySystemComponent* ASC, TArray GameplayTags); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary ability event fire")) - static int32 FireGameplayEvent(UAbilitySystemComponent* ASC, FGameplayTag EventTag, const FGameplayEventData& Payload); - - // "FGameplayTag::RequestGameplayTag()" crashes build on start, use this to find tag - // function from Lyra - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary gameplaytag tag")) - static FGameplayTag FindTagByString(const FString& TagString, bool bMatchPartialString = false); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary gameplaytag tag")) - static void FindAbilitySpecByTag(const TArray& AbilitiesSpecsContainer, FGameplayTag TagToFind, FGameplayAbilitySpec& AbilitySpec_Out); - - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|GAS", meta = (Keywords = "UnrealHelperLibrary gameplaytag tag")) - static void FindAbilitySpecByTagUsingASC(UAbilitySystemComponent* ASC, FGameplayTag TagToFind, FGameplayAbilitySpec& AbilitySpec_Out); -}; diff --git a/Source/UHLGAS/UHLGAS.Build.cs b/Source/UHLGAS/UHLGAS.Build.cs deleted file mode 100644 index e7988eab..00000000 --- a/Source/UHLGAS/UHLGAS.Build.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class UHLGAS : ModuleRules -{ - public UHLGAS(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - // ... add other public dependencies that you statically link with here ... - "GameplayAbilities", - "GameplayTags", - "GameplayTasks", - "EnhancedInput", - - "NiagaraAnimNotifies", - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "CoreUObject", - "Engine", - - "DeveloperSettings", - - "UnrealHelperLibrary", - "UHLAI", - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeCapsuleBase.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeCapsuleBase.cpp deleted file mode 100644 index ac553286..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeCapsuleBase.cpp +++ /dev/null @@ -1,325 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "Animation/Notifies/ANS_ChangeCapsuleBase.h" - -#include "Components/CapsuleComponent.h" -#include "DrawDebugHelpers.h" - -void UANS_ChangeCapsuleBase::NotifyBegin( - USkeletalMeshComponent* MeshComp, - UAnimSequenceBase* Animation, - float TotalDuration, - const FAnimNotifyEventReference& EventReference -) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - ElapsedTime = 0.0f; - NotifyTotalDuration = TotalDuration; - bHasValidOriginals = false; - CapsuleComp = nullptr; - - if (!MeshComp) - { - return; - } - - // Let the subclass find its capsule component - CapsuleComp = FindCapsuleComponent(MeshComp); - if (!CapsuleComp) - { - return; - } - - // Store “original” values immediately - OriginalRadius = CapsuleComp->GetUnscaledCapsuleRadius(); - OriginalHalfHeight = CapsuleComp->GetUnscaledCapsuleHalfHeight(); - OriginalScale = CapsuleComp->GetRelativeScale3D(); - OriginalShapeColor = CapsuleComp->ShapeColor.ReinterpretAsLinear(); - - // Compute and cache “target” values now - TargetRadius = bModifyRadius ? NewRadius : OriginalRadius; - TargetHalfHeight = bModifyHalfHeight ? NewHalfHeight : OriginalHalfHeight; - TargetScale = bModifyScale ? NewScale : OriginalScale; - TargetLineThickness = bModifyLineThickness ? NewLineThickness : OriginalLineThickness; - TargetShapeColor = bModifyShapeColor ? NewShapeColor : OriginalShapeColor; - - bHasValidOriginals = true; - - // --- Construct FAlphaBlend for blend-in using FAlphaBlendArgs --- - { - FAlphaBlendArgs InArgs; - InArgs.BlendTime = (BlendTimeIn > KINDA_SMALL_NUMBER) ? BlendTimeIn : 0.0f; - InArgs.BlendOption = BlendOptionIn; - BlendInAlpha = FAlphaBlend(InArgs); - } - - // --- Construct FAlphaBlend for blend-out using FAlphaBlendArgs --- - { - FAlphaBlendArgs OutArgs; - OutArgs.BlendTime = (BlendTimeOut > KINDA_SMALL_NUMBER) ? BlendTimeOut : 0.0f; - OutArgs.BlendOption = BlendOptionOut; - BlendOutAlpha = FAlphaBlend(OutArgs); - } - - // If instant blend-in, snap right away to the “target” values - if (BlendTimeIn <= KINDA_SMALL_NUMBER) - { - if (bModifyRadius) - { - CapsuleComp->SetCapsuleRadius(TargetRadius, /*bUpdateOverlaps=*/ false); - } - if (bModifyHalfHeight) - { - CapsuleComp->SetCapsuleHalfHeight(TargetHalfHeight, /*bUpdateOverlaps=*/ false); - } - if (bModifyScale) - { - CapsuleComp->SetRelativeScale3D(TargetScale); - } - if (bModifyLineThickness) - { - CapsuleComp->SetLineThickness(TargetLineThickness); - } - if (bModifyShapeColor) - { - CapsuleComp->ShapeColor = TargetShapeColor.ToFColor(/*bSRGB=*/ true); - } - } - // Otherwise, leave them at “original” until NotifyTick interpolates - - SaveOriginalCollisionSettings(); - ApplyCollisionSettings(); -} - -void UANS_ChangeCapsuleBase::NotifyTick( - USkeletalMeshComponent* MeshComp, - UAnimSequenceBase* Animation, - float FrameDeltaTime, - const FAnimNotifyEventReference& EventReference -) -{ - Super::NotifyTick(MeshComp, Animation, FrameDeltaTime, EventReference); - - if (!bHasValidOriginals || !CapsuleComp) - { - return; - } - - ElapsedTime += FrameDeltaTime; - - // 1) Compute “raw alpha” in [0..1] based on blend-in / hold / blend-out - float RawAlpha = 1.0f; - - // a) Blend-in phase - if (BlendTimeIn > KINDA_SMALL_NUMBER && ElapsedTime < BlendTimeIn) - { - BlendInAlpha.Update(FrameDeltaTime); - RawAlpha = BlendInAlpha.GetBlendedValue(); - } - // b) Hold at target (after blend-in, before blend-out) - else if (ElapsedTime >= BlendTimeIn && ElapsedTime <= (NotifyTotalDuration - BlendTimeOut)) - { - RawAlpha = 1.0f; - } - // c) Blend-out phase - else if (BlendTimeOut > KINDA_SMALL_NUMBER && ElapsedTime > (NotifyTotalDuration - BlendTimeOut)) - { - float OutElapsed = ElapsedTime - (NotifyTotalDuration - BlendTimeOut); - BlendOutAlpha.Update(FrameDeltaTime); - RawAlpha = 1.0f - BlendOutAlpha.GetBlendedValue(); - } - // d) Otherwise (zero‐blend cases), RawAlpha stays 1.0 - - RawAlpha = FMath::Clamp(RawAlpha, 0.0f, 1.0f); - - // 2) If user provided an EaseCurve, remap RawAlpha - if (EaseCurve.GetRichCurveConst() && EaseCurve.GetRichCurveConst()->GetNumKeys() > 0) - { - float Curved = EaseCurve.GetRichCurveConst()->Eval(RawAlpha); - RawAlpha = FMath::Clamp(Curved, 0.0f, 1.0f); - } - - // 3) Lerp each property from “original” → “target” using RawAlpha - float CurrentRadius = OriginalRadius; - float CurrentHalfHeight = OriginalHalfHeight; - FVector CurrentScale = OriginalScale; - float CurrentLineThickness = OriginalLineThickness; - FLinearColor CurrentShapeColor = OriginalShapeColor; - - if (bModifyRadius) - { - CurrentRadius = FMath::Lerp(OriginalRadius, TargetRadius, RawAlpha); - CapsuleComp->SetCapsuleRadius(CurrentRadius, /*bUpdateOverlaps=*/ false); - } - if (bModifyHalfHeight) - { - CurrentHalfHeight = FMath::Lerp(OriginalHalfHeight, TargetHalfHeight, RawAlpha); - CapsuleComp->SetCapsuleHalfHeight(CurrentHalfHeight, /*bUpdateOverlaps=*/ false); - } - if (bModifyScale) - { - CurrentScale = FMath::Lerp(OriginalScale, TargetScale, RawAlpha); - CapsuleComp->SetRelativeScale3D(CurrentScale); - } - if (bModifyLineThickness) - { - CurrentLineThickness = FMath::Lerp(OriginalLineThickness, TargetLineThickness, RawAlpha); - CapsuleComp->SetLineThickness(CurrentLineThickness); - } - if (bModifyShapeColor) - { - CurrentShapeColor = FMath::Lerp(OriginalShapeColor, TargetShapeColor, RawAlpha); - CapsuleComp->ShapeColor = CurrentShapeColor.ToFColor(/*bSRGB=*/ true); - } - - // 4) If bDebug is true, draw a wireframe debug capsule using the current interpolated values - if (bDebug && CapsuleComp) - { - FVector Location = CapsuleComp->GetComponentLocation(); - FRotator Rotation = CapsuleComp->GetComponentRotation(); - const FVector CompScale = CapsuleComp->GetComponentScale(); - float DrawRadius = CurrentRadius * FMath::Max(CompScale.X, CompScale.Y); - float DrawHalfHeight = CurrentHalfHeight * CompScale.Z; - FColor DebugColor = FColor::Yellow; - float LifeTime = 0.0f; // one frame - uint8 DepthPriority = 0; // Normal - float Thickness = 1.0f; - - DrawDebugCapsule( - CapsuleComp->GetWorld(), - Location, - DrawHalfHeight, - DrawRadius, - Rotation.Quaternion(), - DebugColor, - false, - LifeTime, - DepthPriority, - Thickness - ); - } -} - -void UANS_ChangeCapsuleBase::NotifyEnd( - USkeletalMeshComponent* MeshComp, - UAnimSequenceBase* Animation, - const FAnimNotifyEventReference& EventReference -) -{ - Super::NotifyEnd(MeshComp, Animation, EventReference); - - if (!bHasValidOriginals || !CapsuleComp) - { - return; - } - - // Always restore every modified property back to its original value - if (bModifyRadius) - { - CapsuleComp->SetCapsuleRadius(OriginalRadius, /*bUpdateOverlaps=*/ false); - } - if (bModifyHalfHeight) - { - CapsuleComp->SetCapsuleHalfHeight(OriginalHalfHeight, /*bUpdateOverlaps=*/ false); - } - if (bModifyScale) - { - CapsuleComp->SetRelativeScale3D(OriginalScale); - } - if (bModifyLineThickness) - { - CapsuleComp->SetLineThickness(OriginalLineThickness); - } - if (bModifyShapeColor) - { - CapsuleComp->ShapeColor = OriginalShapeColor.ToFColor(/*bSRGB=*/ true); - } - - // Clear internal pointers & flags - CapsuleComp = nullptr; - bHasValidOriginals = false; - ElapsedTime = 0.0f; - NotifyTotalDuration = 0.0f; - - RestoreOriginalCollisionSettings(); -} - -void UANS_ChangeCapsuleBase::SaveOriginalCollisionSettings() -{ - if (!CapsuleComp) return; - - // Collision Enabled - OriginalCapsuleSettings.CollisionEnabled = CapsuleComp->GetCollisionEnabled(); - OriginalCapsuleSettings.bForceQueryOnly = false; - OriginalCapsuleSettings.bOverrideCollisionEnabled = true; - - // Profile Name - OriginalCapsuleSettings.CollisionProfileName = CapsuleComp->GetCollisionProfileName(); - OriginalCapsuleSettings.bOverrideCollisionProfileName = true; - - // Overlap Events - OriginalCapsuleSettings.bGenerateOverlapEvents = CapsuleComp->GetGenerateOverlapEvents(); - OriginalCapsuleSettings.bOverrideGenerateOverlapEvents = true; - - // Custom Responses - OriginalCapsuleSettings.CustomResponses.Empty(); - for (int32 Chan = 0; Chan < ECollisionChannel::ECC_MAX; ++Chan) - { - OriginalCapsuleSettings.CustomResponses.Add( - static_cast(Chan), - CapsuleComp->GetCollisionResponseToChannel((ECollisionChannel)Chan) - ); - } - OriginalCapsuleSettings.bOverrideCustomResponses = true; -} - -void UANS_ChangeCapsuleBase::RestoreOriginalCollisionSettings() -{ - if (!CapsuleComp) return; - - // Restore enabled & profile - CapsuleComp->SetCollisionEnabled(OriginalCapsuleSettings.CollisionEnabled); - CapsuleComp->SetCollisionProfileName(OriginalCapsuleSettings.CollisionProfileName); - - // Restore overlap - CapsuleComp->SetGenerateOverlapEvents(OriginalCapsuleSettings.bGenerateOverlapEvents); - - // Restore responses - for (auto& Pair : OriginalCapsuleSettings.CustomResponses) - { - CapsuleComp->SetCollisionResponseToChannel(Pair.Key, Pair.Value); - } -} - -void UANS_ChangeCapsuleBase::ApplyCollisionSettings() -{ - if (!CapsuleComp) return; - - // Apply overrides - if (CapsuleCollisionSettings.bOverrideCollisionEnabled) - { - // Use if-else instead of ternary to prevent ambiguity - ECollisionEnabled::Type NewMode = CapsuleCollisionSettings.CollisionEnabled; - if (CapsuleCollisionSettings.bForceQueryOnly) - { - NewMode = ECollisionEnabled::QueryOnly; - } - CapsuleComp->SetCollisionEnabled(NewMode); - } - if (CapsuleCollisionSettings.bOverrideCollisionProfileName) - { - CapsuleComp->SetCollisionProfileName(CapsuleCollisionSettings.CollisionProfileName); - } - if (CapsuleCollisionSettings.bOverrideGenerateOverlapEvents) - { - CapsuleComp->SetGenerateOverlapEvents(CapsuleCollisionSettings.bGenerateOverlapEvents); - } - if (CapsuleCollisionSettings.bOverrideCustomResponses) - { - for (auto& Pair : CapsuleCollisionSettings.CustomResponses) - { - CapsuleComp->SetCollisionResponseToChannel(Pair.Key, Pair.Value); - } - } -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeCharacterCapsule.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeCharacterCapsule.cpp deleted file mode 100644 index de1f814d..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeCharacterCapsule.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "Animation/Notifies/ANS_ChangeCharacterCapsule.h" - -#include "GameFramework/Character.h" -#include "Components/CapsuleComponent.h" - -UCapsuleComponent* UANS_ChangeCharacterCapsule::FindCapsuleComponent(USkeletalMeshComponent* MeshComp) const -{ - if (!MeshComp) - { - return nullptr; - } - - AActor* OwningActor = MeshComp->GetOwner(); - if (!OwningActor) - { - return nullptr; - } - - if (ACharacter* CharOwner = Cast(OwningActor)) - { - return CharOwner->GetCapsuleComponent(); - } - - return nullptr; -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeNamedCapsule.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeNamedCapsule.cpp deleted file mode 100644 index d9f51e72..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeNamedCapsule.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "Animation/Notifies/ANS_ChangeNamedCapsule.h" - -#include "Components/CapsuleComponent.h" -#include "GameFramework/Actor.h" - -UCapsuleComponent* UANS_ChangeNamedCapsule::FindCapsuleComponent(USkeletalMeshComponent* MeshComp) const -{ - if (!MeshComp) - { - return nullptr; - } - - AActor* OwningActor = MeshComp->GetOwner(); - if (!OwningActor || CapsuleComponentName.IsNone()) - { - return nullptr; - } - - TArray FoundComps; - OwningActor->GetComponents(FoundComps); - - for (UCapsuleComponent* Cap : FoundComps) - { - if (Cap && Cap->GetFName() == CapsuleComponentName) - { - return Cap; - } - } - - return nullptr; -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeRotationRate.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeRotationRate.cpp deleted file mode 100644 index d5584c45..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_ChangeRotationRate.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/ANS_ChangeRotationRate.h" - -#include "GameFramework/Character.h" -#include "GameFramework/CharacterMovementComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(ANS_ChangeRotationRate) - -FString UANS_ChangeRotationRate::GetNotifyName_Implementation() const -{ - return FString::Printf( - TEXT("Change RotationRate to Pitch=%.2f, Yaw=%.2f, Roll=%.2f"), - RotationRate.Pitch, - RotationRate.Yaw, - RotationRate.Roll - ); -} - -void UANS_ChangeRotationRate::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - ACharacter* Character = Cast(MeshComp->GetOwner()); - if (!Character) return; - - CharacterMovementComponent = Character->GetCharacterMovement(); - if (!CharacterMovementComponent.IsValid()) return; - - // UUHLCharacterMovementComponent* UHLCMC = GetUHLCharacterMovementComponent(Character); - // if (!UHLCMC) return; - - // InitialRotationRate = UHLCMC->RotationRate; - // UHLCMC->SetRotationRate(RotationRate); - - InitialRotationRate = CharacterMovementComponent->RotationRate; - CharacterMovementComponent->RotationRate = RotationRate; -} - -void UANS_ChangeRotationRate::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - ReturnInitialRotationRate(); - - Super::NotifyEnd(MeshComp, Animation, EventReference); -} - -void UANS_ChangeRotationRate::OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) -{ - if (CharacterMovementComponent.IsValid()) - { - ReturnInitialRotationRate(); - } -} - -void UANS_ChangeRotationRate::ReturnInitialRotationRate() -{ - if (CharacterMovementComponent.IsValid()) - { - CharacterMovementComponent->RotationRate = InitialRotationRate; - } -} - -// UUHLCharacterMovementComponent* UANS_ChangeRotationRate::GetUHLCharacterMovementComponent(ACharacter* Character) -// { -// UCharacterMovementComponent* CharacterMovementComponent = Character->GetCharacterMovement(); -// if (CharacterMovementComponent) -// { -// UUHLCharacterMovementComponent* UHLCharacterMovementComponent = Cast(CharacterMovementComponent); -// if (UHLCharacterMovementComponent) -// { -// return UHLCharacterMovementComponent; -// } -// } -// return nullptr; -// } diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_EnableRootMotionZAxisMovement.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_EnableRootMotionZAxisMovement.cpp deleted file mode 100644 index d963994c..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_EnableRootMotionZAxisMovement.cpp +++ /dev/null @@ -1,121 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/ANS_EnableRootMotionZAxisMovement.h" - -#include "GameFramework/Character.h" -#include "GameFramework/CharacterMovementComponent.h" -#include "Animation/AnimInstance.h" -#include "Components/CapsuleComponent.h" -#include "Components/SkeletalMeshComponent.h" -#include "Utils/UHLTraceUtilsBPL.h" -#include "Utils/UnrealHelperLibraryBPL.h" -#include "DrawDebugHelpers.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(ANS_EnableRootMotionZAxisMovement) - -UANS_EnableRootMotionZAxisMovement::UANS_EnableRootMotionZAxisMovement(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - LandCheckBlendOutSettings = FMontageBlendSettings(); - LandCheckBlendOutSettings.Blend = 1.0f; - LandCheckBlendOutSettings.BlendMode = EMontageBlendMode::Inertialization; -} - -void UANS_EnableRootMotionZAxisMovement::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - ACharacter* BaseCharacter = Cast(MeshComp->GetOwner()); - if (!BaseCharacter) return; - - UCharacterMovementComponent* MovementComponent = BaseCharacter->GetCharacterMovement(); - InitialMovementMode = MovementComponent->MovementMode; - MovementComponent->SetMovementMode(MOVE_Flying); -} - -void UANS_EnableRootMotionZAxisMovement::NotifyEndOrBlendOut(USkeletalMeshComponent* MeshComp) -{ - Super::NotifyEndOrBlendOut(MeshComp); - - if (!MeshComp) return; - - ACharacter* BaseCharacter = Cast(MeshComp->GetOwner()); - if (!BaseCharacter) return; - - UCharacterMovementComponent* MovementComponent = BaseCharacter->GetCharacterMovement(); - if (MovementComponent->MovementMode == MOVE_Flying) - { - MovementComponent->SetMovementMode(MOVE_Falling); - } - - // 1) land до окончания, когда например запрыгиваем куда-то - - // а OnLanded в этом случае вообще будет работать, кмк - нет. - // Значит нужно чекать самостоятельно "land" и на MOVE_Falling переключать? - // UPD вообще не нужно ничо чекать, ANS должен закончится до/вовремя Land'а - // а значит никаких проблем с этим нет - // 2) ANS кончился а мы при этом не приземлились на землю и до земли далеко - // нужно Stop'ить montage, а для этого сделать sweep test капсулы вниз - if (bStopMontageIfLandCheckFails) - { - FVector CurrentLocation = BaseCharacter->GetActorLocation(); - FVector EndLocation = CurrentLocation + FVector(0.0f, 0.0f, -LandCheckDistance); - - FCollisionQueryParams CollisionParams; - CollisionParams.AddIgnoredActor(BaseCharacter); - // ignore all attached actors - TArray CharacterAttachedActors; - BaseCharacter->GetAttachedActors(CharacterAttachedActors, false, true); - - FHitResult HitResult; - // TODO use Sphere instead of capsule - bool bHasHit = UUHLTraceUtilsBPL::SweepCapsuleSingleByChannel( - BaseCharacter->GetWorld(), - HitResult, - CurrentLocation, - EndLocation, - BaseCharacter->GetCapsuleComponent()->GetScaledCapsuleRadius(), - BaseCharacter->GetCapsuleComponent()->GetScaledCapsuleHalfHeight(), - BaseCharacter->GetActorRotation().Quaternion(), - CollisionChannel, - CollisionParams, - FCollisionResponseParams::DefaultResponseParam, - bDebug, - 5.0f, - FColor::Red, - FColor::Yellow, - 0.2f - ); - - if (!bHasHit) - { - // TODO try stop specific montage - // const UAnimMontage* AnimMontage = CurrentAnimMontage.Get(); - // BaseCharacter->StopAnimMontage(); - FAnimMontageInstance* AnimMontage = BaseCharacter->GetRootMotionAnimMontageInstance(); - if (AnimMontage && AnimMontage->IsValid()) - { - AnimMontage->PushDisableRootMotion(); - AnimMontage->Stop(LandCheckBlendOutSettings, false); - } - else - { - UUnrealHelperLibraryBPL::DebugPrintString( - BaseCharacter->GetWorld(), - FString::Printf(TEXT("UANS_EnableRootMotionZAxisMovement::NotifyEndOrBlendOut on %s error root motion AnimMontage not found"), *BaseCharacter->GetName()) - ); - } - } - else - { - if (HitResult.IsValidBlockingHit() && bDebug) - { - DrawDebugString( - BaseCharacter->GetWorld(), HitResult.Location, FString::Printf(TEXT("Land check: %s"), - *HitResult.GetActor()->GetName()), nullptr, - FColor::Green, 5.0f, true, 1.0f - ); - } - } - } -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_MagnetTo.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_MagnetTo.cpp deleted file mode 100644 index 3198d700..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_MagnetTo.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/ANS_MagnetTo.h" - -#include "GameFramework/Character.h" -#include "Kismet/KismetMathLibrary.h" -#include "Components/SkeletalMeshComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(ANS_MagnetTo) - -void UANS_MagnetTo::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - // Speed = Distance / TotalDuration / 60; - BaseCharacter = Cast(MeshComp->GetOwner()); - - // FTimerHandle TimerHandle; - // MeshComp->GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &UANS_MagnetTo::TimerTick, 0.0f, true, -1); - - // GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &ABaseDestructibleActor::FinalDestruct, TimeToDisappear); -} - -void UANS_MagnetTo::NotifyTick(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyTick(MeshComp, Animation, FrameDeltaTime, EventReference); - - Alpha = FMath::Clamp(Alpha + FrameDeltaTime, 0, 1); - FVector NewLocation = BaseCharacter->GetActorLocation(); - float Delta = UKismetMathLibrary::Ease(0, Distance / 1000, Alpha, EEasingFunc::Linear); - NewLocation += BaseCharacter->GetActorForwardVector() * Delta; - BaseCharacter->SetActorLocation(NewLocation, true); - // BaseCharacter.Get()->GetCharacterMovement()->AddForce(BaseCharacter-> GetActorForwardVector() * Distance); -} - -void UANS_MagnetTo::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyEnd(MeshComp, Animation, EventReference); -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.cpp deleted file mode 100644 index af8883f6..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.cpp +++ /dev/null @@ -1,123 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.h" - -#include "GameFramework/PlayerController.h" -#include "Kismet/GameplayStatics.h" -#include "Engine/World.h" - -void UANS_SpawnAndSwitchPlayerCamera::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - if (!MeshComp || !CameraToSpawnClass) - { - return; - } - - // 1. Get the owning actor and its PlayerController - AActor* OwningActor = MeshComp->GetOwner(); - if (!OwningActor) - { - return; - } - - APlayerController* PC = Cast(OwningActor->GetInstigatorController()); - if (!PC) - { - // If the owning actor isn’t possessed by a PC, try another route - PC = UGameplayStatics::GetPlayerController(OwningActor->GetWorld(), PlayerControllerIndex); - } - if (!PC) - { - return; - } - - // 2. Store the previous view target (so we can return to it later) - PreviousViewTarget = PC->GetViewTarget(); - - // 3. Spawn the camera actor at the owner’s location (or at a specific socket) - FTransform SpawnTransform = OwningActor->GetActorTransform(); - if (AttachSocketName != NAME_None) - { - // If we want to attach to a socket/bone, get its world transform - if (MeshComp->DoesSocketExist(AttachSocketName)) - { - SpawnTransform = MeshComp->GetSocketTransform(AttachSocketName); - } - } - - FActorSpawnParameters SpawnParams; - SpawnParams.Owner = OwningActor; - SpawnParams.Instigator = Cast(OwningActor); - - SpawnedCameraInstance = Cast( - OwningActor->GetWorld()->SpawnActor( - CameraToSpawnClass, - SpawnTransform, - SpawnParams - ) - ); - - if (!SpawnedCameraInstance) - { - return; - } - - // Optionally, attach the spawned camera to the owner (so it follows) - if (AttachSocketName != NAME_None) - { - SpawnedCameraInstance->AttachToComponent( - MeshComp, - AttachRules.ToEngineRules(), - AttachSocketName - ); - } - - // 4. Blend to the spawned camera - PC->SetViewTargetWithBlend(SpawnedCameraInstance, BlendInTime, BlendInFunction); -} - -void UANS_SpawnAndSwitchPlayerCamera::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyEnd(MeshComp, Animation, EventReference); - - if (!MeshComp) - { - return; - } - - // 1. Try to get the same PlayerController we used before - AActor* OwningActor = MeshComp->GetOwner(); - if (!OwningActor) - { - return; - } - - APlayerController* PC = Cast(OwningActor->GetInstigatorController()); - if (!PC) - { - PC = UGameplayStatics::GetPlayerController(OwningActor->GetWorld(), 0); - } - if (!PC) - { - return; - } - - // 2. Blend back to the original view target if it’s still valid - if (PreviousViewTarget) - { - PC->SetViewTargetWithBlend(PreviousViewTarget, BlendOutTime, BlendOutFunction); - } - - // 3. Destroy the spawned camera actor - if (SpawnedCameraInstance) - { - SpawnedCameraInstance->SetLifeSpan(3); - SpawnedCameraInstance = nullptr; - } - - // 4. Clear the stored pointer - PreviousViewTarget = nullptr; -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_AllowCharacterRotation.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_AllowCharacterRotation.cpp deleted file mode 100644 index 543109b1..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_AllowCharacterRotation.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - - -#include "Animation/Notifies/ANS_UHL_AllowCharacterRotation.h" - -#include "GameFramework/Character.h" -#include "GameFramework/CharacterMovementComponent.h" - - -FString UANS_UHL_AllowCharacterRotation::GetNotifyName_Implementation() const -{ - // Base name - FString NotifyName = TEXT("AllowCharacterRotation"); - - // Optional rotation‐rate suffix - if (bChangeRotationRate) - { - NotifyName += FString::Printf( - TEXT(" + change RotationRate to Pitch=%.2f, Yaw=%.2f, Roll=%.2f"), - RotationRate.Pitch, - RotationRate.Yaw, - RotationRate.Roll - ); - } - - return NotifyName; -} - -void UANS_UHL_AllowCharacterRotation::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - ACharacter* Character = Cast(MeshComp->GetOwner()); - if (!Character) return; - - CharacterMovementComponent = Character->GetCharacterMovement(); - if (!CharacterMovementComponent.IsValid()) return; - - CharacterMovementComponent->bAllowPhysicsRotationDuringAnimRootMotion = true; - - if (bChangeRotationRate) - { - InitialRotationRate = CharacterMovementComponent->RotationRate; - CharacterMovementComponent->RotationRate = RotationRate; - } -} - -void UANS_UHL_AllowCharacterRotation::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - ReturnDefaults(); - - Super::NotifyEnd(MeshComp, Animation, EventReference); -} - -void UANS_UHL_AllowCharacterRotation::OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) -{ - ReturnDefaults(); -} - -void UANS_UHL_AllowCharacterRotation::ReturnDefaults() -{ - if (CharacterMovementComponent.IsValid()) - { - CharacterMovementComponent->bAllowPhysicsRotationDuringAnimRootMotion = false; - if (bChangeRotationRate) - { - CharacterMovementComponent->RotationRate = InitialRotationRate; - } - } -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_Base.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_Base.cpp deleted file mode 100644 index 0ed49ea3..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_Base.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/ANS_UHL_Base.h" -#include "Runtime/Engine/Classes/Animation/AnimMontage.h" -#include "Engine/World.h" -#include "Components/SkeletalMeshComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(ANS_UHL_Base) - -void UANS_UHL_Base::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference); - - const UAnimMontage* CurrentAnimMontage = EventReference.GetNotify()->GetLinkedMontage(); - - if (CurrentAnimMontage) - { - if (bUseOnMontageBlendingOut) - { - MeshComp->AnimScriptInstance->OnMontageBlendingOut.AddUniqueDynamic(this, &UANS_UHL_Base::OnMontageBlendingOut); - } - } -} - -void UANS_UHL_Base::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - Super::NotifyEnd(MeshComp, Animation, EventReference); - - if (ShouldUseExperimentalUHLFeatures()) - { - NotifyEndOrBlendOut(MeshComp); - } - - if (bUseOnMontageBlendingOut) - { - MeshComp->AnimScriptInstance->OnMontageBlendingOut.RemoveDynamic(this, &UANS_UHL_Base::OnMontageBlendingOut); - } -} - -/** Experimental **/ -void UANS_UHL_Base::NotifyEndOrBlendOut(USkeletalMeshComponent* MeshComp) -{ - if (!ShouldUseExperimentalUHLFeatures()) return; -} -/** ~Experimental **/ - -void UANS_UHL_Base::OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) -{ - if (!Montage) - { - return; - } - - if (ShouldUseExperimentalUHLFeatures()) - { - UObject* Outer = Montage->GetOuter(); - USkeletalMeshComponent* SkeletalMeshComponent = Cast(Outer); - if (SkeletalMeshComponent) - { - NotifyEndOrBlendOut(SkeletalMeshComponent); - } - } -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_DisableWalkOffLedges.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_DisableWalkOffLedges.cpp deleted file mode 100644 index f8cf6f20..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/ANS_UHL_DisableWalkOffLedges.cpp +++ /dev/null @@ -1,49 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/ANS_UHL_DisableWalkOffLedges.h" - -#include "Components/CapsuleComponent.h" -#include "GameFramework/Character.h" -#include "GameFramework/CharacterMovementComponent.h" - -void UANS_UHL_DisableWalkOffLedges::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) -{ - if (!MeshComp) return; - - ACharacter* OwnerChar = Cast(MeshComp->GetOwner()); - if (!OwnerChar) return; - - UCharacterMovementComponent* MoveComp = OwnerChar->GetCharacterMovement(); - if (!MoveComp) return; - - // Store original - bOriginalCanWalkOffLedges = MoveComp->bCanWalkOffLedges; - OriginalPerchRadius = MoveComp->PerchRadiusThreshold; - - // Apply new settings - MoveComp->bCanWalkOffLedges = false; - if (PerchRadiusThreshold >= 0.0f) - { - MoveComp->PerchRadiusThreshold = PerchRadiusThreshold; - } - else - { - MoveComp->PerchRadiusThreshold = OwnerChar->GetCapsuleComponent()->GetScaledCapsuleRadius(); - } -} - -void UANS_UHL_DisableWalkOffLedges::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - if (!MeshComp) return; - - ACharacter* OwnerChar = Cast(MeshComp->GetOwner()); - if (!OwnerChar) return; - - UCharacterMovementComponent* MoveComp = OwnerChar->GetCharacterMovement(); - if (!MoveComp) return; - - // Restore original if we stored them - MoveComp->bCanWalkOffLedges = bOriginalCanWalkOffLedges; - MoveComp->PerchRadiusThreshold = OriginalPerchRadius; -} diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_AttachActorWithUniqueId.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_AttachActorWithUniqueId.cpp deleted file mode 100644 index 8a516520..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_AttachActorWithUniqueId.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/AN_AttachActorWithUniqueId.h" - -#include "Components/SkeletalMeshComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AN_AttachActorWithUniqueId) - -#if WITH_EDITOR -void UAN_AttachActorWithUniqueId::PostEditChangeProperty( - struct FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.Property != nullptr && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED(UAN_AttachActorWithUniqueId, UniqueId)) - { - if (UAnimSequenceBase* AnimSeq = Cast(GetOuter())) - { - AnimSeq->Modify(); - } - } -} -#endif - -FString UAN_AttachActorWithUniqueId::GetNotifyName_Implementation() const -{ - return FString("Attach With UniqueId -> ") + UniqueId.ToString(); -} - -void UAN_AttachActorWithUniqueId::Notify( - USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, - const FAnimNotifyEventReference& EventReference) -{ - Super::Notify(MeshComp, Animation, EventReference); - - if (!MeshComp) return; - - AActor* OwnerActor = MeshComp->GetOwner(); - if (!OwnerActor) return; - - // 1) Load the class synchronously - UClass* ActorClass = ActorToAttach.LoadSynchronous(); - if (!ActorClass) - { - UE_LOG(LogTemp, Warning, TEXT("Failed to load ActorToSpawn!")); - return; - } - - FActorSpawnParameters ActorSpawnParameters; - ActorSpawnParameters.Owner = OwnerActor; - ActorSpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; - - AActor* SpawnedActor = MeshComp->GetWorld()->SpawnActor(ActorClass, - MeshComp->GetSocketTransform(SocketName), ActorSpawnParameters); - - if (!SpawnedActor) return; - - SpawnedActor->AttachToComponent(MeshComp, AttachmentRules.ToEngineRules(), SocketName); - SpawnedActor->Tags.Add(UniqueId); -} \ No newline at end of file diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_DetachActorWithUniqueId.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_DetachActorWithUniqueId.cpp deleted file mode 100644 index 7426bbf7..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_DetachActorWithUniqueId.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/AN_DetachActorWithUniqueId.h" - -#include "Components/SkeletalMeshComponent.h" -#include "Components/PrimitiveComponent.h" -#include "Components/ActorComponent.h" -#include "TimerManager.h" -#include "Utils/UnrealHelperLibraryBPL.h" - -#if WITH_EDITOR -void UAN_DetachActorWithUniqueId::PostEditChangeProperty( - struct FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.Property != nullptr && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED(UAN_DetachActorWithUniqueId, UniqueId)) - { - if (UAnimSequenceBase* AnimSeq = Cast(GetOuter())) - { - AnimSeq->Modify(); - } - } -} -#endif - -FString UAN_DetachActorWithUniqueId::GetNotifyName_Implementation() const -{ - return FString("Detach With UniqueId->") + UniqueId.ToString(); -} - -void UAN_DetachActorWithUniqueId::Notify( - USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, - const FAnimNotifyEventReference& EventReference) -{ - Super::Notify(MeshComp, Animation, EventReference); - - if (!MeshComp) return; - - AActor* OwnerActor = MeshComp->GetOwner(); - if (!OwnerActor) return; - - AActor* AttachedActor = UUnrealHelperLibraryBPL::FindAttachedActorByTag(OwnerActor, UniqueId); - if (!AttachedActor) return; - - AttachedActor->DetachFromActor(DetachmentRules.ToEngineRules()); - - // checking that physics enabled before AutoDestroy and it worth to create timer - if (bEnablePhysicsOnDetach && EnablePhysicsDelay < AutoDestroyDelay) - { - FTimerDelegate Delegate; - Delegate.BindLambda([AttachedActor]() - { - // TODO: improve detachment logic - TArray Comps = AttachedActor->K2_GetComponentsByClass(UPrimitiveComponent::StaticClass()); - for (UActorComponent* Comp : Comps) - { - if (UPrimitiveComponent* Prim = Cast(Comp)) - { - Prim->SetCollisionProfileName(TEXT("PhysicsActor")); - Prim->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); - Prim->SetSimulatePhysics(true); - // Prim->SetEnableGravity(true); - // // ensure it has a physics‐friendly collision profile - // Prim->SetCollisionProfileName(TEXT("PhysicsActor")); - // Prim->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); - // - // // turn on physics and wake it up - // Prim->SetSimulatePhysics(true); - // Prim->WakeAllRigidBodies(); - - // 3) (Optional) give it a little kick - const FVector Impulse = AttachedActor->GetActorForwardVector() * 200.0f - + FVector::UpVector * 100.0f; - Prim->AddImpulse(Impulse, NAME_None, /*bVelChange=*/ true); - } - } - }); - MeshComp->GetWorld()->GetTimerManager().SetTimer(TimerHandle, Delegate, EnablePhysicsDelay, false); - } - - if (bAutoDestroy) - { - AttachedActor->SetLifeSpan(AutoDestroyDelay); - } -} \ No newline at end of file diff --git a/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_UHL_Base.cpp b/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_UHL_Base.cpp deleted file mode 100644 index cc5d6c25..00000000 --- a/Source/UnrealHelperLibrary/Private/Animation/Notifies/AN_UHL_Base.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Animation/Notifies/AN_UHL_Base.h" -#include "Components/SkeletalMeshComponent.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(AN_UHL_Base) - -void UAN_UHL_Base::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) -{ - OnNotified.Broadcast(MeshComp); - - Super::Notify(MeshComp, Animation, EventReference); -} diff --git a/Source/UnrealHelperLibrary/Private/Core/UHLGameplayTags.cpp b/Source/UnrealHelperLibrary/Private/Core/UHLGameplayTags.cpp deleted file mode 100644 index 1569b38b..00000000 --- a/Source/UnrealHelperLibrary/Private/Core/UHLGameplayTags.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Core/UHLGameplayTags.h" - -namespace UHLGameplayTags -{ - UE_DEFINE_GAMEPLAY_TAG(TAG_Gameplay_AbilityInputBlocked, "Gameplay.AbilityInputBlocked"); - UE_DEFINE_GAMEPLAY_TAG(TAG_UHL_Debug_CheckGASGameplayTagsOnActor, "UHL.Debug.CheckGASGameplayTagsOnActor"); - - // Abilities - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_Abilities_Character_GlobalTimeDilation, "UHL.Abilities.Character.GlobalTimeDilation", ""); - - // AbilityInputCache - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_AbilityInputCache_Catching, "UHL.AbilityInputCache.Catching", "Opened for catching actions to AbilityInputCache"); - - // Debug Categories - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem, "UHL.DebugCategory.AbilitySystem", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Attributes, "UHL.DebugCategory.AbilitySystem.Attributes", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Effects, "UHL.DebugCategory.AbilitySystem.Effects", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_Abilities, "UHL.DebugCategory.AbilitySystem.Abilities", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_DebugBasicHUD, "UHL.DebugCategory.AbilitySystem.DebugBasicHUD", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_AbilitySystem_DebugAbilityTags, "UHL.DebugCategory.AbilitySystem.DebugAbilityTags", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem, "UHL.DebugCategory.InputSystem.EnhancedInputSystem", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_InputSystem_AbilityInputCache, "UHL.DebugCategory.InputSystem.AbilityInputCache", ""); - UE_DEFINE_GAMEPLAY_TAG_COMMENT(TAG_UHL_DebugCategory_Collisions, "UHL.DebugCategory.Collisions", ""); - - // Errors - UE_DEFINE_GAMEPLAY_TAG(TAG_Error, "Error"); -} - diff --git a/Source/UnrealHelperLibrary/Private/Development/UHLSettings.cpp b/Source/UnrealHelperLibrary/Private/Development/UHLSettings.cpp deleted file mode 100644 index b2df5850..00000000 --- a/Source/UnrealHelperLibrary/Private/Development/UHLSettings.cpp +++ /dev/null @@ -1,6 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Development/UHLSettings.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLSettings) \ No newline at end of file diff --git a/Source/UnrealHelperLibrary/Private/Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.cpp b/Source/UnrealHelperLibrary/Private/Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.cpp deleted file mode 100644 index 4e028319..00000000 --- a/Source/UnrealHelperLibrary/Private/Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.cpp +++ /dev/null @@ -1,117 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.h" - -#include "GameFramework/Character.h" -#include "Development/UHLSettings.h" -#include "Kismet/GameplayStatics.h" -#include "Engine/World.h" -#include "TimerManager.h" - -void UEnemyTickOptimizerSubsystem::Initialize(FSubsystemCollectionBase& Collection) -{ - Super::Initialize(Collection); - - const UUHLSettings* UHLSettings = GetDefault(); - Settings = UHLSettings->EnemyTickOptimizerSubsystemSettings; - - if (Settings.bEnable) - { - // Set up a timer to call UpdateTickIntervals every 0.5 seconds - GetWorld()->GetTimerManager().SetTimer( - TickOptimizerTimerHandle, - this, - &UEnemyTickOptimizerSubsystem::UpdateTickIntervals, - Settings.UpdateInterval, - true - ); - } -} - -void UEnemyTickOptimizerSubsystem::Deinitialize() -{ - // Clear the timer when the subsystem is shut down - GetWorld()->GetTimerManager().ClearTimer(TickOptimizerTimerHandle); - - Super::Deinitialize(); -} - -void UEnemyTickOptimizerSubsystem::RegisterEnemy(ACharacter* Enemy) -{ - if (Enemy && !RegisteredEnemies.Contains(Enemy)) - { - RegisteredEnemies.Add(Enemy); - } -} - -void UEnemyTickOptimizerSubsystem::UnregisterEnemy(ACharacter* Enemy) -{ - RegisteredEnemies.Remove(Enemy); -} - -void UEnemyTickOptimizerSubsystem::UpdateTickIntervals() -{ - // Get the player character - ACharacter* PlayerCharacter = UGameplayStatics::GetPlayerCharacter(GetWorld(), 0); - if (!PlayerCharacter) - { - return; - } - - FVector PlayerLocation = PlayerCharacter->GetActorLocation(); - - // Iterate through all registered enemies and adjust their tick intervals - for (ACharacter* Enemy : RegisteredEnemies) - { - if (Enemy) - { - float Distance = FVector::Dist(PlayerLocation, Enemy->GetActorLocation()); - float TickInterval; - - if (Distance < Settings.CloseDistance) - { - TickInterval = Settings.CloseTickInterval; // e.g., 0.0f (every frame) - } - else if (Distance < Settings.MediumDistance) - { - TickInterval = Settings.MediumTickInterval; // e.g., 0.1f - } - else if (Distance < Settings.FarDistance) - { - TickInterval = Settings.FarTickInterval; // e.g., 0.5f - } - else - { - TickInterval = Settings.DefaultEnemyTickInterval; // e.g., 1.0f - } - - if (Settings.bDontTickIfNotRenderedRecently - && !Enemy->WasRecentlyRendered() - && Distance > Settings.MediumDistance) - { - TickInterval = Settings.RecentlyNotRenderedTickInterval; - } - - // Set tick interval for the enemy actor - Enemy->SetActorTickInterval(TickInterval); - // Enemy->GetMesh()->SetComponentTickInterval(TickInterval); - if (Settings.bSetTickOnActorComponentsAlso) - { - for (UActorComponent* Component : Enemy->GetComponents()) - { - if (Component->IsComponentTickEnabled()) - { - Component->SetComponentTickInterval(TickInterval); - } - } - } - - // Set tick interval for the enemy's controller, if it exists - if (AController* Controller = Enemy->GetController()) - { - Controller->PrimaryActorTick.TickInterval = TickInterval; - } - } - } -} \ No newline at end of file diff --git a/Source/UnrealHelperLibrary/Private/UI/UHLHUD.cpp b/Source/UnrealHelperLibrary/Private/UI/UHLHUD.cpp deleted file mode 100644 index c171b47d..00000000 --- a/Source/UnrealHelperLibrary/Private/UI/UHLHUD.cpp +++ /dev/null @@ -1,49 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "UI/UHLHUD.h" - -#include "Engine/World.h" -#include "Blueprint/WidgetLayoutLibrary.h" - -void AUHLHUD::DrawHUD() -{ - Super::DrawHUD(); - - if (!bEnabledDrawDebug) return; - - FVector2D ViewportSize = UWidgetLayoutLibrary::GetViewportSize(GetWorld()); - FVector2D ViewportSizeOffset = ViewportSize / 2; - - // FVector2f Test; - // UUnrealHelperLibraryBPL::DrawDebugCrossHair(GetWorld(), 100.0f, 3.0f, 0.0f, Test, FLinearColor::Red); - - for (const FLineInfo& LineInfo : LineInfos) - { - FVector2D StartPos = LineInfo.Start; - FVector2D EndPos = LineInfo.End; - if (LineInfo.bRelativeToViewportCenter) - { - StartPos += ViewportSizeOffset; - EndPos += ViewportSizeOffset; - } - DrawLine( - StartPos.X, StartPos.Y, - EndPos.X, EndPos.Y, - LineInfo.Color, - LineInfo.LineThickness - ); - FVector2D TextPos = (EndPos - StartPos) + ViewportSizeOffset; - - DrawText(LineInfo.Text, FColor::Red, TextPos.X, TextPos.Y); - } - LineInfos.RemoveAll([=](const FLineInfo& LineInfo) - { - return !LineInfo.bPersistent; - }); -} - -void AUHLHUD::AddOrUpdateLineInfoToDrawNextTick(FLineInfo LineInfo_In) -{ - LineInfos.Add(LineInfo_In); -} \ No newline at end of file diff --git a/Source/UnrealHelperLibrary/Private/UnrealHelperLibrary.cpp b/Source/UnrealHelperLibrary/Private/UnrealHelperLibrary.cpp deleted file mode 100644 index 6e99bb9a..00000000 --- a/Source/UnrealHelperLibrary/Private/UnrealHelperLibrary.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "UnrealHelperLibrary.h" - -#include "Misc/Paths.h" -#include "GameplayTagsManager.h" - -#define LOCTEXT_NAMESPACE "FUnrealHelperLibraryModule" - -DEFINE_LOG_CATEGORY(LogUnrealHelperLibrary); - -void FUnrealHelperLibraryModule::StartupModule() -{ - UGameplayTagsManager& TagsManager = UGameplayTagsManager::Get(); - // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module - TagsManager.AddTagIniSearchPath(FPaths::ProjectPluginsDir() / TEXT("UnrealHelperLibrary/Config/Tags")); - - // TArray> OutTagArray; - // TArray OutPaths; - // TagsManager.GetTagSourceSearchPaths(OutPaths); - // TagsManager.GetAllTagsFromSource(FApp::GetProjectName(), OutTagArray); - // // GameplayTagsManager.FindTagsWithSource() - // - // // TODO find MainModule name - // FString Test1 = FApp::GetName(); - // FString Test2 = FApp::GetProjectName(); - // FString Test3 = FApp::GetInstanceName(); - // FString Test6 = FModuleManager::Get().GetGameBinariesDirectory(); - // - // // TArray OutModuleStatuses; - // // FModuleManager::Get().QueryModules(OutModuleStatuses); - // - // // FModuleStatus* MyGameModule = OutModuleStatuses.FindByPredicate([](const FModuleStatus& ModuleStatusStatus) { - // // return ModuleStatusStatus.bIsGameModule && ModuleStatusStatus.bIsLoaded; - // // }); - // - // // Ask the module manager for a list of currently-loaded gameplay modules - // UGameplayTagsManager::Get().OnLastChanceToAddNativeTags().AddLambda([this]() - // { - // UGameplayTagsManager& TagsManager2 = UGameplayTagsManager::Get(); - // - // // StaticImpl.RootTag = UGameplayTagsManager::Get().AddNativeGameplayTag(TagT::GetRootTagStr()); - // TArray GameModulesNames; - // TArray ModuleStatuses; - // FModuleManager::Get().QueryModules(ModuleStatuses); - // - // for (FModuleStatus& ModuleStatus : ModuleStatuses) - // { - // // We only care about game modules that are currently loaded - // if (ModuleStatus.bIsLoaded && ModuleStatus.bIsGameModule) - // { - // GameModulesNames.Add(MoveTemp(ModuleStatus.Name)); - // } - // } - // - // for (const FString& GameModulesName : GameModulesNames) - // { - // // GameplayTagsManager.FindTagsWithSource(FString("Bogatyr"), NativeTags); - // TArray NativeTags; - // TagsManager2.FindTagsWithSource(GameModulesName, NativeTags); - // - // for (FGameplayTag& NativeTag : NativeTags) - // { - // FName NativeTagNam = NativeTag.GetTagName(); - // // FNativeGameplayTag* Test = new FNativeGameplayTag(FName("UnrealHelperLibrary"), FName("UnrealHelperLibrary"), NativeTagNam, "", ENativeGameplayTagToken::PRIVATE_USE_MACRO_INSTEAD); - // // TagsManager2.AddNativeGameplayTag(Test); - // TagsManager2.AddNativeGameplayTag(NativeTagNam, ""); - // } - // } - // FName TestTag = "Test123.Test322.Test123"; - // TagsManager2.AddNativeGameplayTag(TestTag, ""); - // // UGameplayTagsManager::Get().DoneAddingNativeTags(); - // }); - // - // TagsManager.ConstructGameplayTagTree(); - // TagsManager.LoadGameplayTagTables(); - - // for (const FGameplayTag& Tag : NativeTags) - // { - // if (IsTagOnlyAvailableFromExcludedSources(Manager, Tag, ExcludedPlugins)) - // { - // FAssetIdentifier TagId = FAssetIdentifier(FGameplayTag::StaticStruct(), Tag.GetTagName()); - // AssetIdsInPlugin.Add(TagId); - // } - // } - // } -} - -void FUnrealHelperLibraryModule::ShutdownModule() -{ - // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, - // we call this function before unloading the module. -} - -#undef LOCTEXT_NAMESPACE - -IMPLEMENT_MODULE(FUnrealHelperLibraryModule, UnrealHelperLibrary) diff --git a/Source/UnrealHelperLibrary/Private/Utils/UHLLoadingUtilLibrary.cpp b/Source/UnrealHelperLibrary/Private/Utils/UHLLoadingUtilLibrary.cpp deleted file mode 100644 index 3efdc8be..00000000 --- a/Source/UnrealHelperLibrary/Private/Utils/UHLLoadingUtilLibrary.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Utils/UHLLoadingUtilLibrary.h" - -#include "Engine/CoreSettings.h" -#include "Engine/Engine.h" -#include "Engine/World.h" -#include "GameFramework/WorldSettings.h" -#include "Misc/AssertionMacros.h" -#include "UObject/Object.h" - -#include - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLLoadingUtilLibrary) - -bool UUHLLoadingUtilLibrary::HasCapturedDefaults = false; -float UUHLLoadingUtilLibrary::DefaultLevelStreamingComponentsRegistrationGranularity; -float UUHLLoadingUtilLibrary::DefaultLevelStreamingActorsUpdateTimeLimit; -float UUHLLoadingUtilLibrary::DefaultAsyncLoadingTimeLimit; - -void UUHLLoadingUtilLibrary::ApplyDefaultPriorityLoading(const UObject* WorldContextObject) -{ - // Call first, just in case defaults have not been captured yet - CaptureDefaultLoadingSettings(); - ApplyCustomPriorityLoading(WorldContextObject, false, DefaultAsyncLoadingTimeLimit, DefaultLevelStreamingActorsUpdateTimeLimit); -} - -void UUHLLoadingUtilLibrary::ApplyStreamingPriorityLoading(const UObject* WorldContextObject) -{ - ApplyCustomPriorityLoading(WorldContextObject, false, 10.0f, 10.0f); -} - -void UUHLLoadingUtilLibrary::ApplyHighestPriorityLoading(const UObject* WorldContextObject) -{ - ApplyCustomPriorityLoading(WorldContextObject, true, FLT_MAX, FLT_MAX); -} - -void UUHLLoadingUtilLibrary::ApplyCustomPriorityLoading(const UObject* WorldContextObject, bool UseHighPriorityLoading, float MaxAsyncLoadingMilliSeconds, float MaxActorUpdateMilliSeconds) -{ - CaptureDefaultLoadingSettings(); - - if (!ensure(WorldContextObject != nullptr)) - { - return; - } - - UWorld* World = WorldContextObject->GetWorld(); - - if (!ensure(World != nullptr)) - { - return; - } - - AWorldSettings* WorldSettings = World->GetWorldSettings(); - - if (!ensure(WorldSettings != nullptr)) - { - return; - } - - WorldSettings->bHighPriorityLoadingLocal = UseHighPriorityLoading; - GLevelStreamingActorsUpdateTimeLimit = MaxActorUpdateMilliSeconds; - GLevelStreamingComponentsRegistrationGranularity = DefaultLevelStreamingComponentsRegistrationGranularity; - GAsyncLoadingUseFullTimeLimit = UseHighPriorityLoading; - GAsyncLoadingTimeLimit = MaxAsyncLoadingMilliSeconds; -} - -void UUHLLoadingUtilLibrary::FlushLevelStreaming(const UObject* WorldContextObject) -{ - if (!ensure(WorldContextObject != nullptr)) - { - return; - } - - UWorld* World = WorldContextObject->GetWorld(); - - if (!ensure(World != nullptr)) - { - return; - } - - GEngine->BlockTillLevelStreamingCompleted(World); -} - -void UUHLLoadingUtilLibrary::ForceGarbageCollection() -{ -#if WITH_EDITOR - GEngine->ForceGarbageCollection(false); -#else - GEngine->ForceGarbageCollection(true); -#endif -} - -void UUHLLoadingUtilLibrary::CaptureDefaultLoadingSettings() -{ - if (!HasCapturedDefaults) - { - DefaultLevelStreamingComponentsRegistrationGranularity = GLevelStreamingComponentsRegistrationGranularity; - DefaultLevelStreamingActorsUpdateTimeLimit = GLevelStreamingActorsUpdateTimeLimit; - DefaultAsyncLoadingTimeLimit = GAsyncLoadingTimeLimit; - HasCapturedDefaults = true; - } -} diff --git a/Source/UnrealHelperLibrary/Private/Utils/UHLTraceUtilsBPL.cpp b/Source/UnrealHelperLibrary/Private/Utils/UHLTraceUtilsBPL.cpp deleted file mode 100644 index 310eef43..00000000 --- a/Source/UnrealHelperLibrary/Private/Utils/UHLTraceUtilsBPL.cpp +++ /dev/null @@ -1,178 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - - -#include "Utils/UHLTraceUtilsBPL.h" -#include "Engine/World.h" -#include "Engine/EngineTypes.h" -#include "Engine/HitResult.h" -#include "DrawDebugHelpers.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UHLTraceUtilsBPL) - -bool UUHLTraceUtilsBPL::SweepCapsuleSingleByChannel(const UWorld* World, FHitResult& OutHit, const FVector& Start, - const FVector& End, float Radius, float HalfHeight, - const FQuat& Rot, ECollisionChannel TraceChannel, - const FCollisionQueryParams& Params, - const FCollisionResponseParams& ResponseParam, bool bDrawDebug, - float DrawTime, - FColor TraceColor, FColor HitColor, float FailDrawTime) -{ - bool bResult = false; - - FailDrawTime = FailDrawTime == -1.0f ? DrawTime : FailDrawTime; - - FCollisionShape CollisionShape = FCollisionShape::MakeCapsule(Radius, HalfHeight); - bResult = World->SweepSingleByChannel(OutHit, Start, End, Rot, TraceChannel, CollisionShape, Params, ResponseParam); - -#if ENABLE_DRAW_DEBUG - if (bDrawDebug) - { - DrawDebugCapsule(World, Start, HalfHeight, Radius, Rot, TraceColor, false, bResult ? DrawTime : FailDrawTime); - DrawDebugCapsule(World, End, HalfHeight, Radius, Rot, TraceColor, false, bResult ? DrawTime : FailDrawTime); - DrawDebugLine(World, Start, End, TraceColor, false, bResult ? DrawTime : FailDrawTime); - - if (bResult) - { - float Thickness = FMath::Clamp(HalfHeight / 100, 1.25, 5); - // UUnrealHelperLibraryBPLibrary::DebugPrintStrings(FString::Printf(TEXT("%f"), Thickness)); - DrawDebugPoint(World, OutHit.ImpactPoint, 10.0f, HitColor, false, DrawTime, 0); - DrawDebugCapsule(World, OutHit.Location, HalfHeight, Radius, Rot, TraceColor, false, DrawTime, 0, Thickness); - } - } -#endif - - return bResult; -} - -bool UUHLTraceUtilsBPL::SweepCapsuleMultiByChannel(const UWorld* World, TArray& OutHits, const FVector& Start, const FVector& End, float Radius, float HalfHeight, const FQuat& Rot, - ECollisionChannel TraceChannel, const FCollisionQueryParams& Params, const FCollisionResponseParams& ResponseParam, bool bDrawDebug, float DrawTime, FColor TraceColor, FColor HitColor, float FailDrawTime) -{ - bool bResult = false; - - FailDrawTime = FailDrawTime == -1.0f ? DrawTime : FailDrawTime; - - FCollisionShape CollisionShape = FCollisionShape::MakeCapsule(Radius, HalfHeight); - bResult = World->SweepMultiByChannel(OutHits, Start, End, Rot, TraceChannel, CollisionShape, Params, ResponseParam); - -#if ENABLE_DRAW_DEBUG - if (bDrawDebug) - { - DrawDebugCapsule(World, Start, HalfHeight, Radius, Rot, TraceColor, false, bResult ? DrawTime : FailDrawTime); - DrawDebugCapsule(World, End, HalfHeight, Radius, Rot, TraceColor, false, bResult ? DrawTime : FailDrawTime); - DrawDebugLine(World, Start, End, TraceColor, false, bResult ? DrawTime : FailDrawTime); - - if (bResult) - { - float Thickness = FMath::Clamp(HalfHeight / 100, 1.25, 5); - for (const FHitResult& OutHit : OutHits) - { - // UUnrealHelperLibraryBPLibrary::DebugPrintStrings(FString::Printf(TEXT("%f"), Thickness)); - DrawDebugPoint(World, OutHit.ImpactPoint, 10.0f, HitColor, false, DrawTime, 0); - DrawDebugCapsule(World, OutHit.Location, HalfHeight, Radius, Rot, TraceColor, false, DrawTime, 0, Thickness); - } - } - } -#endif - - return bResult; -} - -bool UUHLTraceUtilsBPL::SweepCapsuleMultiByProfile(const UWorld* World, TArray& OutHits, const FVector& Start, - const FVector& End, float Radius, float HalfHeight, - const FQuat& Rot, FName ProfileName, - const FCollisionQueryParams& Params, - bool bDrawDebug, float DrawTime, - FColor TraceColor, FColor HitColor) -{ - bool bResult = false; - - FCollisionShape CollisionShape = FCollisionShape::MakeCapsule(Radius, HalfHeight); - bResult = World->SweepMultiByProfile(OutHits, Start, End, Rot, ProfileName, CollisionShape, Params); - -// TODO make debug, dont have time -// #if ENABLE_DRAW_DEBUG -// if (bDrawDebug) -// { -// DrawDebugCapsule(World, Start, HalfHeight, Radius, Rot, TraceColor, false, DrawTime); -// DrawDebugCapsule(World, End, HalfHeight, Radius, Rot, TraceColor, false, DrawTime); -// DrawDebugLine(World, Start, End, TraceColor, false, DrawTime); -// -// if (bResult) -// { -// DrawDebugCapsule(World, OutHit.Location, HalfHeight, Radius, Rot, HitColor, false, DrawTime); -// DrawDebugPoint(World, OutHit.ImpactPoint, 10.0f, HitColor, false, DrawTime); -// } -// } -// #endif - - return bResult; -} - -bool UUHLTraceUtilsBPL::SweepSphereSingleByChannel(const UWorld* World, FHitResult& OutHit, const FVector& Start, - const FVector& End, float Radius, ECollisionChannel TraceChannel, const FCollisionQueryParams& Params, - const FCollisionResponseParams& ResponseParam, bool bDrawDebug, float DrawTime, FColor TraceColor, FColor HitColor) -{ - bool bResult = false; - - FCollisionShape CollisionShape = FCollisionShape::MakeSphere(Radius); - bResult = World->SweepSingleByChannel(OutHit, Start, End, FQuat::Identity, TraceChannel, CollisionShape, Params, ResponseParam); - -#if ENABLE_DRAW_DEBUG - if (bDrawDebug) - { - FVector DebugCenter = (Start + End) * 0.5f; - FVector TraceVector = End - Start; - float DebugCapsuleHalfHeight = TraceVector.Size() * 0.5f; - - FQuat DebugCapsuleRotation = FRotationMatrix::MakeFromZ(TraceVector).ToQuat(); - - DrawDebugCapsule(World, DebugCenter, DebugCapsuleHalfHeight, Radius, DebugCapsuleRotation, TraceColor, false, DrawTime); - - if (bResult) - { - DrawDebugSphere(World, OutHit.Location, Radius, 16, HitColor, false, DrawTime); - DrawDebugPoint(World, OutHit.ImpactPoint, 10.0f, HitColor, false, DrawTime); - } - } -#endif - - return bResult; -} - -bool UUHLTraceUtilsBPL::OverlapCapsuleAnyByProfile(const UWorld* World, const FVector& Pos, float Radius, float HalfHeight, - FQuat Rot, FName ProfileName, const FCollisionQueryParams& QueryParams, bool bDrawDebug, float DrawTime, - FColor HitColor) -{ - bool bResult = false; - - FCollisionShape CollisionShape = FCollisionShape::MakeCapsule(Radius, HalfHeight); - bResult = World->OverlapAnyTestByProfile(Pos, Rot, ProfileName, CollisionShape, QueryParams); - -#if ENABLE_DRAW_DEBUG - if (bDrawDebug && bResult) - { - DrawDebugCapsule(World, Pos, HalfHeight, Radius, Rot, HitColor, false, DrawTime); - } -#endif - - return bResult; -} - -bool UUHLTraceUtilsBPL::OverlapBlockingTestByProfile(const UWorld* World, const FVector& Pos, float Radius, float HalfHeight, - FQuat Rot, FName ProfileName, const FCollisionQueryParams& QueryParams, bool bDrawDebug, float DrawTime, - FColor HitColor) -{ - bool bResult = false; - - FCollisionShape CollisionShape = FCollisionShape::MakeCapsule(Radius, HalfHeight); - bResult = World->OverlapBlockingTestByProfile(Pos, Rot, ProfileName, CollisionShape, QueryParams); - -#if ENABLE_DRAW_DEBUG - if (bDrawDebug && bResult) - { - DrawDebugCapsule(World, Pos, HalfHeight, Radius, Rot, HitColor, false, DrawTime); - } -#endif - - return bResult; -} diff --git a/Source/UnrealHelperLibrary/Private/Utils/UnrealHelperLibraryBPL.cpp b/Source/UnrealHelperLibrary/Private/Utils/UnrealHelperLibraryBPL.cpp deleted file mode 100644 index 0e6944bc..00000000 --- a/Source/UnrealHelperLibrary/Private/Utils/UnrealHelperLibraryBPL.cpp +++ /dev/null @@ -1,1241 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#include "Utils/UnrealHelperLibraryBPL.h" - -#include "KismetAnimationLibrary.h" -#include "Components/CapsuleComponent.h" -#include "Engine/SCS_Node.h" -#include "Engine/SimpleConstructionScript.h" -#include "GameFramework/Character.h" -#include "Kismet/GameplayStatics.h" -#include "Kismet/KismetMathLibrary.h" -#include "Kismet/KismetSystemLibrary.h" -#include "Misc/ConfigCacheIni.h" -#include "Animation/AnimMontage.h" -#include "DrawDebugHelpers.h" -#include "NavigationSystem.h" -#include "Blueprint/SlateBlueprintLibrary.h" -#include "Blueprint/WidgetLayoutLibrary.h" -#include "Components/Widget.h" -#include "Engine/World.h" -#include "Engine/GameInstance.h" -#include "UI/UHLHUD.h" - -#include UE_INLINE_GENERATED_CPP_BY_NAME(UnrealHelperLibraryBPL) - -static const int32 DEPTH_PRIORITY = -1; - -FString UUnrealHelperLibraryBPL::GetProjectVersion() -{ - FString ProjectVersion; - GConfig->GetString(TEXT("/Script/EngineSettings.GeneralProjectSettings"), TEXT("ProjectVersion"), ProjectVersion, GGameIni); - return ProjectVersion; -} - -void UUnrealHelperLibraryBPL::DebugPrintStrings(const FString& A, const FString& B, const FString& C, const FString& D, const FString& E, const FString& F, const FString& G, const FString& H, - const FString& I, const FString& J, float Duration, const FName Key, const bool bEnabled) -{ - FString StringResult; - StringResult.Empty(A.Len() + B.Len() + C.Len() + D.Len() + E.Len() + 1); // adding one for the string terminator - StringResult += A; - StringResult += B; - StringResult += C; - StringResult += D; - StringResult += E; - - if (!bEnabled) - return; - - UKismetSystemLibrary::PrintString(nullptr, StringResult, true, true, FLinearColor(0, 0.66, 1), Duration, Key); -} - -void UUnrealHelperLibraryBPL::DebugPrintString(const UObject* WorldContextObject, const FString& A, float Duration, const FName Key, const bool bEnabled) -{ - FString StringResult; - StringResult.Empty(A.Len() + 1); // adding one for the string terminator - - if (!bEnabled) - return; - - UKismetSystemLibrary::PrintString(WorldContextObject, StringResult, true, true, FLinearColor(0, 0.66, 1), Duration, Key); -} - -void UUnrealHelperLibraryBPL::DrawDebugBar() {} - -float UUnrealHelperLibraryBPL::GetAnimMontageSectionLengthByName(UAnimMontage* AnimMontage, FName SectionName) -{ - float Result = -1; - - if (!IsValid(AnimMontage)) - return Result; - int32 SectionIdx = SectionName.IsNone() ? 0 : AnimMontage->GetSectionIndex(SectionName); - - if (SectionIdx == INDEX_NONE) - return Result; - DebugPrintString(AnimMontage->GetWorld(), FString::Printf(TEXT("Section %s %i"), *SectionName.ToString(), SectionIdx), Result); - Result = AnimMontage->GetSectionLength(SectionIdx); - - return Result; -} - -EUHLDirection UUnrealHelperLibraryBPL::GetOppositeDirection(EUHLDirection Direction_In) -{ - switch (Direction_In) - { - case EUHLDirection::Left: - return EUHLDirection::Right; - case EUHLDirection::Right: - return EUHLDirection::Left; - case EUHLDirection::Front: - return EUHLDirection::Back; - case EUHLDirection::Back: - return EUHLDirection::Front; - default: - return EUHLDirection::None; - } -} - -TArray UUnrealHelperLibraryBPL::GetNamesOfComponentsOnObject(UObject* OwnerObject, UClass* Class) -{ - TArray Result = {}; - - UBlueprintGeneratedClass* BlueprintGeneratedClass = - OwnerObject->IsA() ? Cast(OwnerObject) : Cast(OwnerObject->GetClass()); - if (!BlueprintGeneratedClass) - return Result; - - TArray DefaultObjectSubobjects; - BlueprintGeneratedClass->GetDefaultObjectSubobjects(DefaultObjectSubobjects); - - // Search for ActorComponents created from C++ - for (UObject* DefaultSubObject : DefaultObjectSubobjects) - { - if (DefaultSubObject->IsA(Class)) - { - Result.Add(DefaultSubObject->GetName()); - } - } - - // Search for ActorComponents created in Blueprint - for (USCS_Node* Node : BlueprintGeneratedClass->SimpleConstructionScript->GetAllNodes()) - { - if (Node->ComponentClass->IsChildOf(Class)) - { - Result.Add(Node->GetVariableName().ToString()); - } - } - - return Result; -} - -float UUnrealHelperLibraryBPL::RelativeAngleToActor( - AActor* ActorRelativeToWhomAngleCalculated, AActor* TargetActor, bool bRelativeToActorBack, const bool bDebug, const float DebugLifetime, const FLinearColor DebugColor) -{ - if (!IsValid(ActorRelativeToWhomAngleCalculated) || !IsValid(TargetActor)) - return FLOAT_ERROR; - - float Multiplier = bRelativeToActorBack ? 1 : -1; - float Result = UKismetAnimationLibrary::CalculateDirection( - ActorRelativeToWhomAngleCalculated->GetActorLocation() - TargetActor->GetActorLocation(), (ActorRelativeToWhomAngleCalculated->GetActorForwardVector() * Multiplier).ToOrientationRotator()); - - if (bDebug) - { - UWorld* DebugWorld = ActorRelativeToWhomAngleCalculated->GetWorld(); - FColor DebugCol = DebugColor.ToFColor(true); - FVector LineStart = ActorRelativeToWhomAngleCalculated->GetActorLocation(); - FVector LineEnd = TargetActor->GetActorLocation(); - FVector TextLocation = GetCenterPointBetweenVectors(ActorRelativeToWhomAngleCalculated->GetWorld(), LineStart, LineEnd); - - DrawDebugString(DebugWorld, TextLocation, FString::Printf(TEXT("RelativeAngle: %.2f°"), Result), 0, DebugCol, DebugLifetime, true, 1.0f); - DrawDebugDirectionalArrow(DebugWorld, LineStart, LineEnd, RELATIVE_POINT_ARROW_SIZE, DebugCol, true, DebugLifetime, DEPTH_PRIORITY, 2); - } - - return Result; -} - -float UUnrealHelperLibraryBPL::RelativeAngleToVector(AActor* ActorRelativeToWhomAngleCalculated, FVector TargetVector) -{ - if (!IsValid(ActorRelativeToWhomAngleCalculated)) - return FLOAT_ERROR; - return UKismetAnimationLibrary::CalculateDirection( - ActorRelativeToWhomAngleCalculated->GetActorLocation() - TargetVector, (ActorRelativeToWhomAngleCalculated->GetActorForwardVector() * -1).ToOrientationRotator()); -} - -float UUnrealHelperLibraryBPL::RelativeAngleVectorToVector(FVector VectorRelativeToWhomAngleCalculated, FVector TargetVector) -{ - return UKismetAnimationLibrary::CalculateDirection(VectorRelativeToWhomAngleCalculated - TargetVector, (VectorRelativeToWhomAngleCalculated * -1).ToOrientationRotator()); -} - -EUHLDirection UUnrealHelperLibraryBPL::GetHitReactDirection(const FVector& SourceActorLocation, const AActor* TargetActor) -{ - const FVector& ActorLocation = TargetActor->GetActorLocation(); - // PointPlaneDist is super cheap - 1 vector subtraction, 1 dot product. - float DistanceToFrontBackPlane = FVector::PointPlaneDist(SourceActorLocation, ActorLocation, TargetActor->GetActorRightVector()); - float DistanceToRightLeftPlane = FVector::PointPlaneDist(SourceActorLocation, ActorLocation, TargetActor->GetActorForwardVector()); - - if (FMath::Abs(DistanceToFrontBackPlane) <= FMath::Abs(DistanceToRightLeftPlane)) - { - // Determine if Front or Back - - // Can see if it's left or right of Left/Right plane which would determine Front or Back - if (DistanceToRightLeftPlane >= 0) - { - return EUHLDirection::Front; - } - return EUHLDirection::Back; - } - // Determine if Right or Left - - if (DistanceToFrontBackPlane >= 0) - { - return EUHLDirection::Right; - } - return EUHLDirection::Left; -} - -FVector2D UUnrealHelperLibraryBPL::GetViewportSizeUnscaled(UObject* WorldContextObject) -{ - FVector2D ViewportSize = UWidgetLayoutLibrary::GetViewportSize(WorldContextObject); - float ViewportScale = UWidgetLayoutLibrary::GetViewportScale(WorldContextObject); - FVector2D ViewportSizeUnscaled = ViewportSize / ViewportScale; - return ViewportSizeUnscaled; -} - -FVector2D UUnrealHelperLibraryBPL::GetWidgetCenterPosition(UObject* WorldContextObject, UWidget* Widget) -{ - FVector2D Result; - - FGeometry WidgetGeometry = Widget->GetCachedGeometry(); - FVector2D WidgetCenterAbsolutePosition = WidgetGeometry.GetAbsolutePositionAtCoordinates(FVector2f(0.5, 0.5)); - - FVector2D PixelPos; - FVector2D ViewportPos; - USlateBlueprintLibrary::AbsoluteToViewport(WorldContextObject, WidgetCenterAbsolutePosition, PixelPos, ViewportPos); - - Result = PixelPos; - - return Result; -} - -float UUnrealHelperLibraryBPL::GetActorDistanceToCenterOfScreen(UObject* WorldContextObject, const AActor* Actor, APlayerController* PlayerController, bool bPlayerViewportRelative, const bool bDebug, const float DebugLifetime) -{ - float Result = 9999999.0f; - FVector2D ViewportSizeUnscaled = GetViewportSizeUnscaled(WorldContextObject); - - FVector2D CurrentActorScreenPosition; - UWidgetLayoutLibrary::ProjectWorldLocationToWidgetPosition(PlayerController, Actor->GetActorLocation(), CurrentActorScreenPosition, true); - Result = FVector2D::Distance(CurrentActorScreenPosition, ViewportSizeUnscaled / 2); - - // same as in "GetActorClosestToCenterOfScreen" - if (bDebug) - { - bool bRelativeToViewportCenter = false; - float ViewportScale = UWidgetLayoutLibrary::GetViewportScale(WorldContextObject); - FVector2D ViewportSize = UWidgetLayoutLibrary::GetViewportSize(WorldContextObject); - FLineInfo LineInfo = { - "TestLine" + Actor->GetName(), - ViewportSize / 2, - CurrentActorScreenPosition * ViewportScale, - FColor::MakeRandomColor(), - 5, - "" + Actor->GetName() + " " + FString::SanitizeFloat(Result), - FColor::Blue, - bRelativeToViewportCenter, - true, - }; - DrawDebugLineOnCanvas(Actor->GetWorld(), LineInfo, bRelativeToViewportCenter); - } - - return Result; -} - -AActor* UUnrealHelperLibraryBPL::GetActorClosestToCenterOfScreen(UObject* WorldContextObject, const TArray& Actors, APlayerController* PlayerController, FVector2D& ScreenPosition, bool bPlayerViewportRelative, const bool bDebug, const float DebugLifetime) -{ - AActor* Result = nullptr; - FVector2D ResultScreenPosition = FVector2D(133700.322, 133700.322); - float ResultDistance = FVector2D::Distance(ResultScreenPosition, FVector2D::ZeroVector); - - for (AActor* Actor : Actors) - { - float CurrentDistance = GetActorDistanceToCenterOfScreen(Actor, Actor, PlayerController, true, bDebug, DebugLifetime); - - if (CurrentDistance < ResultDistance) - { - ResultDistance = CurrentDistance; - Result = Actor; - } - } - - ScreenPosition = ResultScreenPosition; - return Result; -} - -AActor* UUnrealHelperLibraryBPL::GetMostDistantActor(const TArray& Actors, float& MaxDistance_Out, FVector Location, const bool bDebug, const float DebugLifetime) -{ - // TODO use GetMostDistantVector if possible - AActor* Result = nullptr; - float GreatestDistance = -9999999; - TMap ActorsAndDistances = {}; - - for (AActor* Actor : Actors) - { - float Distance = FVector::Distance(Actor->GetActorLocation(), Location); - ActorsAndDistances.Add(Actor, Distance); - if (Distance > GreatestDistance) - { - GreatestDistance = Distance; - Result = Actor; - MaxDistance_Out = Distance; - } - } - - if (bDebug) - { - for (const TTuple& ActorWithDist : ActorsAndDistances) - { - bool bMostDistant = Result == ActorWithDist.Key; - DrawDebugLine(ActorWithDist.Key->GetWorld(), ActorWithDist.Key->GetActorLocation(), Location, bMostDistant ? FColor::Green : FColor::Red, false, DebugLifetime, -1, 2.0f); - DrawDebugString(ActorWithDist.Key->GetWorld(), FVector::ZeroVector, FString::Printf(TEXT("Distance: %.2f"), ActorWithDist.Value), ActorWithDist.Key, bMostDistant ? FColor::Green : FColor::Red, 0, true, 1); - } - } - - return Result; -} - -FVector UUnrealHelperLibraryBPL::GetMostDistantVector( - const UObject* WorldContextObject, - const TArray Vectors, FVector Location, - float& MaxDistance_Out, int32& Index_Out, bool bUseNavigation, - const bool bDebug, const float DebugLifetime) -{ - FVector Result = VECTOR_ERROR; - - TArray Distances = {}; - float GreatestDistance = -9999999; - - for (int32 i = 0; i < Vectors.Num(); i++) - { - float Distance = FLOAT_ERROR; - if (bUseNavigation) - { - double DistanceInDouble; - UNavigationSystemV1::GetPathLength(WorldContextObject->GetWorld(), Vectors[i], Location, DistanceInDouble); - Distance = DistanceInDouble; - } - else - { - Distance = FVector::Distance(Vectors[i], Location); - } - - Distances[i] = Distance; - - if (Distance > GreatestDistance) - { - GreatestDistance = Distance; - Result = Vectors[i]; - MaxDistance_Out = Distance; - Index_Out = i; - } - } - - if (bDebug) - { - for (int32 i = 0; i < Vectors.Num(); i++) - { - bool bMostDistant = i == Index_Out; - DrawDebugLine(WorldContextObject->GetWorld(), Vectors[i], Location, bMostDistant ? FColor::Green : FColor::Red, false, DebugLifetime, -1, 2.0f); - DrawDebugString(WorldContextObject->GetWorld(), FVector::ZeroVector, FString::Printf(TEXT("Distance: %.2f"), Distances[i]), nullptr, bMostDistant ? FColor::Green : FColor::Red, 0, true, 1); - } - } - - return Result; -} - -FVector UUnrealHelperLibraryBPL::GetMostDistantActorComponent( - const UObject* WorldContextObject, const TArray SceneComponents, - FVector Location, float& MaxDistance_Out, int32& Index_Out, bool bUseNavigation, - const bool bDebug, const float DebugLifetime) -{ - TArray Vectors = {}; - for (int32 i = 0; i < SceneComponents.Num(); i++) - { - if (IsValid(SceneComponents[i])) - { - Vectors.Add(SceneComponents[i]->GetComponentToWorld().GetLocation()); - } - else - { - Vectors.Add(VECTOR_ERROR); - } - } - return GetMostDistantVector(WorldContextObject, - Vectors, Location, - MaxDistance_Out, Index_Out, bUseNavigation, - bDebug, DebugLifetime); -} - -void UUnrealHelperLibraryBPL::DrawDebugLineOnCanvas(UObject* WorldContextObject, const FLineInfo& LineInfo, const bool bRelativeToViewportCenter) -{ - const UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(WorldContextObject); - const APlayerController* PlayerController = GameInstance->GetFirstLocalPlayerController(WorldContextObject->GetWorld()); - AUHLHUD* HUD = PlayerController->GetHUD(); - if (!IsValid(HUD)) return; - - HUD->AddOrUpdateLineInfoToDrawNextTick(LineInfo); -} - -void UUnrealHelperLibraryBPL::DrawDebugCrossHair( - UObject* WorldContextObject, - const float CrossHairLineLength, - const float LineThickness, - const float AngleToRotate, - const FVector2f& CrossHairCenterScreenSpace, - const FLinearColor& LineColor, - const bool bRelativeToViewportCenter - ) -{ - const UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(WorldContextObject); - const APlayerController* PlayerController = GameInstance->GetFirstLocalPlayerController(WorldContextObject->GetWorld()); - AUHLHUD* HUD = PlayerController->GetHUD(); - if (!IsValid(HUD)) return; - - FLineInfo LineInfo = { - "TestLine", - FVector2D(0, 0), - FVector2D(200, 500), - FColor::Red, - 2, - "Test123", - FColor::Blue, - bRelativeToViewportCenter, - true, - }; - DrawDebugLineOnCanvas(WorldContextObject, LineInfo, bRelativeToViewportCenter); -} - -UActorComponent* UUnrealHelperLibraryBPL::GetActorComponentByName(AActor* Actor, FString Name) -{ - if (!IsValid(Actor)) - return nullptr; - - for (UActorComponent* Component : Actor->GetComponents()) - { - if (Component->GetName() == Name) - { - return Component; - } - } - return nullptr; -} - -USceneComponent* UUnrealHelperLibraryBPL::GetSceneComponentByName(AActor* Actor, FString Name) -{ - if (!IsValid(Actor)) - return nullptr; - - return Cast(GetActorComponentByName(Actor, Name)); -} - -FVector UUnrealHelperLibraryBPL::GetRandomPointInBox(const USceneComponent* Component, bool bOnGround, bool bDrawDebug, float DebugDrawTime) -{ - FVector Origin; - FVector BoxExtent; - float SphereRadius; - - UKismetSystemLibrary::GetComponentBounds(Component, Origin, BoxExtent, SphereRadius); - FVector RandomPoint = UKismetMathLibrary::RandomPointInBoundingBox(Origin, BoxExtent); - - if (bOnGround) - { - RandomPoint.Z = GetHighestPointInBox(Component).Z; - FHitResult OutHit; - UKismetSystemLibrary::LineTraceSingle(Component->GetWorld(), RandomPoint, FVector(0, 0, -999999), TraceTypeQuery1, false, TArray(), - bDrawDebug ? EDrawDebugTrace::Type::ForDuration : EDrawDebugTrace::Type::None, OutHit, true, FLinearColor::Red, FLinearColor::Green, DebugDrawTime); - if (OutHit.IsValidBlockingHit()) - { - RandomPoint = OutHit.Location; - } - } - - return RandomPoint; -} - -FVector UUnrealHelperLibraryBPL::GetHighestPointInBox(const USceneComponent* Component) -{ - if (!IsValid(Component)) - return VECTOR_ERROR; - - FVector Origin; - FVector BoxExtent; - float SphereRadius = 0.0f; - UKismetSystemLibrary::GetComponentBounds(Component, Origin, BoxExtent, SphereRadius); - - const FVector BoxMin = Origin - BoxExtent; - const FVector BoxMax = Origin + BoxExtent; - return FBox(BoxMin, BoxMax).Max; -} - -FVector UUnrealHelperLibraryBPL::GetCenterPointInBox(const USceneComponent* Component) -{ - if (!IsValid(Component)) - { - return VECTOR_ERROR; - } - - FVector Origin; - FVector BoxExtent; - float SphereRadius = 0.0f; - UKismetSystemLibrary::GetComponentBounds(Component, Origin, BoxExtent, SphereRadius); - - const FVector BoxMin = Origin - BoxExtent; - const FVector BoxMax = Origin + BoxExtent; - return FBox(BoxMin, BoxMax).GetCenter(); -} - -FBox UUnrealHelperLibraryBPL::GetComponentBox(const USceneComponent* Component) -{ - if (!IsValid(Component)) - { - return FBox(); - } - - FVector Origin; - FVector BoxExtent; - float SphereRadius = 0.0f; - UKismetSystemLibrary::GetComponentBounds(Component, Origin, BoxExtent, SphereRadius); - - const FVector BoxMin = Origin - BoxExtent; - const FVector BoxMax = Origin + BoxExtent; - return FBox(BoxMin, BoxMax); -} - -FVector UUnrealHelperLibraryBPL::GetCenterPointBetweenVectors( - const UObject* WorldContextObject, const FVector& PointA, const FVector& PointB, - const bool bDebug, const float DebugLifetime, const FLinearColor DebugColor) -{ - FVector Result = (PointB - PointA) / 2 + PointA; - - if (bDebug) - { - UWorld* DebugWorld = WorldContextObject->GetWorld(); - DrawDebugSphere(DebugWorld, Result, 10.0f, 12, DebugColor.ToFColor(true), true, DebugLifetime, DEPTH_PRIORITY, 1); - } - - return Result; -} - -void UUnrealHelperLibraryBPL::GetPointAtRelativeAngleUsingVector( - FVector& Point, FRotator& PointRotation, const UObject* WorldContextObject, const FVector& Location, const FVector& ForwardVector, const float Angle, const float Distance, const float OverrideZ, const bool bDebug, const float DebugLifetime, const FLinearColor DebugColor) -{ - if (!WorldContextObject) - { - Point = VECTOR_ERROR; - return; - } - - FVector LocationLocal = Location; - // Override Z if specified (using -999999.f as sentinel value to indicate no override) - if (OverrideZ > -999999.f) - { - LocationLocal.Z = OverrideZ; - } - - FVector NormalizedForward = ForwardVector.GetSafeNormal(); - FVector Result = LocationLocal + NormalizedForward.RotateAngleAxis(Angle, FVector(0, 0, 1)) * Distance; - - if (bDebug) - { - UWorld* DebugWorld = WorldContextObject->GetWorld(); - FString DebugText = FString::Printf(TEXT("Angle %.2f°\nDistance %.2f"), Angle, Distance); - if (OverrideZ > -999999.f) - { - DebugText += FString::Printf(TEXT("\nZ Override: %.2f"), OverrideZ); - } - DrawDebugString(DebugWorld, Result, DebugText, 0, DebugColor.ToFColor(true), DebugLifetime, true, 1.0f); - DrawDebugSphere(DebugWorld, Result, 10.0f, 12, DebugColor.ToFColor(true), true, DebugLifetime, DEPTH_PRIORITY, 1); - FVector ArrowLineEnd = LocationLocal + NormalizedForward.RotateAngleAxis(Angle, FVector(0, 0, 1)) * (Distance - 10); - if (OverrideZ > -999999.f) - { - ArrowLineEnd.Z = OverrideZ; - } - DrawDebugDirectionalArrow(DebugWorld, LocationLocal, ArrowLineEnd, RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 2); - } - - Point = Result; - PointRotation = (Point - LocationLocal).ToOrientationRotator(); -} - -void UUnrealHelperLibraryBPL::GetPointAtRelativeAngle( - FVector& Point, FRotator& PointRotation, const AActor* ActorIn, const float Angle, const float Distance, const bool bDebug, const float DebugLifetime, const FLinearColor DebugColor) -{ - if (!IsValid(ActorIn)) - { - Point = VECTOR_ERROR; - return; - } - FVector Result = ActorIn->GetActorLocation() + ActorIn->GetActorForwardVector().RotateAngleAxis(Angle, FVector(0, 0, 1)) * Distance; - if (bDebug) - { - DrawDebugString(ActorIn->GetWorld(), Result, FString::Printf(TEXT("Angle %.2f°\nDistance %.2f"), Angle, Distance), 0, DebugColor.ToFColor(true), DebugLifetime, true, 1.0f); - DrawDebugSphere(ActorIn->GetWorld(), Result, 10.0f, 12, DebugColor.ToFColor(true), true, DebugLifetime, DEPTH_PRIORITY, 1); - FVector ArrowLineEnd = ActorIn->GetActorLocation() + ActorIn->GetActorForwardVector().RotateAngleAxis(Angle, FVector(0, 0, 1)) * (Distance - 10); - DrawDebugDirectionalArrow(ActorIn->GetWorld(), ActorIn->GetActorLocation(), ArrowLineEnd, RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 2); - } - Point = Result; - PointRotation = (Point - ActorIn->GetActorLocation()).ToOrientationRotator(); -} - -void UUnrealHelperLibraryBPL::GetPointAtRelativeDirection(FVector& Point, FRotator& PointRotation, const AActor* ActorIn, const EUHLDirection Direction, const float Distance, const bool bDebug, - const float DebugLifetime, const FLinearColor DebugColor, const FText DebugText) -{ - if (!IsValid(ActorIn)) - return; - - float Angle = DirectionToAngle(Direction); - GetPointAtRelativeAngle(Point, PointRotation, ActorIn, Angle, Distance); - - if (bDebug) - { - const UEnum* EnumPtr = FindObject(nullptr, TEXT("EUHLDirection"), true); - if (EnumPtr) - { - DrawDebugString(ActorIn->GetWorld(), Point, - FString::Printf(TEXT("%s \nDirection %s\nDistance %.2f"), *DebugText.BuildSourceString(), *EnumPtr->GetNameStringByValue((uint8)Direction), Distance), 0, DebugColor.ToFColor(true), - DebugLifetime, true, 1.0f); - } - DrawDebugSphere(ActorIn->GetWorld(), Point, 10.0f, 12, DebugColor.ToFColor(true), true, DebugLifetime, DEPTH_PRIORITY, 1); - FVector ArrowLineEnd; - FRotator ArrowLineEndRotation; - GetPointAtRelativeAngle(ArrowLineEnd, ArrowLineEndRotation, ActorIn, Angle, Distance - 10); - DrawDebugDirectionalArrow(ActorIn->GetWorld(), ActorIn->GetActorLocation(), ArrowLineEnd, RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 2); - } -} - -void UUnrealHelperLibraryBPL::GetPointAtAngleRelativeToOtherActor(FVector& Point, FRotator& PointRotation, const AActor* Actor1, const AActor* Actor2, const float Angle, const float Distance, - const bool bTakeZFromActor1, const bool bDebug, const float DebugLifetime, const FLinearColor DebugColor) -{ - if (!IsValid(Actor1) || !IsValid(Actor2)) - return; - - const FVector Actor1Location = Actor1->GetActorLocation(); - const FVector Actor2Location = Actor2->GetActorLocation(); - const FVector DirectionBetweenActors = (Actor2Location - Actor1Location).GetSafeNormal(); - Point = Actor1Location + (DirectionBetweenActors.RotateAngleAxis(Angle, FVector(0, 0, 1)) * Distance); - Point.Z = bTakeZFromActor1 ? Actor1Location.Z : Actor2Location.Z; - PointRotation = (Point - Actor1Location).ToOrientationRotator(); - - if (bDebug) - { - UWorld* DebugWorld = Actor1->GetWorld(); - DrawDebugString(DebugWorld, Point, FString::Printf(TEXT("Angle %.2f°\nDistance %.2f"), Angle, Distance), 0, DebugColor.ToFColor(true), DebugLifetime, true, 1.0f); - DrawDebugSphere(DebugWorld, Point, 10.0f, 12, DebugColor.ToFColor(true), true, DebugLifetime, DEPTH_PRIORITY, 1); - FVector ArrowLineEnd = Actor1Location + (DirectionBetweenActors.RotateAngleAxis(Angle, FVector(0, 0, 1)) * (Distance - 10)); - Point.Z = bTakeZFromActor1 ? Actor1Location.Z : Actor2Location.Z; - DrawDebugDirectionalArrow(DebugWorld, Actor1Location, Actor2Location, RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 1); - DrawDebugDirectionalArrow(DebugWorld, Actor1Location, ArrowLineEnd, RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 2); - } -} - -void UUnrealHelperLibraryBPL::GetPointAtDirectionRelativeToOtherActor(FVector& Point, FRotator& PointRotation, const AActor* Actor1, const AActor* Actor2, const EUHLDirection Direction, - const float Distance, const bool bTakeZFromActor1, const bool bDebug, const float DebugLifetime, const FLinearColor DebugColor) -{ - if (!IsValid(Actor1) || !IsValid(Actor2)) - return; - - float Angle = DirectionToAngle(Direction); - GetPointAtAngleRelativeToOtherActor(Point, PointRotation, Actor1, Actor2, Angle, Distance, bTakeZFromActor1); - - if (bDebug) - { - const UEnum* EnumPtr = FindObject(nullptr, TEXT("EUHLDirection"), true); - if (EnumPtr) - { - DrawDebugString(Actor1->GetWorld(), Point, FString::Printf(TEXT("Direction %s\nDistance %.2f"), *EnumPtr->GetNameStringByValue((uint8)Direction), Distance), 0, DebugColor.ToFColor(true), - DebugLifetime, true, 1.0f); - } - DrawDebugSphere(Actor1->GetWorld(), Point, 10.0f, 12, DebugColor.ToFColor(true), true, DebugLifetime, DEPTH_PRIORITY, 1); - FVector ArrowLineEnd; - FRotator ArrowLineEndRotation; - GetPointAtAngleRelativeToOtherActor(ArrowLineEnd, ArrowLineEndRotation, Actor1, Actor2, Angle, Distance, bTakeZFromActor1); - DrawDebugDirectionalArrow(Actor1->GetWorld(), Actor1->GetActorLocation(), Actor2->GetActorLocation(), RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 1); - DrawDebugDirectionalArrow(Actor1->GetWorld(), Actor1->GetActorLocation(), ArrowLineEnd, RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 2); - } -} - -void UUnrealHelperLibraryBPL::GetPointAtDirectionRelativeToOtherVector(FVector& Point, FRotator& PointRotation, const FVector& Vector1, const FVector& Vector2, const EUHLDirection Direction, - const float Distance, const bool bTakeZFromVector1, const bool bDebug, const float DebugLifetime, const FLinearColor DebugColor) -{ - float Angle = DirectionToAngle(Direction); - const FVector DirectionBetweenVectors = (Vector2 - Vector1).GetSafeNormal(); - Point = Vector1 + (DirectionBetweenVectors.RotateAngleAxis(Angle, FVector(0, 0, 1)) * Distance); - Point.Z = bTakeZFromVector1 ? Vector1.Z : Vector2.Z; - PointRotation = (Point - Vector1).ToOrientationRotator(); - - if (bDebug) - { - UWorld* DebugWorld = GEngine->GetWorld(); - if (!DebugWorld) return; - - const UEnum* EnumPtr = FindObject(nullptr, TEXT("EUHLDirection"), true); - if (EnumPtr) - { - DrawDebugString(DebugWorld, Point, FString::Printf(TEXT("Direction %s\nDistance %.2f"), *EnumPtr->GetNameStringByValue((uint8)Direction), Distance), 0, DebugColor.ToFColor(true), - DebugLifetime, true, 1.0f); - } - DrawDebugSphere(DebugWorld, Point, 10.0f, 12, DebugColor.ToFColor(true), true, DebugLifetime, DEPTH_PRIORITY, 1); - FVector ArrowLineEnd = Vector1 + (DirectionBetweenVectors.RotateAngleAxis(Angle, FVector(0, 0, 1)) * (Distance - 10)); - Point.Z = bTakeZFromVector1 ? Vector1.Z : Vector2.Z; - DrawDebugDirectionalArrow(DebugWorld, Vector1, Vector2, RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 1); - DrawDebugDirectionalArrow(DebugWorld, Vector1, ArrowLineEnd, RELATIVE_POINT_ARROW_SIZE, FColor::White, true, DebugLifetime, DEPTH_PRIORITY, 2); - } -} - -float UUnrealHelperLibraryBPL::DirectionToAngle(const EUHLDirection DirectionIn) -{ - if (DirectionIn == EUHLDirection::Front) - return 0.0f; - if (DirectionIn == EUHLDirection::Back) - return 180.0f; - if (DirectionIn == EUHLDirection::Left) - return -90.0f; - if (DirectionIn == EUHLDirection::Right) - return 90.0f; - if (DirectionIn == EUHLDirection::FrontLeft) - return -45.0f; - if (DirectionIn == EUHLDirection::FrontRight) - return 45.0f; - if (DirectionIn == EUHLDirection::BackLeft) - return -135.0f; - if (DirectionIn == EUHLDirection::BackRight) - return 135.0f; - return 0.0f; -} - -EUHLDirection UUnrealHelperLibraryBPL::ConvertMovementInputVectorToDirection(const FVector& InputVector) -{ - // Project to 2D - float X = InputVector.X; - float Y = InputVector.Y; - - // atan2 returns radians from -π to +π - float Radians = FMath::Atan2(Y, X); - float Degrees = FMath::RadiansToDegrees(Radians); - - // Normalize into [0, 360) - if (Degrees < 0.f) - { - Degrees += 360.f; - } - - // Divide into 8 slices, round to nearest integer [0..7] - int32 Slice = FMath::RoundToInt(Degrees / 45.f) % 8; - - switch (Slice) - { - case 0: return EUHLDirection::Right; - case 1: return EUHLDirection::FrontRight; - case 2: return EUHLDirection::Front; - case 3: return EUHLDirection::FrontLeft; - case 4: return EUHLDirection::Left; - case 5: return EUHLDirection::BackLeft; - case 6: return EUHLDirection::Back; - case 7: return EUHLDirection::BackRight; - default: return EUHLDirection::Front; // fall-back - } -} - -EUHLDirection UUnrealHelperLibraryBPL::GetMovementDirection( - const FVector& Velocity, const FRotator& ActorRotation, float DeadZone) -{ - // 1) Flatten to horizontal plane - FVector FlatVel = Velocity; - FlatVel.Z = 0.f; - - // 2) Early-out if below threshold - if (FlatVel.SizeSquared() <= FMath::Square(DeadZone)) - { - return EUHLDirection::None; - } - - // 3) Compute world-space yaw of movement - const float MovementYaw = FlatVel.Rotation().Yaw; - - // 4) Your actor's facing yaw - const float ForwardYaw = ActorRotation.Yaw; - - // 5) Signed difference in [-180, +180] - float DeltaYaw = FMath::UnwindDegrees(MovementYaw - ForwardYaw); - - // 6) Snap into 8 slices of 45° each - float SliceF = DeltaYaw / 45.f; - int32 SliceI = FMath::RoundToInt(SliceF); - - // 7) Wrap the exact 180° case: -4 → +4 - if (SliceI == -4) SliceI = 4; - - // 8) Ensure index in [0..7] - SliceI = (SliceI + 8) % 8; - - // 9) Map to your enum - switch (SliceI) - { - case 0: return EUHLDirection::Front; - case 1: return EUHLDirection::FrontRight; - case 2: return EUHLDirection::Right; - case 3: return EUHLDirection::BackRight; - case 4: return EUHLDirection::Back; - case 5: return EUHLDirection::BackLeft; - case 6: return EUHLDirection::Left; - case 7: return EUHLDirection::FrontLeft; - default: return EUHLDirection::None; // should never hit this - } -} - -EUHLDirection UUnrealHelperLibraryBPL::GetEnemyMovementDirectionRelativeToCharacter( - UObject* WorldContextObject, - const FVector& EnemyVelocity, - const FVector& MyVelocity, - const FVector& ActorLocation, - const FRotator& ActorRotation, - float DeadZone, - float AngleToleranceDeg, - bool bFourWay, - bool bDebug, - float DebugDuration, - float DebugThickness -) -{ - // If enemy isn't moving, return None immediately - if (EnemyVelocity.IsNearlyZero(KINDA_SMALL_NUMBER)) - { - if (bDebug && WorldContextObject) - { - UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject); - DrawDebugString(World, ActorLocation + FVector(0,0,50), TEXT("None"), nullptr, FColor::White, DebugDuration, true); - } - return EUHLDirection::None; - } - - // Compute relative movement and flatten to XY - FVector RelVel = EnemyVelocity - MyVelocity; - RelVel.Z = 0.f; - - // Effective dead zone threshold - const float EffectiveDeadZone = (DeadZone > 0.f) ? DeadZone : KINDA_SMALL_NUMBER; - if (RelVel.SizeSquared() <= FMath::Square(EffectiveDeadZone)) - { - if (bDebug && WorldContextObject) - { - UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject); - DrawDebugString(World, ActorLocation + FVector(0,0,50), TEXT("None"), nullptr, FColor::White, DebugDuration, true); - } - return EUHLDirection::None; - } - - // Compute yaw difference - const float MovementYaw = RelVel.Rotation().Yaw; - const float ForwardYaw = ActorRotation.Yaw; - float DeltaYaw = FMath::UnwindDegrees(MovementYaw - ForwardYaw); - - // Determine octant index with tolerance - const float SliceF = DeltaYaw / 45.f; - const float TolSlice = AngleToleranceDeg / 45.f; - int32 SliceI = INDEX_NONE; - for (int32 i = 0; i < 8; ++i) - { - if (FMath::Abs(SliceF - i) <= TolSlice) - { - SliceI = i; - break; - } - } - if (SliceI == INDEX_NONE) - { - SliceI = FMath::RoundToInt(SliceF); - } - if (SliceI == -4) SliceI = 4; - SliceI = (SliceI + 8) % 8; - - // Map index to enum - EUHLDirection DirEnum; - switch (SliceI) - { - case 0: DirEnum = EUHLDirection::Front; break; - case 1: DirEnum = EUHLDirection::FrontRight; break; - case 2: DirEnum = EUHLDirection::Right; break; - case 3: DirEnum = EUHLDirection::BackRight; break; - case 4: DirEnum = EUHLDirection::Back; break; - case 5: DirEnum = EUHLDirection::BackLeft; break; - case 6: DirEnum = EUHLDirection::Left; break; - case 7: DirEnum = EUHLDirection::FrontLeft; break; - default: DirEnum = EUHLDirection::None; break; - } - - // Collapse to 4-way if requested - if (bFourWay) - { - if (DirEnum == EUHLDirection::FrontLeft || DirEnum == EUHLDirection::FrontRight) - DirEnum = EUHLDirection::Front; - else if (DirEnum == EUHLDirection::BackLeft || DirEnum == EUHLDirection::BackRight) - DirEnum = EUHLDirection::Back; - } - - // Debug visuals - if (bDebug && WorldContextObject) - { - UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject); - const float DebugLen = 200.f; - - // Draw octant boundaries - for (int32 i = 0; i < 8; ++i) - { - float Yaw = ForwardYaw + i * 45.f; - FVector DirVec = FRotator(0.f, Yaw, 0.f).Vector() * DebugLen; - DrawDebugLine(World, ActorLocation, ActorLocation + DirVec, FColor::Silver, false, DebugDuration, 0, DebugThickness * 0.5f); - } - - // Draw relative movement arrow (cyan) - DrawDebugDirectionalArrow(World, ActorLocation, ActorLocation + RelVel.GetSafeNormal() * DebugLen, - 50.f, FColor::Cyan, false, DebugDuration, 0, DebugThickness); - - // Draw forward axis (green) - FVector FwdVec = ActorRotation.Vector() * DebugLen; - DrawDebugLine(World, ActorLocation, ActorLocation + FwdVec, FColor::Green, false, DebugDuration, 0, DebugThickness); - - // Draw chosen direction arrow (red) - float ChosenYaw = ForwardYaw + SliceI * 45.f; - FVector ChosenVec = FRotator(0.f, ChosenYaw, 0.f).Vector() * DebugLen; - DrawDebugLine(World, ActorLocation, ActorLocation + ChosenVec, FColor::Red, false, DebugDuration, 0, DebugThickness); - - // Label result using clean name - UEnum* EnumPtr = FindObject(ANY_PACKAGE, TEXT("EUHLDirection"), true); - FString Name = EnumPtr ? EnumPtr->GetNameStringByValue((int64)DirEnum) : TEXT("None"); - DrawDebugString(World, ActorLocation + FVector(0,0,50), Name, nullptr, FColor::White, DebugDuration, true); - } - - return DirEnum; -} - - -float UUnrealHelperLibraryBPL::ConvertPercentToMultiplier(float Percent) { return (100.0f - Percent) / 100.0f; } - -AActor* UUnrealHelperLibraryBPL::FindAttachedActorByTag(AActor* ActorIn, FName Tag) -{ - TArray OutActors; - ActorIn->GetAttachedActors(OutActors, true, true); - - AActor** ActorSearchResult = OutActors.FindByPredicate([Tag](const AActor* Actor) - { - return Actor->ActorHasTag(Tag); - }); - - if (ActorSearchResult) - { - return *ActorSearchResult; - } - return nullptr; -} - -bool UUnrealHelperLibraryBPL::IsPreviewWorld(UObject* WorldContextObject) { return WorldContextObject->GetWorld()->IsPreviewWorld(); } - -bool UUnrealHelperLibraryBPL::IsGameWorld(UObject* WorldContextObject) { return WorldContextObject->GetWorld()->IsGameWorld(); } - -bool UUnrealHelperLibraryBPL::IsEditorWorld(UObject* WorldContextObject) { return WorldContextObject->GetWorld()->IsEditorWorld(); } - -bool UUnrealHelperLibraryBPL::IsObjectInPreviewWorld(UObject* Object) { return Object->GetWorld()->IsPreviewWorld(); } - -bool UUnrealHelperLibraryBPL::IsObjectInEditorWorld(UObject* Object) { return Object->GetWorld()->IsEditorWorld(); } - -bool UUnrealHelperLibraryBPL::IsObjectInGameWorld(UObject* Object) { return Object->GetWorld()->IsGameWorld(); } - -bool UUnrealHelperLibraryBPL::IsWorldTearingDown(UObject* WorldContextObject) { return WorldContextObject->GetWorld()->bIsTearingDown; } - -bool UUnrealHelperLibraryBPL::IsOtherActorInAngle(AActor* Actor, AActor* OtherActor, TArray Ranges) -{ - float RelativeAngle = RelativeAngleToActor(Actor, OtherActor); - bool bInAngle = false; - for (FFloatRange Range : Ranges) - { - bInAngle = UKismetMathLibrary::InRange_FloatFloat(RelativeAngle, Range.GetLowerBoundValue(), Range.GetUpperBoundValue(), true, true); - if (bInAngle) - break; - } - return bInAngle; -} - -bool UUnrealHelperLibraryBPL::InRangeToOtherCharacter(ACharacter* Character, ACharacter* OtherCharacter, FFloatRange Range, bool bIncludeSelfCapsuleRadius, bool bIncludeTargetCapsuleRadius) -{ - if (!Character || !OtherCharacter) - { - return false; - } - - float CurrentDistance = Character->GetDistanceTo(OtherCharacter); - - if (bIncludeSelfCapsuleRadius) - { - CurrentDistance -= Character->GetCapsuleComponent()->GetScaledCapsuleRadius(); - } - if (bIncludeTargetCapsuleRadius) - { - CurrentDistance -= OtherCharacter->GetCapsuleComponent()->GetScaledCapsuleRadius(); - } - - bool bInRange = UKismetMathLibrary::InRange_FloatFloat(CurrentDistance, Range.GetLowerBoundValue(), Range.GetUpperBoundValue()); - return bInRange; -} - -bool UUnrealHelperLibraryBPL::InRangeToLocation( - ACharacter* Character, FVector Location, FFloatRange Range, bool bIncludeSelfCapsuleRadius) -{ - if (!Character) - { - return false; - } - - float CurrentDistance = FVector::Dist2D(Character->GetActorLocation(), Location); - - if (bIncludeSelfCapsuleRadius) - { - CurrentDistance -= Character->GetCapsuleComponent()->GetScaledCapsuleRadius(); - } - - bool bInRange = UKismetMathLibrary::InRange_FloatFloat(CurrentDistance, Range.GetLowerBoundValue(), Range.GetUpperBoundValue()); - return bInRange; -} - -FString UUnrealHelperLibraryBPL::GetPathToFile(UObject* Object) -{ - FString NameAndWithSlash = FString::Printf(TEXT("/%s"), *Object->GetName()); - return Object->GetPathName(NULL).Replace(*Object->GetName(), TEXT("")); -} - -bool UUnrealHelperLibraryBPL::IsDebugBuild() -{ - EBuildConfiguration BuildConfiguration = FApp::GetBuildConfiguration(); - if (BuildConfiguration == EBuildConfiguration::Debug || BuildConfiguration == EBuildConfiguration::DebugGame) - { - return true; - } - return false; -} - -bool UUnrealHelperLibraryBPL::IsDevelopmentBuild() -{ - EBuildConfiguration BuildConfiguration = FApp::GetBuildConfiguration(); - return BuildConfiguration == EBuildConfiguration::Development; -} - -bool UUnrealHelperLibraryBPL::IsShippingBuild() -{ - EBuildConfiguration BuildConfiguration = FApp::GetBuildConfiguration(); - return BuildConfiguration == EBuildConfiguration::Shipping; -} - -bool UUnrealHelperLibraryBPL::IsTestBuild() -{ - EBuildConfiguration BuildConfiguration = FApp::GetBuildConfiguration(); - return BuildConfiguration == EBuildConfiguration::Test; -} - -bool UUnrealHelperLibraryBPL::IsInEditor() -{ -#if WITH_EDITOR - return true; -#else - return false; -#endif -} - -EUHLBuildType UUnrealHelperLibraryBPL::GetBuildType() -{ - if (IsInEditor()) - return EUHLBuildType::Editor; - - EBuildConfiguration BuildConfiguration = FApp::GetBuildConfiguration(); - switch (BuildConfiguration) - { - case EBuildConfiguration::Debug: - return EUHLBuildType::Debug; - break; - case EBuildConfiguration::DebugGame: - return EUHLBuildType::Debug; - break; - case EBuildConfiguration::Development: - return EUHLBuildType::Development; - break; - case EBuildConfiguration::Shipping: - return EUHLBuildType::Shipping; - break; - case EBuildConfiguration::Test: - return EUHLBuildType::Test; - break; - default: - return IsInEditor() ? EUHLBuildType::Editor : EUHLBuildType::None; - break; - } -} - -float UUnrealHelperLibraryBPL::RandomValueInInterval(FFloatInterval Range) -{ - // Ensure correct ordering - const float Lower = FMath::Min(Range.Min, Range.Max); - const float Upper = FMath::Max(Range.Min, Range.Max); - - return FMath::FRandRange(Lower, Upper); -} - -bool UUnrealHelperLibraryBPL::IsWorldPartitionEnabled(UObject* WorldContextObject) -{ - if (!WorldContextObject) return false; - - UWorld* World = WorldContextObject->GetWorld(); - return World && World->GetWorldPartition() != nullptr; -} - -bool UUnrealHelperLibraryBPL::IsLevelHasSublevels(UObject* WorldContextObject) -{ - UWorld* World = WorldContextObject->GetWorld(); - const TArray& StreamingLevels = World->GetStreamingLevels(); - - return StreamingLevels.Num() > 0; -} - -void UUnrealHelperLibraryBPL::GetAllStreamingLevels( - UObject* WorldContextObject, TArray& OutStreamingLevels) -{ - OutStreamingLevels.Empty(); - - if (!WorldContextObject) - { - UE_LOG(LogTemp, Warning, TEXT("UUnrealHelperLibraryBPL::GetAllStreamingLevels: Invalid WorldContextObject")); - return; - } - - UWorld* World = GEngine - ? GEngine->GetWorldFromContextObjectChecked(WorldContextObject) - : nullptr; - - if (!World) - { - UE_LOG(LogTemp, Warning, TEXT("UUnrealHelperLibraryBPL::GetAllStreamingLevels: Could not resolve UWorld from context")); - return; - } - - // Grab the streaming levels array - OutStreamingLevels = World->GetStreamingLevels(); -} - -void UUnrealHelperLibraryBPL::GetAllSubLevels(UObject* WorldContextObject, TArray& OutSubLevels) -{ - OutSubLevels.Empty(); - - if (!WorldContextObject) - { - UE_LOG(LogTemp, Warning, TEXT("GetAllSubLevels: Invalid WorldContextObject")); - return; - } - - // Resolve the world from the context object - UWorld* World = GEngine - ? GEngine->GetWorldFromContextObjectChecked(WorldContextObject) - : nullptr; - - if (!World) - { - UE_LOG(LogTemp, Warning, TEXT("GetAllSubLevels: Could not resolve UWorld from context")); - return; - } - - // World->GetLevels() returns every ULevel* currently loaded: - // - The Persistent Level - // - Any Streaming Levels that are loaded into memory - OutSubLevels = World->GetLevels(); -} - -bool UUnrealHelperLibraryBPL::IsMapPackageName(const FString& PackageName) -{ - // Convert to filename to check extension - FString Filename; - if (FPackageName::TryConvertLongPackageNameToFilename(PackageName, Filename, FPackageName::GetMapPackageExtension())) - { - // Ensure the file actually exists on disk (optional) - return FPaths::FileExists(Filename); - } - return false; -} - -FString UUnrealHelperLibraryBPL::GetCleanLevelName(const FString& PackageName) -{ - // Turn "/Game/Maps/MyMap" into "MyMap" (or "UEDPIE_0_MyMap" if in PIE) - const FString ShortName = FPackageName::GetShortName(PackageName); - - // If PIE, find the first "_" and strip off the prefix - if (ShortName.StartsWith(TEXT("UEDPIE_"))) - { - int32 UnderscoreIndex = INDEX_NONE; - // Finds the first underscore after "UEDPIE" - if (ShortName.FindChar(TEXT('_'), UnderscoreIndex)) - { - // Chop off everything up to (and including) that underscore - return ShortName.Mid(UnderscoreIndex + 1); - } - } - - // Otherwise, just return the plain short name - return ShortName; -} - -void UUnrealHelperLibraryBPL::GetAllSubLevelPackageNames(UObject* WorldContextObject, TArray& OutLevelPackageNames) -{ - OutLevelPackageNames.Empty(); - - if (!WorldContextObject) { return; } - - UWorld* World = GEngine->GetWorldFromContextObjectChecked(WorldContextObject); - if (!World) { return; } - - // 1) Persistent Level - // if (ULevel* Persistent = World->PersistentLevel) - // { - // const FString Raw = Persistent->GetOutermost()->GetName(); - // if (IsMapPackageName(Raw)) - // { - // OutLevelPackageNames.Add(Raw); - // } - // } - - // 2) All streaming levels (loaded or not) - for (ULevelStreaming* StreamingLevel : World->GetStreamingLevels()) - { - if (!StreamingLevel) continue; - - const FString Raw = StreamingLevel->GetWorldAssetPackageName(); - const FString CleanName = GetCleanLevelName(Raw); - - // Only include if it’s actually a .umap in your project - if (IsMapPackageName(Raw)) - { - OutLevelPackageNames.Add(CleanName); - } - } -} - - -FColor UUnrealHelperLibraryBPL::RandomColor(int32 Seed) -{ - if (Seed >= 0) - { - return FColor::MakeRandomSeededColor(Seed); - } - return FColor::MakeRandomColor(); -} - -FLinearColor UUnrealHelperLibraryBPL::RandomLinearColor(int32 Seed) -{ - if (Seed >= 0) - { - return FLinearColor::MakeRandomSeededColor(Seed); - } - return FLinearColor::MakeRandomColor(); -} diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeCapsuleBase.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeCapsuleBase.h deleted file mode 100644 index 08302306..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeCapsuleBase.h +++ /dev/null @@ -1,214 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "ANS_UHL_Base.h" -#include "Components/CapsuleComponent.h" -#include "Curves/CurveFloat.h" -#include "CoreMinimal.h" -#include "AlphaBlend.h" -#include "Curves/CurveFloat.h" -#include "ANS_ChangeCapsuleBase.generated.h" - -USTRUCT(BlueprintType) -struct FChangeCapsuleCollisionSettings -{ - GENERATED_BODY() - - /** Override Collision Enabled */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(InlineEditConditionToggle)) - bool bOverrideCollisionEnabled = false; - /** Collision enabled state (None / QueryOnly / QueryAndPhysics) */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(EditCondition="bOverrideCollisionEnabled")) - TEnumAsByte CollisionEnabled = ECollisionEnabled::QueryAndPhysics; - - /** Override Collision Profile Name */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(InlineEditConditionToggle)) - bool bOverrideCollisionProfileName = false; - /** Collision profile name from your Project Settings → Collision */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(EditCondition="bOverrideCollisionProfileName")) - FName CollisionProfileName = TEXT("Pawn"); - - /** Override Generate Overlap Events */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(InlineEditConditionToggle)) - bool bOverrideGenerateOverlapEvents = false; - /** Generate overlap events? */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(EditCondition="bOverrideGenerateOverlapEvents")) - bool bGenerateOverlapEvents = true; - - /** Override Force Query Only */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(InlineEditConditionToggle)) - bool bOverrideForceQueryOnly = false; - /** If true, forces query‑only even if CollisionEnabled is set to Physics */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(EditCondition="bOverrideForceQueryOnly")) - bool bForceQueryOnly = false; - - /** Override Custom Responses */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(InlineEditConditionToggle)) - bool bOverrideCustomResponses = false; - /** Per‑channel responses (Block / Overlap / Ignore) */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule", meta=(EditCondition="bOverrideCustomResponses")) - TMap, TEnumAsByte> CustomResponses; -}; - -/** - * Base ANS that handles “modify capsule properties + blend in/out via FAlphaBlend - * + optional custom EaseCurve + debug visualization.” - * Subclasses must override FindCapsuleComponent(...) to choose which capsule to edit. - */ -UCLASS(Abstract, Blueprintable, meta = (DisplayName = "Change Capsule Base")) -class UNREALHELPERLIBRARY_API UANS_ChangeCapsuleBase : public UANS_UHL_Base -{ - GENERATED_BODY() - -public: - /** Change the capsule’s radius for this notify. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", meta=(InlineEditConditionToggle)) - bool bModifyRadius = false; - - /** Target radius to interpolate to (only if bModifyRadius == true). */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", - meta = (EditCondition = "bModifyRadius", ClampMin = "0.0")) - float NewRadius = 42.0f; - - /** Change the capsule’s half-height for this notify. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", meta=(InlineEditConditionToggle)) - bool bModifyHalfHeight = false; - - /** Target half-height to interpolate to (only if bModifyHalfHeight == true). */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", - meta = (EditCondition = "bModifyHalfHeight", ClampMin = "0.0")) - float NewHalfHeight = 96.0f; - - /** Change the capsule’s component scale for this notify. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", meta=(InlineEditConditionToggle)) - bool bModifyScale = false; - - /** Target relative scale to interpolate to (only if bModifyScale == true). */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", - meta = (EditCondition = "bModifyScale", EditConditionInline)) - FVector NewScale = FVector(1.0f, 1.0f, 1.0f); - - /** Change the capsule’s wireframe line thickness for this notify. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", meta=(InlineEditConditionToggle)) - bool bModifyLineThickness = false; - - /** Target wireframe line thickness to interpolate to (only if bModifyLineThickness == true). */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", - meta = (EditCondition = "bModifyLineThickness", ClampMin = "0.1")) - float NewLineThickness = 1.0f; - - /** Change the capsule’s wireframe shape color for this notify. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", meta=(InlineEditConditionToggle)) - bool bModifyShapeColor = false; - - /** Target wireframe shape color to interpolate to (only if bModifyShapeColor == true). */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", - meta = (EditCondition = "bModifyShapeColor", EditConditionInline)) - FLinearColor NewShapeColor = FLinearColor::Red; - - /** How long (seconds) to blend from original → target when notify begins. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", meta = (ClampMin = "0.0")) - float BlendTimeIn = 0.0f; - - /** Blend function to use when blending in (Linear, Cubic, Exponential, etc.). */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule") - EAlphaBlendOption BlendOptionIn = EAlphaBlendOption::Linear; - - /** How long (seconds) to blend from target → original when notify ends. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", meta = (ClampMin = "0.0")) - float BlendTimeOut = 0.0f; - - /** Blend function to use when blending out. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule") - EAlphaBlendOption BlendOptionOut = EAlphaBlendOption::Linear; - - /** Collision settings with independent toggles */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Change Capsule") - FChangeCapsuleCollisionSettings CapsuleCollisionSettings; - - /** - * Optional custom Ease Curve: - * If you assign a valid FRuntimeFloatCurve here, the raw alpha (from FAlphaBlend) - * will be remapped through this curve. If left empty, interpolation uses FAlphaBlend only. - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule", meta = (DisplayName = "Custom Ease Curve (Optional)")) - FRuntimeFloatCurve EaseCurve; - - /** If true, draw a debug visualization of the capsule each tick. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Change Capsule") - bool bDebug = false; - - - virtual void NotifyBegin( - USkeletalMeshComponent* MeshComp, - UAnimSequenceBase* Animation, - float TotalDuration, - const FAnimNotifyEventReference& EventReference - ) override; - - virtual void NotifyTick( - USkeletalMeshComponent* MeshComp, - UAnimSequenceBase* Animation, - float FrameDeltaTime, - const FAnimNotifyEventReference& EventReference - ) override; - - virtual void NotifyEnd( - USkeletalMeshComponent* MeshComp, - UAnimSequenceBase* Animation, - const FAnimNotifyEventReference& EventReference - ) override; - - -protected: - /** - * Subclasses must return the UCapsuleComponent to modify (e.g. Character’s capsule or named capsule). - * Return nullptr if none found. - */ - virtual UCapsuleComponent* FindCapsuleComponent(USkeletalMeshComponent* MeshComp) const PURE_VIRTUAL(UANS_ChangeCapsuleBase::FindCapsuleComponent, return nullptr;); - - -private: - /** The capsule component we’ll modify. */ - UPROPERTY(Transient) - UCapsuleComponent* CapsuleComp = nullptr; - - /** Stored “original” values from NotifyBegin. */ - float OriginalRadius = 0.0f; - float OriginalHalfHeight = 0.0f; - FVector OriginalScale = FVector::OneVector; - float OriginalLineThickness = 1.0f; - FLinearColor OriginalShapeColor = FLinearColor::White; - - /** Cached “target” values (NewX if flagged; otherwise OriginalX). */ - float TargetRadius = 0.0f; - float TargetHalfHeight = 0.0f; - FVector TargetScale = FVector::OneVector; - float TargetLineThickness = 1.0f; - FLinearColor TargetShapeColor = FLinearColor::White; - - /** FAlphaBlend instances for in/out. */ - FAlphaBlend BlendInAlpha; - FAlphaBlend BlendOutAlpha; - - /** Total duration of this notify (from NotifyBegin). */ - float NotifyTotalDuration = 0.0f; - - /** Elapsed time (since NotifyBegin). */ - float ElapsedTime = 0.0f; - - /** Whether we successfully grabbed “originals” in NotifyBegin. */ - bool bHasValidOriginals = false; - - /** Snapshot of original capsule settings for revert */ - FChangeCapsuleCollisionSettings OriginalCapsuleSettings; - - // Save original collision settings - void SaveOriginalCollisionSettings(); - // Restore capsule to original state - void RestoreOriginalCollisionSettings(); - // Applies settings: restores original then applies overrides - void ApplyCollisionSettings(); -}; \ No newline at end of file diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeCharacterCapsule.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeCharacterCapsule.h deleted file mode 100644 index 7c2746b7..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeCharacterCapsule.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "ANS_ChangeCapsuleBase.h" -#include "ANS_ChangeCharacterCapsule.generated.h" - -/** - * ANS that always targets the owning ACharacter’s capsule component. - */ -UCLASS(Blueprintable, meta = (DisplayName = "Change Character Capsule")) -class UNREALHELPERLIBRARY_API UANS_ChangeCharacterCapsule : public UANS_ChangeCapsuleBase -{ - GENERATED_BODY() - -protected: - /** Return the Character’s UCapsuleComponent, or nullptr if none. */ - virtual UCapsuleComponent* FindCapsuleComponent(USkeletalMeshComponent* MeshComp) const override; -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeNamedCapsule.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeNamedCapsule.h deleted file mode 100644 index dc422184..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeNamedCapsule.h +++ /dev/null @@ -1,25 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "ANS_ChangeCapsuleBase.h" -#include "ANS_ChangeNamedCapsule.generated.h" - -/** - * ANS that looks for a UCapsuleComponent by its component‐name on the actor. - */ -UCLASS(Blueprintable, meta = (DisplayName = "Change Named Capsule")) -class UNREALHELPERLIBRARY_API UANS_ChangeNamedCapsule : public UANS_ChangeCapsuleBase -{ - GENERATED_BODY() - -public: - /** Exact component‐name (FName) of the UCapsuleComponent to modify (e.g. "CapsuleVisual"). */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Capsule|Lookup") - FName CapsuleComponentName = NAME_None; - -protected: - /** Return the capsule whose Component Name matches. */ - virtual UCapsuleComponent* FindCapsuleComponent(USkeletalMeshComponent* MeshComp) const override; -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeRotationRate.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeRotationRate.h deleted file mode 100644 index 250d66f9..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_ChangeRotationRate.h +++ /dev/null @@ -1,51 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/Notifies/ANS_UHL_Base.h" -#include "ANS_ChangeRotationRate.generated.h" - -class UCharacterMovementComponent; - -/** - * better to use UANS_UHL_AllowCharacterRotation it combines both - * - bAllowPhysicsRotationDuringAnimRootMotion - * - and opportunity to change RotationRate - * thats much common use case than just changing rotation rate - */ -UCLASS() -class UNREALHELPERLIBRARY_API UANS_ChangeRotationRate : public UANS_UHL_Base -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="ActivateAbility") - FRotator RotationRate = FRotator::ZeroRotator; - -protected: -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } -#endif - - virtual FLinearColor GetEditorColor() override { return FLinearColor(0.53f, 0.6f, 0.85f); }; - virtual FString GetNotifyName_Implementation() const override; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - - virtual void OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) override; - -private: - UPROPERTY() - FRotator InitialRotationRate = FRotator::ZeroRotator; - - TWeakObjectPtr CharacterMovementComponent; - - UFUNCTION() - void ReturnInitialRotationRate(); - - // UFUNCTION() - // UUHLCharacterMovementComponent* GetUHLCharacterMovementComponent(ACharacter* Character); -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_EnableRootMotionZAxisMovement.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_EnableRootMotionZAxisMovement.h deleted file mode 100644 index 2ed69691..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_EnableRootMotionZAxisMovement.h +++ /dev/null @@ -1,57 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "ANS_UHL_Base.h" -#include "Animation/AnimMontage.h" -#include "Animation/AnimNotifies/AnimNotifyState.h" -#include "Engine/EngineTypes.h" -#include "ANS_EnableRootMotionZAxisMovement.generated.h" - -class ACharacter; - -/** - * Usefull for root motion jumps (characters/enemies) - * - * Enables MOVE_Flying mode during ANS, - * on end if movement mode is still MOVE_Flying - changes it on MOVE_Falling - * - * if "bStopMontageIfLandCheckFails" - stops montage if land check failed on NotifyEnd - */ -UCLASS() -class UNREALHELPERLIBRARY_API UANS_EnableRootMotionZAxisMovement : public UANS_UHL_Base -{ - GENERATED_BODY() - -public: - UANS_EnableRootMotionZAxisMovement(const FObjectInitializer& ObjectInitializer); - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="EnableRootMotionZAxisMovement") - bool bStopMontageIfLandCheckFails = false; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="EnableRootMotionZAxisMovement", meta=(EditCondition = "bStopMontageIfLandCheckFails", EditConditionHides)) - float LandCheckDistance = 50.0f; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="EnableRootMotionZAxisMovement", meta=(EditCondition = "bStopMontageIfLandCheckFails", EditConditionHides)) - TEnumAsByte CollisionChannel = ECC_Pawn; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="EnableRootMotionZAxisMovement", meta=(EditCondition = "bStopMontageIfLandCheckFails", EditConditionHides)) - FMontageBlendSettings LandCheckBlendOutSettings; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category="EnableRootMotionZAxisMovement") - bool bDebug = false; - -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } -#endif - - virtual FLinearColor GetEditorColor() override { return FLinearColor(0.0f, 0.74f, 1.0f, 1.0f); }; - virtual FString GetNotifyName_Implementation() const override { return FString("EnableRootMotionZAxisMovement"); }; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - - virtual bool ShouldUseExperimentalUHLFeatures() const override { return true; }; - virtual void NotifyEndOrBlendOut(USkeletalMeshComponent* MeshComp) override; - -private: - EMovementMode InitialMovementMode = EMovementMode::MOVE_None; -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_MagnetTo.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_MagnetTo.h deleted file mode 100644 index 2e1deeee..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_MagnetTo.h +++ /dev/null @@ -1,56 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/AnimNotifies/AnimNotifyState.h" -#include "BehaviorTree/BlackboardData.h" -#include "ANS_MagnetTo.generated.h" - -class ACharacter; - -/** - * - */ -UCLASS() -class UNREALHELPERLIBRARY_API UANS_MagnetTo : public UAnimNotifyState -{ - GENERATED_BODY() - -public: - // UPROPERTY(Category=Decorator, EditAnywhere) - // bool bUseBlackboardActor = false; - UPROPERTY(Category="Decorator", EditAnywhere) - bool bMagnetToActorFromBlackboard = false; - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="bMagnetToActorFromBlackboard", EditConditionHides)) - FBlackboardKeySelector BlackboardActor; - - UPROPERTY(Category="Decorator", EditAnywhere, meta=(Units = "Centimeters")) - float Distance = 200.0f; - UPROPERTY(Category="Decorator", EditAnywhere, meta=(EditCondition="!bMagnetToActorFromBlackboard", EditConditionHides)) - float Angle = 0.0f; - - UPROPERTY(Category="Decorator", EditAnywhere) - bool bCustomTime = false; - -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } -#endif - - virtual FLinearColor GetEditorColor() override { return FLinearColor(0.0f, 0.74f, 1.0f, 1.0f); }; - virtual FString GetNotifyName_Implementation() const override { return FString("MagnetTo"); }; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyTick(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - -private: - TWeakObjectPtr BaseCharacter; - // EMovementMode InitialMovementMode; - float Speed = 0.0f; - float Alpha = 0.0f; - - // UFUNCTION() - // void OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted); -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.h deleted file mode 100644 index 493515d6..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_SpawnAndSwitchPlayerCamera.h +++ /dev/null @@ -1,92 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/Notifies/ANS_UHL_Base.h" -#include "Camera/CameraActor.h" -#include "Core/UHLAttachmentRules.h" -#include "ANS_SpawnAndSwitchPlayerCamera.generated.h" - -// TODO: probably offset property required - -/** - * When this AnimNotifyState begins, it spawns a camera (CameraToSpawnClass), - * blends the view to it over BlendInTime, and when the notify ends, - * blends back to the original view target over BlendTimeOut and destroys the spawned camera. - */ -UCLASS(Blueprintable, meta=(DisplayName="Spawn and Switch Camera")) -class UNREALHELPERLIBRARY_API UANS_SpawnAndSwitchPlayerCamera : public UANS_UHL_Base -{ - GENERATED_BODY() - -public: - - /** - * The CameraActor subclass to spawn when this notify begins. - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera") - TSubclassOf CameraToSpawnClass = ACameraActor::StaticClass(); - - /** - * If set, the socket or bone name on the owning SkeletalMeshComponent to attach the spawned camera to. - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera") - FName AttachSocketName = NAME_None; - - /** - * How to attach Camera to Actor - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera") - FUHLAttachmentRules AttachRules; - - /** - * How long (in seconds) to blend into the spawned camera. - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera", meta=(ClampMin="0.0")) - float BlendInTime = 0.5f; - - /** - * Curve - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera") - TEnumAsByte BlendInFunction = EViewTargetBlendFunction::VTBlend_Cubic; - - /** - * How long (in seconds) to blend back to the player pawn when the notify ends. - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera", meta=(ClampMin="0.0")) - float BlendOutTime = 0.5f; - - /** - * Curve - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera") - TEnumAsByte BlendOutFunction = EViewTargetBlendFunction::VTBlend_Cubic; - - /** - * PlayerController that should be used for camera switching - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera") - int32 PlayerControllerIndex = 0; - - /** - * How much time camera will live after end - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AnimNotify|Camera") - float LifeSpanAfterEnd = 3.0f; - - // UAnimNotifyState interface - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - // End of UAnimNotifyState interface - -private: - /** The camera actor instance we spawned at NotifyBegin. */ - UPROPERTY() - ACameraActor* SpawnedCameraInstance = nullptr; - - /** The original view target we stored so we can restore at NotifyEnd. */ - UPROPERTY() - AActor* PreviousViewTarget = nullptr; -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_AllowCharacterRotation.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_AllowCharacterRotation.h deleted file mode 100644 index 01767d53..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_AllowCharacterRotation.h +++ /dev/null @@ -1,48 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/Notifies/ANS_UHL_Base.h" -#include "GameFramework/CharacterMovementComponent.h" -#include "ANS_UHL_AllowCharacterRotation.generated.h" - -/** - * CharacterMovementComponent->bAllowPhysicsRotationDuringAnimRootMotion = true - * and opportunity to change RotationRate - */ -UCLASS() -class UNREALHELPERLIBRARY_API UANS_UHL_AllowCharacterRotation : public UANS_UHL_Base -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="ActivateAbility") - bool bChangeRotationRate = false; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="ActivateAbility", meta=(EditCondition="bChangeRotationRate")) - FRotator RotationRate = FRotator(0.0f, 0.0f, 90.0f); - -protected: -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } -#endif - - virtual FLinearColor GetEditorColor() override { return FLinearColor(0.799103f, 0.254152f, 0.730461f); }; - virtual FString GetNotifyName_Implementation() const override; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - - virtual void OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted) override; - -private: - UPROPERTY() - FRotator InitialRotationRate = FRotator::ZeroRotator; - - TWeakObjectPtr CharacterMovementComponent; - - UFUNCTION() - void ReturnDefaults(); -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_Base.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_Base.h deleted file mode 100644 index dde8e10f..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_Base.h +++ /dev/null @@ -1,38 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/AnimInstance.h" -#include "Animation/AnimNotifies/AnimNotifyState.h" -#include "ANS_UHL_Base.generated.h" - -class USkeletalMeshComponent; - -/** - * with events like OnMontageBlendOut, OnMontageInterrupted... - * you can disable subscribing OnMontageBlendOut, by "bUseOnMontageBlendingOut=false" in constructor - */ -UCLASS(Blueprintable, Category="UnrealHelperLibrary") -class UNREALHELPERLIBRARY_API UANS_UHL_Base : public UAnimNotifyState -{ - GENERATED_BODY() - -protected: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="ANS_UHL_Base") - bool bUseOnMontageBlendingOut = true; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - -/** Experimental **/ - // Should use experimental features like "NotifyEndOrBlendOut" - virtual bool ShouldUseExperimentalUHLFeatures() const { return false; }; - // experimental works only with "ShouldUseExperimentalUHLFeatures" enabled - virtual void NotifyEndOrBlendOut(USkeletalMeshComponent* MeshComp); -/** ~Experimental **/ - - UFUNCTION() - virtual void OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted); - // TODO OnMontageBlendOut, OnMontageInterrupted, OnCancelled ... -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_DisableWalkOffLedges.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_DisableWalkOffLedges.h deleted file mode 100644 index 4ca1afaf..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/ANS_UHL_DisableWalkOffLedges.h +++ /dev/null @@ -1,30 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/Notifies/ANS_UHL_Base.h" -#include "ANS_UHL_DisableWalkOffLedges.generated.h" - -/** - * - */ -UCLASS() -class UNREALHELPERLIBRARY_API UANS_UHL_DisableWalkOffLedges : public UANS_UHL_Base -{ - GENERATED_BODY() - -public: - /** By default half capsule radius will be used - * but If >= 0, will override the movement component's PerchRadiusThreshold. */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ledge Settings") - float PerchRadiusThreshold = -1.0f; - - virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration, const FAnimNotifyEventReference& EventReference) override; - virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - -private: - // To restore after end - bool bOriginalCanWalkOffLedges; - float OriginalPerchRadius; -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_AttachActorWithUniqueId.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_AttachActorWithUniqueId.h deleted file mode 100644 index 9723a33f..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_AttachActorWithUniqueId.h +++ /dev/null @@ -1,61 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/Notifies/AN_UHL_Base.h" -#include "Core/UHLAttachmentRules.h" -#include "Engine/EngineTypes.h" -#include "AN_AttachActorWithUniqueId.generated.h" - -/** - * Spawns an actor of the specified class, attaches it to a given component socket, - * and tags it with a user-defined unique identifier. The tag allows you to - * later retrieve this exact attached actor by searching your owner’s attached - * actors for the matching tag. - * - * Typical usage: - * 1. During an animation or setup phase, call AN_AttachActorWithUniqueId to - * spawn and attach, for example, a projectile to your character mesh: - * - It spawns the projectile actor at the socket transform. - * - It adds a tag (e.g. “Projectile_42”) so you can distinguish it. - * 2. Later (e.g. when firing), call LaunchProjectile: - * - It searches the character’s attached actors for the tag “Projectile_42”. - * - It finds the correct spawned actor and applies your launch logic. - * - * @param ActorToAttach The UClass of the actor to spawn and attach. - * @param SocketName The name of the socket on OwnerComponent to attach to. - * @param UniqueId A user-defined string used as a tag on the spawned actor. - * @param AttachmentTransformRules Attachment rules - */ -UCLASS() -class UNREALHELPERLIBRARY_API UAN_AttachActorWithUniqueId : public UAN_UHL_Base -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, Category="AttachActorWithUniqueId") - TSoftClassPtr ActorToAttach; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="AttachActorWithUniqueId") - FName UniqueId = "Unique_ID"; - - UPROPERTY(EditAnywhere, Category="AttachActorWithUniqueId", meta = (AnimNotifyBoneName = "true")) - FName SocketName = ""; - - UPROPERTY(EditAnywhere, Category="AttachActorWithUniqueId") - FUHLAttachmentRules AttachmentRules; - -protected: -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } - virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override; -#endif - - virtual FLinearColor GetEditorColor() override { return FColor::FromHex("#FF7DE7"); }; - virtual FString GetNotifyName_Implementation() const override; - - virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_DetachActorWithUniqueId.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_DetachActorWithUniqueId.h deleted file mode 100644 index 48991700..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_DetachActorWithUniqueId.h +++ /dev/null @@ -1,62 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/Notifies/AN_UHL_Base.h" -#include "Core/UHLAttachmentRules.h" -#include "AN_DetachActorWithUniqueId.generated.h" - -/** - * - */ -UCLASS() -class UNREALHELPERLIBRARY_API UAN_DetachActorWithUniqueId : public UAN_UHL_Base -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="DetachActorWithUniqueId") - FName UniqueId = "Unique_ID"; - - UPROPERTY(EditAnywhere, Category="DetachActorWithUniqueId") - FUHLDetachmentRules DetachmentRules; - - UPROPERTY(EditAnywhere, Category="DetachActorWithUniqueId") - bool bEnablePhysicsOnDetach = true; - - UPROPERTY(EditAnywhere, Category="DetachActorWithUniqueId", meta=(EditCondition="bEnablePhysicsOnDetach", EditConditionHides)) - float EnablePhysicsDelay = 0.2f; - - // TODO: add choosing preset or PhysicsSettings - // UPROPERTY(EditAnywhere, Category="DetachActorWithUniqueId", meta=(EditCondition="bEnablePhysicsOnDetach", EditConditionHides)) - // float EnablePhysicsDelay = 1.0f; - - // TODO add option to choose blueprint and click on what component what phys settings should be applied - - // TODO: choosing Impulse and force of detaching - - UPROPERTY(EditAnywhere, Category="DetachActorWithUniqueId") - bool bAutoDestroy = false; - - UPROPERTY(EditAnywhere, Category="DetachActorWithUniqueId", meta=(EditCondition="bAutoDestroy", EditConditionHides)) - float AutoDestroyDelay = 1.0f; - -protected: -#if WITH_EDITOR - /** Override this to prevent firing this notify state type in animation editors */ - virtual bool ShouldFireInEditor() { return false; } - virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override; -#endif - - virtual FLinearColor GetEditorColor() override { return FColor::FromHex("#FF7DE7"); }; - virtual FString GetNotifyName_Implementation() const override; - - virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - - -private: - UPROPERTY() - FName CollisionProfileName = FName("PhysicsActor"); - FTimerHandle TimerHandle; -}; diff --git a/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_UHL_Base.h b/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_UHL_Base.h deleted file mode 100644 index 773b5d3f..00000000 --- a/Source/UnrealHelperLibrary/Public/Animation/Notifies/AN_UHL_Base.h +++ /dev/null @@ -1,20 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Animation/AnimNotifies/AnimNotify.h" -#include "AN_UHL_Base.generated.h" - -class USkeletalMeshComponent; -DECLARE_MULTICAST_DELEGATE_OneParam(FOnNotifySignature, USkeletalMeshComponent*) - -UCLASS() -class UNREALHELPERLIBRARY_API UAN_UHL_Base : public UAnimNotify -{ - GENERATED_BODY() - -public: - virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; - FOnNotifySignature OnNotified; -}; diff --git a/Source/UnrealHelperLibrary/Public/Core/UHLAttachmentRules.h b/Source/UnrealHelperLibrary/Public/Core/UHLAttachmentRules.h deleted file mode 100644 index d062f2a9..00000000 --- a/Source/UnrealHelperLibrary/Public/Core/UHLAttachmentRules.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -#include "Engine/EngineTypes.h" -#include "UHLAttachmentRules.generated.h" - -USTRUCT(BlueprintType) -struct FUHLAttachmentRules -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, Category="Attachment") - EAttachmentRule LocationRule = EAttachmentRule::SnapToTarget; - - UPROPERTY(EditAnywhere, Category="Attachment") - EAttachmentRule RotationRule = EAttachmentRule::SnapToTarget; - - UPROPERTY(EditAnywhere, Category="Attachment") - EAttachmentRule ScaleRule = EAttachmentRule::KeepWorld; - - UPROPERTY(EditAnywhere, Category="Attachment") - bool bWeldSimulatedBodies = true; - - // Conversion to engine struct - FAttachmentTransformRules ToEngineRules() const - { - return FAttachmentTransformRules(LocationRule, RotationRule, ScaleRule, bWeldSimulatedBodies); - } -}; - -USTRUCT(BlueprintType) -struct FUHLDetachmentRules -{ - GENERATED_BODY() - - /** - * Which transform to preserve when detaching: - * KeepRelative or KeepWorld - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Detachment") - EDetachmentRule DetachmentRule = EDetachmentRule::KeepWorld; - - /** - * If true, calls Modify() on the component so that the detach - * is recorded in the transaction buffer (undo/redo) - */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Detachment") - bool bCallModify = false; - - /** - * Convert to Unreal’s native struct, for use in DetachFromComponent / DetachFromActor - */ - FDetachmentTransformRules ToEngineRules() const - { - return FDetachmentTransformRules(DetachmentRule, bCallModify); - } -}; \ No newline at end of file diff --git a/Source/UnrealHelperLibrary/Public/Core/UHLGameplayTags.h b/Source/UnrealHelperLibrary/Public/Core/UHLGameplayTags.h deleted file mode 100644 index bf911043..00000000 --- a/Source/UnrealHelperLibrary/Public/Core/UHLGameplayTags.h +++ /dev/null @@ -1,32 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "NativeGameplayTags.h" - -namespace UHLGameplayTags -{ - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_Gameplay_AbilityInputBlocked); - - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_Debug_CheckGASGameplayTagsOnActor); - - // Abilities - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_Abilities_Character_GlobalTimeDilation); - - // AbilityInputCache - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_AbilityInputCache_Catching); - - // Debug Categories - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem); - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Attributes); - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Effects); - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_Abilities); - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_DebugBasicHUD); - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_AbilitySystem_DebugAbilityTags); - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_InputSystem_EnhancedInputSystem); - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_InputSystem_AbilityInputCache); - UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_UHL_DebugCategory_Collisions); - - // Errors - // UNREALHELPERLIBRARY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(TAG_Error); -}; diff --git a/Source/UnrealHelperLibrary/Public/Development/UHLSettings.h b/Source/UnrealHelperLibrary/Public/Development/UHLSettings.h deleted file mode 100644 index 8e48b41f..00000000 --- a/Source/UnrealHelperLibrary/Public/Development/UHLSettings.h +++ /dev/null @@ -1,26 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Engine/DeveloperSettings.h" -#include "Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.h" -#include "UHLSettings.generated.h" - -/** - * - */ -UCLASS(config="Game", defaultconfig) -class UNREALHELPERLIBRARY_API UUHLSettings : public UDeveloperSettings -{ - GENERATED_BODY() - -public: - UPROPERTY(config, EditAnywhere, Category="EnemyTickOptimizerSubsystemSettings") - FEnemyTickOptimizerSubsystemSettings EnemyTickOptimizerSubsystemSettings; - -protected: -//~UDeveloperSettings interface - virtual FName GetCategoryName() const override { return TEXT("Plugins"); }; -//~End of UDeveloperSettings interface -}; diff --git a/Source/UnrealHelperLibrary/Public/Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.h b/Source/UnrealHelperLibrary/Public/Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.h deleted file mode 100644 index 20efd792..00000000 --- a/Source/UnrealHelperLibrary/Public/Subsystems/EnemyTickManager/EnemyTickOptimizerSubsystem.h +++ /dev/null @@ -1,88 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameFramework/Character.h" -#include "Subsystems/GameInstanceSubsystem.h" -#include "EnemyTickOptimizerSubsystem.generated.h" - - -USTRUCT(BlueprintType) -struct FEnemyTickOptimizerSubsystemSettings -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - bool bEnable = false; - - // How often we update enemies ticks rate - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float UpdateInterval = 0.5f; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float DefaultEnemyTickInterval = 1.0f; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float CloseDistance = 1000.0f; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float MediumDistance = 3000.0f; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float FarDistance = 5000.0f; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float CloseTickInterval = 0.0f; // Every frame - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float MediumTickInterval = 0.1f; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float FarTickInterval = 0.5f; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - bool bSetTickOnActorComponentsAlso = true; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - bool bDontTickIfNotRenderedRecently = true; - - UPROPERTY(EditAnywhere, Category = "Tick Optimization") - float RecentlyNotRenderedTickInterval = 1.0f; -}; - -/** - * - */ -UCLASS() -class UNREALHELPERLIBRARY_API UEnemyTickOptimizerSubsystem : public UGameInstanceSubsystem -{ - GENERATED_BODY() - -public: - virtual void Initialize(FSubsystemCollectionBase& Collection) override; - virtual void Deinitialize() override; - - // Register an enemy with the subsystem - void RegisterEnemy(ACharacter* Enemy); - - // Unregister an enemy from the subsystem - void UnregisterEnemy(ACharacter* Enemy); - -private: - // Array to store all registered enemies - TArray RegisteredEnemies; - - // Timer handle for periodic tick interval updates - FTimerHandle TickOptimizerTimerHandle; - - // Function to update tick intervals based on distance to the player - void UpdateTickIntervals(); - - // Configurable properties for distance thresholds and tick intervals - FEnemyTickOptimizerSubsystemSettings Settings; - - bool bTickAllowed = false; - float AccumulatedTime = 0.0f; - float DesiredInterval = 0.5f; -}; diff --git a/Source/UnrealHelperLibrary/Public/UI/UHLHUD.h b/Source/UnrealHelperLibrary/Public/UI/UHLHUD.h deleted file mode 100644 index 0dc8481f..00000000 --- a/Source/UnrealHelperLibrary/Public/UI/UHLHUD.h +++ /dev/null @@ -1,51 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "GameFramework/HUD.h" -#include "UHLHUD.generated.h" - -USTRUCT(BlueprintType) -struct FLineInfo -{ - GENERATED_BODY() - - FString Id = ""; - FVector2D Start = FVector2D::ZeroVector; - FVector2D End = FVector2D::ZeroVector; - FColor Color = FColor::White; - float LineThickness = 1.0f; - - FString Text = ""; - FColor TextColor = FColor::White; - - bool bRelativeToViewportCenter = false; - bool bPersistent = false; - -// private: -// float TimePassed = 0.0f; -}; - -/** - * - */ -UCLASS() -class UNREALHELPERLIBRARY_API AUHLHUD : public AHUD -{ - GENERATED_BODY() - -public: - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="UHL HUD") - bool bEnabledDrawDebug = true; - - UFUNCTION(BlueprintCallable, Category="UHL HUD") - void AddOrUpdateLineInfoToDrawNextTick(FLineInfo LineInfo_In); - -protected: - virtual void DrawHUD() override; - -private: - UPROPERTY() - TArray LineInfos; -}; diff --git a/Source/UnrealHelperLibrary/Public/UnrealHelperLibrary.h b/Source/UnrealHelperLibrary/Public/UnrealHelperLibrary.h deleted file mode 100644 index 1e0b039a..00000000 --- a/Source/UnrealHelperLibrary/Public/UnrealHelperLibrary.h +++ /dev/null @@ -1,15 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "Modules/ModuleManager.h" - -UNREALHELPERLIBRARY_API DECLARE_LOG_CATEGORY_EXTERN(LogUnrealHelperLibrary, Log, All); - -class FUnrealHelperLibraryModule : public IModuleInterface -{ -public: - /** IModuleInterface implementation */ - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; diff --git a/Source/UnrealHelperLibrary/Public/UnrealHelperLibraryTypes.h b/Source/UnrealHelperLibrary/Public/UnrealHelperLibraryTypes.h deleted file mode 100644 index 6c931f84..00000000 --- a/Source/UnrealHelperLibrary/Public/UnrealHelperLibraryTypes.h +++ /dev/null @@ -1,55 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" // This includes FVector definition -#include "UnrealHelperLibraryTypes.generated.h" // Required for UENUM macros - -const FVector VECTOR_ERROR = FVector(404.0f, 404.0f, 404.0f); -const float FLOAT_ERROR = -99999.0f; - - -UENUM(BlueprintType) -enum class EUHLDirection: uint8 -{ - None, - - Front, - Back, - Left, - Right, - - FrontLeft, - FrontRight, - BackLeft, - BackRight, - - MAX UMETA(Hidden) -}; - -UENUM(BlueprintType) -enum class EUHLSettingsSource: uint8 -{ - None UMETA(Hidden), - - Node, - DataAsset, - Actor, - - MAX UMETA(Hidden) -}; - -// EUHLBuildType not same as EBuildConfiguration, if we WITH_EDITOR returns Editor, -// no matter what EBuildConfiguration is currently used(mostly WITH_EDITOR is Development) -// if real build returns EBuildConfiguration -UENUM(BlueprintType) -enum class EUHLBuildType: uint8 -{ - None UMETA(Hidden), - Editor UMETA(ToolTip="Are you in editor"), - - Debug, - Development, - Shipping, - Test, -}; diff --git a/Source/UnrealHelperLibrary/Public/Utils/UHLLoadingUtilLibrary.h b/Source/UnrealHelperLibrary/Public/Utils/UHLLoadingUtilLibrary.h deleted file mode 100644 index 73a75c18..00000000 --- a/Source/UnrealHelperLibrary/Public/Utils/UHLLoadingUtilLibrary.h +++ /dev/null @@ -1,46 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Kismet/BlueprintFunctionLibrary.h" -#include "UHLLoadingUtilLibrary.generated.h" - -class UObject; -struct FFrame; - -/** - * Mostly copy-pasted from Lyra - */ -UCLASS() -class UNREALHELPERLIBRARY_API UUHLLoadingUtilLibrary : public UBlueprintFunctionLibrary -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = "Loading", meta = (WorldContext = "WorldContextObject")) - static void ApplyDefaultPriorityLoading(const UObject* WorldContextObject); - - UFUNCTION(BlueprintCallable, Category = "Loading", meta = (WorldContext = "WorldContextObject")) - static void ApplyStreamingPriorityLoading(const UObject* WorldContextObject); - - UFUNCTION(BlueprintCallable, Category = "Loading", meta = (WorldContext = "WorldContextObject")) - static void ApplyHighestPriorityLoading(const UObject* WorldContextObject); - - UFUNCTION(BlueprintCallable, Category = "Loading", meta = (WorldContext = "WorldContextObject")) - static void ApplyCustomPriorityLoading(const UObject* WorldContextObject, bool UseHighPriorityLoading, float MaxAsyncLoadingMilliSeconds, float MaxActorUpdateMilliSeconds); - - UFUNCTION(BlueprintCallable, Category = "Loading") - static void ForceGarbageCollection(); - - UFUNCTION(BlueprintCallable, Category = "Loading", meta = (WorldContext = "WorldContextObject")) - static void FlushLevelStreaming(const UObject* WorldContextObject); - -private: - static void CaptureDefaultLoadingSettings(); - static bool HasCapturedDefaults; - static float DefaultLevelStreamingActorsUpdateTimeLimit; - static float DefaultLevelStreamingComponentsRegistrationGranularity; - static float DefaultAsyncLoadingTimeLimit; - -}; diff --git a/Source/UnrealHelperLibrary/Public/Utils/UHLTraceUtilsBPL.h b/Source/UnrealHelperLibrary/Public/Utils/UHLTraceUtilsBPL.h deleted file mode 100644 index 71043aa1..00000000 --- a/Source/UnrealHelperLibrary/Public/Utils/UHLTraceUtilsBPL.h +++ /dev/null @@ -1,54 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Engine/EngineTypes.h" -#include "CollisionQueryParams.h" -#include "Kismet/BlueprintFunctionLibrary.h" -#include "UHLTraceUtilsBPL.generated.h" - -/** - * - */ -UCLASS() -class UNREALHELPERLIBRARY_API UUHLTraceUtilsBPL : public UBlueprintFunctionLibrary -{ - GENERATED_BODY() - -public: - static bool SweepCapsuleSingleByChannel(const UWorld* World, struct FHitResult& OutHit, const FVector& Start, - const FVector& End, float Radius, float HalfHeight, const FQuat& Rot, - ECollisionChannel TraceChannel, const FCollisionQueryParams& Params, - const FCollisionResponseParams& ResponseParam, bool bDrawDebug = false, - float DrawTime = -1.0f, FColor TraceColor = FColor::Black, - FColor HitColor = FColor::Red, float FailDrawTime = -1.0f); - static bool SweepCapsuleMultiByChannel(const UWorld* World, TArray& OutHits, const FVector& Start, - const FVector& End, float Radius, float HalfHeight, const FQuat& Rot, - ECollisionChannel TraceChannel, const FCollisionQueryParams& Params, - const FCollisionResponseParams& ResponseParam, bool bDrawDebug = false, - float DrawTime = -1.0f, FColor TraceColor = FColor::Black, - FColor HitColor = FColor::Red, float FailDrawTime = -1.0f); - - static bool SweepSphereSingleByChannel(const UWorld* World, struct FHitResult& OutHit, const FVector& Start, - const FVector& End, float Radius, - ECollisionChannel TraceChannel, const FCollisionQueryParams& Params, - const FCollisionResponseParams& ResponseParam, bool bDrawDebug = false, - float DrawTime = -1.0f, FColor TraceColor = FColor::Black, - FColor HitColor = FColor::Red); - static bool OverlapCapsuleAnyByProfile(const UWorld* World, const FVector& Pos, float Radius, float HalfHeight, - FQuat Rot, FName ProfileName, const FCollisionQueryParams& QueryParams, - bool bDrawDebug = false, float DrawTime = -1.0f, - FColor HitColor = FColor::Red); - static bool OverlapBlockingTestByProfile(const UWorld* World, const FVector& Pos, float Radius, float HalfHeight, - FQuat Rot, FName ProfileName, const FCollisionQueryParams& QueryParams, - bool bDrawDebug = false, float DrawTime = -1.0f, - FColor HitColor = FColor::Red); - static bool SweepCapsuleMultiByProfile(const UWorld* World, TArray& OutHits, const FVector& Start, - const FVector& End, float Radius, float HalfHeight, - const FQuat& Rot, FName ProfileName, - const FCollisionQueryParams& Params, - bool bDrawDebug = false, float DrawTime = -1.0f, - FColor TraceColor = FColor::Black, FColor HitColor = FColor::Red); - // SweepCapsuleMultiByProfile -}; diff --git a/Source/UnrealHelperLibrary/Public/Utils/UnrealHelperLibraryBPL.h b/Source/UnrealHelperLibrary/Public/Utils/UnrealHelperLibraryBPL.h deleted file mode 100644 index 953a1a81..00000000 --- a/Source/UnrealHelperLibrary/Public/Utils/UnrealHelperLibraryBPL.h +++ /dev/null @@ -1,354 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -#pragma once - -#include "UnrealHelperLibraryTypes.h" -#include "AssetRegistry/AssetData.h" -#include "AssetRegistry/AssetRegistryModule.h" -#include "Kismet/BlueprintFunctionLibrary.h" -#include "Math/UnrealMathUtility.h" -#include "UI/UHLHUD.h" -#include "UnrealHelperLibraryBPL.generated.h" - -class UWidget; -struct FBlackboardKeySelector; - -const float RELATIVE_POINT_ARROW_SIZE = 200.0f; - -// TODO improve -// - validations if Actor1/Actors2 is nullptr - DebugPrintString it -// - keywords for every method - -/* - * Function library class. - * Each function in it is expected to be static and represents blueprint node that can be called in any blueprint. - * - * When declaring function you can define metadata for the node. Key function specifiers will be BlueprintPure and BlueprintCallable. - * BlueprintPure - means the function does not affect the owning object in any way and thus creates a node without Exec pins. - * BlueprintCallable - makes a function which can be executed in Blueprints - Thus it has Exec pins. - * DisplayName - full name of the node, shown when you mouse over the node and in the blueprint drop down menu. - * Its lets you name the node using characters not allowed in C++ function names. - * CompactNodeTitle - the word(s) that appear on the node. - * Keywords - the list of keywords that helps you to find node when you search for it using Blueprint drop-down menu. - * Good example is "Print String" node which you can find also by using keyword "log". - * Category - the category your node will be under in the Blueprint drop-down menu. - * - * For more info on custom blueprint nodes visit documentation: - * https://wiki.unrealengine.com/Custom_Blueprint_Node_Creation - */ -UCLASS() -class UNREALHELPERLIBRARY_API UUnrealHelperLibraryBPL : public UBlueprintFunctionLibrary -{ - GENERATED_BODY() - -public: - // UFUNCTION(BlueprintCallable, meta = (Keywords = "UnrealHelperLibrary sample test testing"), Category = "UnrealHelperLibraryTesting") - // static float UnrealHelperLibraryRandomWeight(TMap); - - /** Gameplay **/ - // Get HitReactDirection - direction(front/back/left/right) opposite to character(SourceActorLocation) that made hit - // TODO add - // - GetHitSourceDirection - // - bool bUse8Directions - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary") - static EUHLDirection GetHitReactDirection(const FVector& SourceActorLocation, const AActor* TargetActor); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary", meta = (WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary ui widget editor viewport")) - static FVector2D GetViewportSizeUnscaled(UObject* WorldContextObject); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary", meta = (WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary ui widget editor viewport")) - static FVector2D GetWidgetCenterPosition(UObject* WorldContextObject, UWidget* Widget); - // UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary") - // static bool ProjectWorldLocationToWidgetPositionWithScales(APlayerController* PlayerController, FVector WorldLocation, FVector2D& ViewportPosition, bool bPlayerViewportRelative); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary", meta = (WorldContext = "WorldContextObject")) - static float GetActorDistanceToCenterOfScreen(UObject* WorldContextObject, const AActor* Actor, APlayerController* PlayerController, bool bPlayerViewportRelative = true, const bool bDebug = false, const float DebugLifetime = -1); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary", meta = (WorldContext = "WorldContextObject")) - static AActor* GetActorClosestToCenterOfScreen(UObject* WorldContextObject, const TArray& Actors, APlayerController* PlayerController, FVector2D& ScreenPosition, bool bPlayerViewportRelative = true, const bool bDebug = false, const float DebugLifetime = -1); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary") - static AActor* GetMostDistantActor(const TArray& Actors, float& MaxDistance_Out, FVector Location, const bool bDebug = false, const float DebugLifetime = -1); - - // TODO GetDistanceOperation - MostDistant/LeastDistant/Average/Medium/... - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary", meta = (WorldContext = "WorldContextObject")) - static FVector GetMostDistantVector(const UObject* WorldContextObject, - const TArray Vectors, FVector Location, - float& MaxDistance_Out, int32& Index_Out, - bool bUseNavigation = false, - const bool bDebug = false, const float DebugLifetime = -1); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary", meta = (WorldContext = "WorldContextObject")) - static FVector GetMostDistantActorComponent(const UObject* WorldContextObject, - const TArray SceneComponents, FVector Location, - float& MaxDistance_Out, int32& Index_Out, - bool bUseNavigation = false, - const bool bDebug = false, const float DebugLifetime = -1); - - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary") - static void DrawDebugLineOnCanvas( - UObject* WorldContextObject, - const FLineInfo& LineInfo, - const bool bRelativeToViewportCenter = false - ); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary") - static void DrawDebugCrossHair( - UObject* WorldContextObject, - const float CrossHairLineLength, const float LineThickness, - const float AngleToRotate, - const FVector2f& CrossHairCenterScreenSpace, - const FLinearColor& LineColor, - const bool bRelativeToViewportCenter = false - ); - /** Gameplay **/ - - /** Debug **/ - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Debug", meta = (Keywords = "UnrealHelperLibrary debug Development", AdvancedDisplay = "D,E,F,G,H,I,J,Duration")) - static void DebugPrintStrings(const FString& A, const FString& B = "", const FString& C = "", const FString& D = "", const FString& E = "", const FString& F = "", const FString& G = "", - const FString& H = "", const FString& I = "", const FString& J = "", float Duration = 2.0f, const FName Key = NAME_None, const bool bEnabled = true); - UFUNCTION(Category = "UnrealHelperLibrary", meta = (WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary debug Development", AdvancedDisplay = "D,E,F,G,H,I,J,Duration")) - static void DebugPrintString(const UObject* WorldContextObject, const FString& A, float Duration = 2.0f, const FName Key = NAME_None, const bool bEnabled = true); - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Debug", meta = (Keywords = "UnrealHelperLibrary debug Development")) - static void DrawDebugBar(); - /** ~Debug **/ - - /** Anims **/ - // TODO dont work correctly, fix - // if SectionName not specified will be used first section - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Animations", meta = (Keywords = "UnrealHelperLibrary anim montage")) - static float GetAnimMontageSectionLengthByName(UAnimMontage* AnimMontage, FName SectionName = NAME_None); - /** ~Anims **/ - - /** Angles **/ - /** - * Calculates relative angle to other actor [-180, 180] - * @param ActorRelativeToWhomAngleCalculated - * @param TargetActor - * @param bRelativeToActorBack sometimes you want to know actors that nearest to character backside - * @param bDebug - * @param DebugLifetime - * @param DebugColor - */ - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Angles", - meta = (DefaultToSelf = "ActorRelativeToWhomAngleCalculated", Keywords = "UnrealHelperLibrary debug Development angle relative GetAngle RelativeTo", - AdvancedDisplay = "bDebug,DebugLifetime,DebugColor,bRelativeToActorBack")) - static float RelativeAngleToActor(AActor* ActorRelativeToWhomAngleCalculated, AActor* TargetActor, bool bRelativeToActorBack = false, const bool bDebug = false, const float DebugLifetime = -1, - const FLinearColor DebugColor = FLinearColor::White); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Angles", - meta = (DefaultToSelf = "ActorRelativeToWhomAngleCalculated", Keywords = "UnrealHelperLibrary debug Development angle relative GetAngle RelativeTo")) - static float RelativeAngleToVector(AActor* ActorRelativeToWhomAngleCalculated, FVector TargetVector); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Angles", meta = (Keywords = "UnrealHelperLibrary debug Development angle relative GetAngle RelativeTo")) - static float RelativeAngleVectorToVector(FVector VectorRelativeToWhomAngleCalculated, FVector TargetVector); - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Angles") - static EUHLDirection GetOppositeDirection(EUHLDirection Direction_In); - /** ~Angles **/ - - /** Utils **/ - // Get project version from "Project Settings" - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary version")) - static FString GetProjectVersion(); - UFUNCTION(BlueprintCallable, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary debug Development")) - static TArray GetNamesOfComponentsOnObject(UObject* OwnerObject, UClass* Class); - - // return all assets of specified class in template - template - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils") - static void GetAssetsOfClass(TArray& OutArray) - { - FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); - TArray AssetData; - AssetRegistryModule.Get().GetAssetsByClass(T::StaticClass()->GetClassPathName(), AssetData); - for (int i = 0; i < AssetData.Num(); i++) - { - T* Object = Cast(AssetData[i].GetAsset()); - OutArray.Add(Object); - } - } - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils") - static UActorComponent* GetActorComponentByName(AActor* Actor, FString Name); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils") - static USceneComponent* GetSceneComponentByName(AActor* Actor, FString Name); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary bounds box extent")) - static FVector GetRandomPointInBox(const USceneComponent* Component, bool bOnGround, bool bDrawDebug = false, float DebugDrawTime = 5.0f); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary bounds box extent")) - static FVector GetHighestPointInBox(const USceneComponent* Component); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary bounds box extent")) - static FVector GetCenterPointInBox(const USceneComponent* Component); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary bounds box extent")) - static FBox GetComponentBox(const USceneComponent* Component); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary vector center")) - static FVector GetCenterPointBetweenVectors(const UObject* WorldContextObject, const FVector& PointA, const FVector& PointB, - const bool bDebug = false, const float DebugLifetime = -1, const FLinearColor DebugColor = FLinearColor::White); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (WorldContext = "WorldContextObject", AdvancedDisplay = "OverrideZ,bDebug,DebugLifetime,DebugColor")) - static void GetPointAtRelativeAngleUsingVector(FVector& Point, FRotator& PointRotation, const UObject* WorldContextObject, const FVector& Location, const FVector& ForwardVector, const float Angle, const float Distance, const float OverrideZ = -999999.f, const bool bDebug = false, - const float DebugLifetime = -1, const FLinearColor DebugColor = FLinearColor::White); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (DefaultToSelf = "ActorIn", AdvancedDisplay = "bDebug,DebugLifetime,DebugColor")) - static void GetPointAtRelativeAngle(FVector& Point, FRotator& PointRotation, const AActor* ActorIn, const float Angle, const float Distance, const bool bDebug = false, - const float DebugLifetime = -1, const FLinearColor DebugColor = FLinearColor::White); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (DefaultToSelf = "ActorIn", AdvancedDisplay = "bDebug,DebugLifetime,DebugColor,DebugText")) - static void GetPointAtRelativeDirection(FVector& Point, FRotator& PointRotation, const AActor* ActorIn, const EUHLDirection Direction, const float Distance, const bool bDebug = false, - const float DebugLifetime = -1, const FLinearColor DebugColor = FLinearColor::White, const FText DebugText = FText()); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (DefaultToSelf = "Actor1", AdvancedDisplay = "bTakeZFromActor1,bDebug,DebugLifetime,DebugColor")) - static void GetPointAtAngleRelativeToOtherActor(FVector& Point, FRotator& PointRotation, const AActor* Actor1, const AActor* Actor2, const float Angle, const float Distance, - const bool bTakeZFromActor1 = true, const bool bDebug = false, const float DebugLifetime = -1, const FLinearColor DebugColor = FLinearColor::White); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (DefaultToSelf = "Actor1", AdvancedDisplay = "bTakeZFromActor1,bDebug,DebugLifetime,DebugColor")) - static void GetPointAtDirectionRelativeToOtherActor(FVector& Point, FRotator& PointRotation, const AActor* Actor1, const AActor* Actor2, const EUHLDirection Direction, const float Distance, - const bool bTakeZFromActor1 = true, const bool bDebug = false, const float DebugLifetime = -1, const FLinearColor DebugColor = FLinearColor::White); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (AdvancedDisplay = "bTakeZFromVector1,bDebug,DebugLifetime,DebugColor")) - static void GetPointAtDirectionRelativeToOtherVector(FVector& Point, FRotator& PointRotation, const FVector& Vector1, const FVector& Vector2, const EUHLDirection Direction, const float Distance, - const bool bTakeZFromVector1 = true, const bool bDebug = false, const float DebugLifetime = -1, const FLinearColor DebugColor = FLinearColor::White); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils") - static float DirectionToAngle(const EUHLDirection DirectionIn); - - // TODO test not sure that it works like i wanted - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Directions") - static EUHLDirection ConvertMovementInputVectorToDirection(const FVector& Vector); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Directions") - static EUHLDirection GetMovementDirection(const FVector& Velocity, const FRotator& ActorRotation, float DeadZone); - - /** - * Determines the enemy's movement direction relative to your character's facing, - * compensating for your own movement velocity. Supports both 8-way and 4-way output, - * and can draw debug visualization in world space. - * - * @param WorldContextObject Context for drawing (usually 'self' in Blueprint) - * @param EnemyVelocity World-space velocity of the enemy pawn - * @param MyVelocity World-space velocity of your pawn - * @param ActorLocation Your pawn’s world location (for debug drawing) - * @param ActorRotation Your pawn’s world rotation (defines forward) - * @param DeadZone Speed threshold below which returns None (<=0 uses KINDA_SMALL_NUMBER) - * @param AngleToleranceDeg Degrees tolerance around boundaries to snap - * @param bFourWay If true, collapse diagonals into nearest cardinal (4-way) - * @param bDebug If true, draw debug arrows, lines, and labels in world - * @param DebugDuration Lifetime for debug drawings (0 = single frame) - * @param DebugThickness Line thickness for debug drawings - * @return The calculated direction enum (EUHLDirection) - */ - UFUNCTION(BlueprintCallable, Category="Movement|Direction", meta=(WorldContext="WorldContextObject")) - static EUHLDirection GetEnemyMovementDirectionRelativeToCharacter( - UObject* WorldContextObject, - const FVector& EnemyVelocity, - const FVector& MyVelocity, - const FVector& ActorLocation, - const FRotator& ActorRotation, - float DeadZone, - float AngleToleranceDeg = 5.f, - bool bFourWay = false, - bool bDebug = false, - float DebugDuration = 0.f, - float DebugThickness = 2.f - ); - - - // e.g. 60% -> x0.4, 40% -> x0.6, 100% -> x0.0, 0% -> x1.0 - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils") - static float ConvertPercentToMultiplier(float Percent); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary", meta = (DefaultToSelf = "ActorIn", Keywords = "UnrealHelperLibrary attach")) - static AActor* FindAttachedActorByTag(AActor* ActorIn, FName Tag); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary preview editor")) - static bool IsPreviewWorld(UObject* WorldContextObject); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary")) - static bool IsGameWorld(UObject* WorldContextObject); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary editor")) - static bool IsEditorWorld(UObject* WorldContextObject); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary preview editor")) - static bool IsObjectInPreviewWorld(UObject* Object); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary preview editor")) - static bool IsObjectInEditorWorld(UObject* Object); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary game preview editor")) - static bool IsObjectInGameWorld(UObject* Object); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (WorldContext = "WorldContextObject", Keywords = "UnrealHelperLibrary")) - static bool IsWorldTearingDown(UObject* WorldContextObject); - // TODO: ??? - // UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary") - // static EUHLDirection AngleToDirection(const float AngleIn); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Angles", meta = (DefaultToSelf = "Actor", Keywords = "UnrealHelperLibrary angle distance")) - static bool IsOtherActorInAngle(AActor* Actor, AActor* OtherActor, TArray Ranges); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Angles", meta = (DefaultToSelf = "Character", Keywords = "UnrealHelperLibrary angle distance")) - static bool InRangeToOtherCharacter(ACharacter* Character, ACharacter* OtherCharacter, FFloatRange Range, bool bIncludeSelfCapsuleRadius, bool bIncludeTargetCapsuleRadius); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Angles", meta = (DefaultToSelf = "Character", Keywords = "UnrealHelperLibrary angle distance")) - static bool InRangeToLocation(ACharacter* Character, FVector Location, FFloatRange Range, bool bIncludeSelfCapsuleRadius); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary file path")) - static FString GetPathToFile(UObject* Object); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary build debug")) - static bool IsDebugBuild(); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary build debug development")) - static bool IsDevelopmentBuild(); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary build debug production release shipping")) - static bool IsShippingBuild(); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary build debug test")) - static bool IsTestBuild(); - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary editor InEditor withEditor")) - static bool IsInEditor(); - // Are in Debug/Development/Shipping/Test build or Editor. If we WITH_EDITOR returns Editor, - // no matter what EBuildConfiguration is currently used(mostly WITH_EDITOR is Development) - // if real build returns - FApp::GetBuildConfiguration() result, except Debug and DebugGame are same "Debug" - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Utils", meta = (Keywords = "UnrealHelperLibrary build debug test")) - static EUHLBuildType GetBuildType(); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Random", meta = (Keywords = "UnrealHelperLibrary random interval")) - static float RandomValueInInterval(FFloatInterval Range); - - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|World", meta = (Keywords = "UnrealHelperLibrary world map level")) - static bool IsWorldPartitionEnabled(UObject* WorldContextObject); - - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|World", meta = (Keywords = "UnrealHelperLibrary world map level")) - static bool IsLevelHasSublevels(UObject* WorldContextObject); - /** ~Utils **/ - - /** World **/ - - /** - * Returns all ULevelStreaming objects in the current world. - * @param WorldContextObject Context (e.g. self, GetGameInstance, etc.) - * @param OutStreamingLevels Array of streaming‐level objects. - */ - UFUNCTION(BlueprintCallable, Category="World|Streaming Levels", meta=(WorldContext="WorldContextObject")) - static void GetAllStreamingLevels(UObject* WorldContextObject, TArray& OutStreamingLevels); - - /** - * Returns all sub‐levels currently loaded in the world (persistent + streamed‑in). - * @param WorldContextObject Context object to resolve the UWorld (e.g. self, GetGameInstance, etc.). - * @param OutSubLevels Array of all ULevel pointers in this world. - */ - UFUNCTION(BlueprintCallable, Category="World|Levels", meta=(WorldContext="WorldContextObject")) - static void GetAllSubLevels(UObject* WorldContextObject, TArray& OutSubLevels); - - static bool IsMapPackageName(const FString& PackageName); - static FString GetCleanLevelName(const FString& PackageName); - - /** - * Returns the package names of *all* sub‑levels in the world: - * - The persistent level - * - Every streaming‐level, regardless of whether it's loaded yet - * - * @param WorldContextObject Any object in the target world (e.g. Self, GameInstance, etc.) - * @param OutLevelPackageNames Array of level package names (e.g. "/Game/Maps/MySubLevel") - */ - UFUNCTION(BlueprintCallable, Category="World|Levels", meta=(WorldContext="WorldContextObject")) - static void GetAllSubLevelPackageNames(UObject* WorldContextObject, TArray& OutLevelPackageNames); - - /** ~World **/ - - /** Colors **/ - // "Makes a random but quite nice color" - literally C++ FColor::MakeRandomColor - // if seed >= 0 than FColor::MakeRandomSeededColor will be used - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Colors", meta = (Keywords = "UnrealHelperLibrary color random", AdvancedDisplay = "Seed")) - static FColor RandomColor(int32 Seed = -1); - // "Makes a random but quite nice color" - literally C++ FLinearColor::MakeRandomColor - // if seed >= 0 than FLinearColor::MakeRandomSeededColor will be used - UFUNCTION(BlueprintPure, Category = "UnrealHelperLibrary|Colors", meta = (Keywords = "UnrealHelperLibrary color random", AdvancedDisplay = "Seed")) - static FLinearColor RandomLinearColor(int32 Seed = -1); - /** ~Colors **/ -}; diff --git a/Source/UnrealHelperLibrary/UnrealHelperLibrary.Build.cs b/Source/UnrealHelperLibrary/UnrealHelperLibrary.Build.cs deleted file mode 100644 index ddeb069e..00000000 --- a/Source/UnrealHelperLibrary/UnrealHelperLibrary.Build.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Pavel Penkov 2025 All Rights Reserved. - -using UnrealBuildTool; - -public class UnrealHelperLibrary : ModuleRules -{ - public UnrealHelperLibrary(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicIncludePaths.AddRange( - new string[] { - // ... add public include paths required here ... - } - ); - - - PrivateIncludePaths.AddRange( - new string[] { - // ... add other private include paths required here ... - } - ); - - - PublicDependencyModuleNames.AddRange( - new string[] - { - "Core", - // ... add other public dependencies that you statically link with here ... - "GameplayAbilities", - "GameplayTags", - "GameplayTasks", - "AIModule", - "EnhancedInput", - } - ); - - - PrivateDependencyModuleNames.AddRange( - new string[] - { - "CoreUObject", - "Engine", - "Slate", - "SlateCore", - "UMG", - "AnimGraphRuntime", - "DeveloperSettings", - "NavigationSystem" - // ... add private dependencies that you statically link with here ... - } - ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - } -} diff --git a/UnrealHelperLibrary.uplugin b/UnrealHelperLibrary.uplugin deleted file mode 100644 index b932891c..00000000 --- a/UnrealHelperLibrary.uplugin +++ /dev/null @@ -1,130 +0,0 @@ -{ - "FileVersion": 3, - "Version": 150, - "VersionName": "1.5.0", - "FriendlyName": "UnrealHelperLibrary", - "Description": "Helps working with AI, GAS, customizing editor and so on", - "Category": "AI", - "CreatedBy": "Ciberus", - "CreatedByURL": "https://github.com/Ciberusps", - "DocsURL": "https://github.com/Ciberusps/unreal-helper-library", - "MarketplaceURL": "", - "SupportURL": "https://github.com/Ciberusps/unreal-helper-library/issues", - "FabURL": "com.epicgames.launcher://ue/Fab/product/19390f7a-1d31-46ee-a54c-511b7f1a8166", - "EnabledByDefault": true, - "CanContainContent": true, - "Installed": false, - "IsBetaVersion": false, - "IsExperimentalVersion": false, - "Modules": [ - { - "Name": "UnrealHelperLibrary", - "Type": "Runtime", - "LoadingPhase": "Default", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLAI", - "Type": "Runtime", - "LoadingPhase": "Default", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLAIEditor", - "Type": "Editor", - "LoadingPhase": "PostEngineInit", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLGAS", - "Type": "Runtime", - "LoadingPhase": "Default", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLDebugSystem", - "Type": "Runtime", - "LoadingPhase": "Default", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLDebugSystemEditor", - "Type": "Editor", - "LoadingPhase": "PostEngineInit", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLDebug", - "Type": "Runtime", - "LoadingPhase": "Default", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLCharacter", - "Type": "Runtime", - "LoadingPhase": "Default", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLEditor", - "Type": "Editor", - "LoadingPhase": "PostEngineInit", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "UHLModulesHelper", - "Type": "Editor", - "LoadingPhase": "PostEngineInit", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "CommonMaps", - "Type": "Editor", - "LoadingPhase": "PostEngineInit", - "PlatformAllowList": [ - "Win64" - ] - } - ], - "Plugins": [ - { - "Name": "GameplayAbilities", - "Enabled": true - }, - { - "Name": "DataRegistry", - "Enabled": true - }, - { - "Name": "GameplayTagsEditor", - "Enabled": true, - "TargetAllowList": [ - "Editor" - ] - }, - { - "Name": "EnhancedInput", - "Enabled": true - } - ] -} From bdaa06d773b47ce6ac68284691b2196dac50050d Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 13:38:18 +0300 Subject: [PATCH 05/21] install UHL plugins as submodules --- .gitmodules | 21 +++++++++++++++++++++ UHL | 1 + UHLAI | 1 + UHLBehaviorTrees | 1 + UHLCharacter | 1 + UHLCommonMaps | 1 + UHLDebugSystem | 1 + UHLGAS | 1 + 8 files changed, 28 insertions(+) create mode 100644 .gitmodules create mode 160000 UHL create mode 160000 UHLAI create mode 160000 UHLBehaviorTrees create mode 160000 UHLCharacter create mode 160000 UHLCommonMaps create mode 160000 UHLDebugSystem create mode 160000 UHLGAS diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..29847937 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,21 @@ +[submodule "UHL"] + path = UHL + url = https://github.com/Ciberusps/UHL.git +[submodule "UHLAI"] + path = UHLAI + url = https://github.com/Ciberusps/UHLAI.git +[submodule "UHLBehaviorTrees"] + path = UHLBehaviorTrees + url = https://github.com/Ciberusps/UHLBehaviorTrees.git +[submodule "UHLCharacter"] + path = UHLCharacter + url = https://github.com/Ciberusps/UHLCharacter.git +[submodule "UHLCommonMaps"] + path = UHLCommonMaps + url = https://github.com/Ciberusps/UHLCommonMaps.git +[submodule "UHLDebugSystem"] + path = UHLDebugSystem + url = https://github.com/Ciberusps/UHLDebugSystem.git +[submodule "UHLGAS"] + path = UHLGAS + url = https://github.com/Ciberusps/UHLGAS.git diff --git a/UHL b/UHL new file mode 160000 index 00000000..97b3e8c7 --- /dev/null +++ b/UHL @@ -0,0 +1 @@ +Subproject commit 97b3e8c79e3cc18f093414f6c837a771e983e0e1 diff --git a/UHLAI b/UHLAI new file mode 160000 index 00000000..374d4b41 --- /dev/null +++ b/UHLAI @@ -0,0 +1 @@ +Subproject commit 374d4b416234af7e68e5041a496c7038e4e01630 diff --git a/UHLBehaviorTrees b/UHLBehaviorTrees new file mode 160000 index 00000000..9f18dbb7 --- /dev/null +++ b/UHLBehaviorTrees @@ -0,0 +1 @@ +Subproject commit 9f18dbb7e5e8d8a0e6ea946930711554c0528ea5 diff --git a/UHLCharacter b/UHLCharacter new file mode 160000 index 00000000..5b0abcd5 --- /dev/null +++ b/UHLCharacter @@ -0,0 +1 @@ +Subproject commit 5b0abcd50288059aa9c0c4ff02411f49717c6c33 diff --git a/UHLCommonMaps b/UHLCommonMaps new file mode 160000 index 00000000..bc768ed4 --- /dev/null +++ b/UHLCommonMaps @@ -0,0 +1 @@ +Subproject commit bc768ed4e9357b309858b57701acaf6306982be5 diff --git a/UHLDebugSystem b/UHLDebugSystem new file mode 160000 index 00000000..88d6b902 --- /dev/null +++ b/UHLDebugSystem @@ -0,0 +1 @@ +Subproject commit 88d6b902e91b2d90565c87d2451006bc2bc809f3 diff --git a/UHLGAS b/UHLGAS new file mode 160000 index 00000000..0a0f0a3a --- /dev/null +++ b/UHLGAS @@ -0,0 +1 @@ +Subproject commit 0a0f0a3a96312a96d38b3617110e24fb1ac950e9 From 307abdc7f8411028306216f99589e7cf287e75ce Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 14:36:20 +0300 Subject: [PATCH 06/21] fix ups --- README.md | 23 +++++++++++++++++++++++ UHL | 2 +- UHLDebugSystem | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e4ac9372..4fd8c913 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ Support: `UE5.5 (main)`, `UE5.4 (branch UE5.4)` ```bash git submodule add https://github.com/Ciberusps/unreal-helper-library.git ./Plugins/UnrealHelperLibrary + git submodule update --init --recursive --checkout ``` -

    @@ -854,3 +855,25 @@ TODO check ref - https://github.com/Atulin/ChannelMerger ## Special Thanks [@Ingarnm](https://github.com/Ingarnm), [@Vamp1rk0](https://github.com/Vamp1rk0) for feedback + +### Migration to UHL 2.0, NEW multi-plugins version + +if already have plugin +- checkout main +- commit UnrealHelperLibrary change +- run command - `git submodule update --init --recursive` + +- UHL CommonMaps - in `Config/DefaultGame` rename section from [/Script/CommonMaps.UHLCommonMapsDeveloperSettings] -> [/Script/UHLCommonMaps.UHLCommonMapsDeveloperSettings] + +#### Install separately + +```C++ +git submodule add https://github.com/Ciberusps/UHL.git ./Plugins/UHL +git submodule add https://github.com/Ciberusps/UHLAI.git ./Plugins/UHLAI +git submodule add https://github.com/Ciberusps/UHLBehaviorTrees.git ./Plugins/UHLBehaviorTrees +git submodule add https://github.com/Ciberusps/UHLStateTrees.git ./Plugins/UHLStateTrees +git submodule add https://github.com/Ciberusps/UHLCharacter.git ./Plugins/UHLCharacter +git submodule add https://github.com/Ciberusps/UHLCommonMaps.git ./Plugins/UHLCommonMaps +git submodule add https://github.com/Ciberusps/UHLDebugSystem.git ./Plugins/UHLDebugSystem +git submodule add https://github.com/Ciberusps/UHLGAS.git ./Plugins/UHLGAS +``` diff --git a/UHL b/UHL index 97b3e8c7..28d3e8eb 160000 --- a/UHL +++ b/UHL @@ -1 +1 @@ -Subproject commit 97b3e8c79e3cc18f093414f6c837a771e983e0e1 +Subproject commit 28d3e8eb38f9e5999df46491ad137cf699842c90 diff --git a/UHLDebugSystem b/UHLDebugSystem index 88d6b902..0246ad33 160000 --- a/UHLDebugSystem +++ b/UHLDebugSystem @@ -1 +1 @@ -Subproject commit 88d6b902e91b2d90565c87d2451006bc2bc809f3 +Subproject commit 0246ad33434c9985556bcc03ea0a86ac93e18838 From 15a1bfa8e64e9e3a3fbe189ea4d710cb946dd980 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 14:43:17 +0300 Subject: [PATCH 07/21] UHLStateTree --- .gitmodules | 3 +++ UHLStateTree | 1 + 2 files changed, 4 insertions(+) create mode 160000 UHLStateTree diff --git a/.gitmodules b/.gitmodules index 29847937..6b42ffa6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "UHLGAS"] path = UHLGAS url = https://github.com/Ciberusps/UHLGAS.git +[submodule "UHLStateTree"] + path = UHLStateTree + url = https://github.com/Ciberusps/UHLStateTree.git diff --git a/UHLStateTree b/UHLStateTree new file mode 160000 index 00000000..dd8597fa --- /dev/null +++ b/UHLStateTree @@ -0,0 +1 @@ +Subproject commit dd8597fa2baf0fb112e47c612cab46940d61e328 From 53c56c032769add618093c3671249375f6dde1a0 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 15:00:50 +0300 Subject: [PATCH 08/21] Update UHLAI --- UHLAI | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UHLAI b/UHLAI index 374d4b41..10137c08 160000 --- a/UHLAI +++ b/UHLAI @@ -1 +1 @@ -Subproject commit 374d4b416234af7e68e5041a496c7038e4e01630 +Subproject commit 10137c08736b9d28d2bb7bc59ad065774644199c From 6aad55f5f09be27ae40ab59a7d33f63ec3a3a996 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 15:03:28 +0300 Subject: [PATCH 09/21] Remove submodule UHLBehaviorTrees --- .gitmodules | 3 --- UHLBehaviorTrees | 1 - 2 files changed, 4 deletions(-) delete mode 160000 UHLBehaviorTrees diff --git a/.gitmodules b/.gitmodules index 6b42ffa6..0613a711 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,6 @@ [submodule "UHLAI"] path = UHLAI url = https://github.com/Ciberusps/UHLAI.git -[submodule "UHLBehaviorTrees"] - path = UHLBehaviorTrees - url = https://github.com/Ciberusps/UHLBehaviorTrees.git [submodule "UHLCharacter"] path = UHLCharacter url = https://github.com/Ciberusps/UHLCharacter.git diff --git a/UHLBehaviorTrees b/UHLBehaviorTrees deleted file mode 160000 index 9f18dbb7..00000000 --- a/UHLBehaviorTrees +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9f18dbb7e5e8d8a0e6ea946930711554c0528ea5 From 38f57ad66d1b4be36439f21309df3e4cb560ceaf Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 15:03:59 +0300 Subject: [PATCH 10/21] install UHLBehaviorTree --- .gitmodules | 3 +++ Plugins/UHLBehaviorTree | 1 + 2 files changed, 4 insertions(+) create mode 160000 Plugins/UHLBehaviorTree diff --git a/.gitmodules b/.gitmodules index 0613a711..582c1e87 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "UHLStateTree"] path = UHLStateTree url = https://github.com/Ciberusps/UHLStateTree.git +[submodule "Plugins/UHLBehaviorTree"] + path = Plugins/UHLBehaviorTree + url = https://github.com/Ciberusps/UHLBehaviorTree.git diff --git a/Plugins/UHLBehaviorTree b/Plugins/UHLBehaviorTree new file mode 160000 index 00000000..939a1408 --- /dev/null +++ b/Plugins/UHLBehaviorTree @@ -0,0 +1 @@ +Subproject commit 939a1408ef3e387a0b51dd99bb4fc502232d9610 From 4a469f9c987d4de1c7b4bb83191a596cf00aded7 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 15:12:55 +0300 Subject: [PATCH 11/21] UHLBehaviorTrees -> UHLBehaviorTree --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4fd8c913..70d3076d 100644 --- a/README.md +++ b/README.md @@ -870,8 +870,8 @@ if already have plugin ```C++ git submodule add https://github.com/Ciberusps/UHL.git ./Plugins/UHL git submodule add https://github.com/Ciberusps/UHLAI.git ./Plugins/UHLAI -git submodule add https://github.com/Ciberusps/UHLBehaviorTrees.git ./Plugins/UHLBehaviorTrees -git submodule add https://github.com/Ciberusps/UHLStateTrees.git ./Plugins/UHLStateTrees +git submodule add https://github.com/Ciberusps/UHLBehaviorTree.git ./Plugins/UHLBehaviorTree +git submodule add https://github.com/Ciberusps/UHLStateTree.git ./Plugins/UHLStateTree git submodule add https://github.com/Ciberusps/UHLCharacter.git ./Plugins/UHLCharacter git submodule add https://github.com/Ciberusps/UHLCommonMaps.git ./Plugins/UHLCommonMaps git submodule add https://github.com/Ciberusps/UHLDebugSystem.git ./Plugins/UHLDebugSystem From 68179c56367fd5f59e0aaa74226d897c80b9e57c Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 15:12:58 +0300 Subject: [PATCH 12/21] Update UHLCommonMaps --- UHLCommonMaps | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UHLCommonMaps b/UHLCommonMaps index bc768ed4..38091200 160000 --- a/UHLCommonMaps +++ b/UHLCommonMaps @@ -1 +1 @@ -Subproject commit bc768ed4e9357b309858b57701acaf6306982be5 +Subproject commit 38091200aac46058c6bbb694e9de0958852c8a55 From 1a1859c8eef4105e7e701d4c835037452acc1975 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 15:33:24 +0300 Subject: [PATCH 13/21] remove Plugins\UHLBehaviorTree --- .gitmodules | 3 --- Plugins/UHLBehaviorTree | 1 - 2 files changed, 4 deletions(-) delete mode 160000 Plugins/UHLBehaviorTree diff --git a/.gitmodules b/.gitmodules index 582c1e87..0613a711 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,6 +19,3 @@ [submodule "UHLStateTree"] path = UHLStateTree url = https://github.com/Ciberusps/UHLStateTree.git -[submodule "Plugins/UHLBehaviorTree"] - path = Plugins/UHLBehaviorTree - url = https://github.com/Ciberusps/UHLBehaviorTree.git diff --git a/Plugins/UHLBehaviorTree b/Plugins/UHLBehaviorTree deleted file mode 160000 index 939a1408..00000000 --- a/Plugins/UHLBehaviorTree +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 939a1408ef3e387a0b51dd99bb4fc502232d9610 From a995271164a1d770fa09cef1c44671020526ecb2 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 15:34:31 +0300 Subject: [PATCH 14/21] install UHLBehaviorTree --- .gitmodules | 3 +++ UHLBehaviorTree | 1 + 2 files changed, 4 insertions(+) create mode 160000 UHLBehaviorTree diff --git a/.gitmodules b/.gitmodules index 0613a711..53b9c9c5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "UHLStateTree"] path = UHLStateTree url = https://github.com/Ciberusps/UHLStateTree.git +[submodule "UHLBehaviorTree"] + path = UHLBehaviorTree + url = https://github.com/Ciberusps/UHLBehaviorTree.git diff --git a/UHLBehaviorTree b/UHLBehaviorTree new file mode 160000 index 00000000..939a1408 --- /dev/null +++ b/UHLBehaviorTree @@ -0,0 +1 @@ +Subproject commit 939a1408ef3e387a0b51dd99bb4fc502232d9610 From e77d20e47eac468d9492e91879f6f49a89a06771 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sat, 20 Sep 2025 15:39:58 +0300 Subject: [PATCH 15/21] Update UHLStateTree --- UHLStateTree | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UHLStateTree b/UHLStateTree index dd8597fa..acd526e0 160000 --- a/UHLStateTree +++ b/UHLStateTree @@ -1 +1 @@ -Subproject commit dd8597fa2baf0fb112e47c612cab46940d61e328 +Subproject commit acd526e08bebb2015ff0aaf19a3990a56a42544e From 092a1e6b056c5517a53ba449555721f2063e9a7f Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sun, 21 Sep 2025 14:46:19 +0300 Subject: [PATCH 16/21] fix up redirs, drop UnrealHelperLibrary deps where possible --- README.md | 21 ++++++++++++++++++++- UHL | 2 +- UHLAI | 2 +- UHLBehaviorTree | 2 +- UHLCharacter | 2 +- UHLCommonMaps | 2 +- UHLDebugSystem | 2 +- UHLGAS | 2 +- UHLStateTree | 2 +- 9 files changed, 28 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 70d3076d..e1c2d8c7 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Support: `UE5.5 (main)`, `UE5.4 (branch UE5.4)` } } ``` - + - to use specific engine version specify branch e.g. `-b UE5.4` ```bash @@ -877,3 +877,22 @@ git submodule add https://github.com/Ciberusps/UHLCommonMaps.git ./Plugins/UHLCo git submodule add https://github.com/Ciberusps/UHLDebugSystem.git ./Plugins/UHLDebugSystem git submodule add https://github.com/Ciberusps/UHLGAS.git ./Plugins/UHLGAS ``` + +### Changelog + +- all modules moved to separate plugins and made as independent as possible now dependency tree looks like +- **TODO: draw dependency tree using schemas** + - UHLAI + - UHLBehaviorTree + - UHLStateTree + - UHLCharacter + - UHLGAS + - UHLCharacter + - UHL + - UHLCharacter + - UHLCommonMaps + - UHLDebugSystem + - UHLCharacter +- UHLSettings moved to UHLAISettings now UHLStateTree and UHLBehaviorTree independent from core "UHL" plugin +and can be used completly separatly from it. UHLStateTree and UHLBehaviorTree depends only on UHLAI +- diff --git a/UHL b/UHL index 28d3e8eb..328370ea 160000 --- a/UHL +++ b/UHL @@ -1 +1 @@ -Subproject commit 28d3e8eb38f9e5999df46491ad137cf699842c90 +Subproject commit 328370eae8b6229c2863d1570974ec018b1421fd diff --git a/UHLAI b/UHLAI index 10137c08..2e7a6456 160000 --- a/UHLAI +++ b/UHLAI @@ -1 +1 @@ -Subproject commit 10137c08736b9d28d2bb7bc59ad065774644199c +Subproject commit 2e7a645698dd70083036a53feeef3600399cd016 diff --git a/UHLBehaviorTree b/UHLBehaviorTree index 939a1408..1d2521bd 160000 --- a/UHLBehaviorTree +++ b/UHLBehaviorTree @@ -1 +1 @@ -Subproject commit 939a1408ef3e387a0b51dd99bb4fc502232d9610 +Subproject commit 1d2521bd7923e4b0cc108947cd27416efb45a187 diff --git a/UHLCharacter b/UHLCharacter index 5b0abcd5..e0b22027 160000 --- a/UHLCharacter +++ b/UHLCharacter @@ -1 +1 @@ -Subproject commit 5b0abcd50288059aa9c0c4ff02411f49717c6c33 +Subproject commit e0b22027098a8283b4d61d9a756aa348fe3beb02 diff --git a/UHLCommonMaps b/UHLCommonMaps index 38091200..0de21208 160000 --- a/UHLCommonMaps +++ b/UHLCommonMaps @@ -1 +1 @@ -Subproject commit 38091200aac46058c6bbb694e9de0958852c8a55 +Subproject commit 0de2120845f158eb07e53aeaffbf967b1f9e22df diff --git a/UHLDebugSystem b/UHLDebugSystem index 0246ad33..a2367b45 160000 --- a/UHLDebugSystem +++ b/UHLDebugSystem @@ -1 +1 @@ -Subproject commit 0246ad33434c9985556bcc03ea0a86ac93e18838 +Subproject commit a2367b4519cd31ee5a3a0378ce04b772f7d5cea5 diff --git a/UHLGAS b/UHLGAS index 0a0f0a3a..45235177 160000 --- a/UHLGAS +++ b/UHLGAS @@ -1 +1 @@ -Subproject commit 0a0f0a3a96312a96d38b3617110e24fb1ac950e9 +Subproject commit 45235177a951601c07fb095118df8150a0eb3e34 diff --git a/UHLStateTree b/UHLStateTree index acd526e0..c9b4a2ec 160000 --- a/UHLStateTree +++ b/UHLStateTree @@ -1 +1 @@ -Subproject commit acd526e08bebb2015ff0aaf19a3990a56a42544e +Subproject commit c9b4a2ec3f3af868b2f38a3559b153a932f11302 From f2b6989e69d91e1b4da4b13bddefdbfe87bc30a3 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Tue, 23 Sep 2025 22:00:36 +0300 Subject: [PATCH 17/21] udpate all --- UHL | 2 +- UHLBehaviorTree | 2 +- UHLCharacter | 2 +- UHLDebugSystem | 2 +- UHLGAS | 2 +- UHLStateTree | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/UHL b/UHL index 328370ea..4836548b 160000 --- a/UHL +++ b/UHL @@ -1 +1 @@ -Subproject commit 328370eae8b6229c2863d1570974ec018b1421fd +Subproject commit 4836548bfe88472f7914ef9b8815f3245e8f0081 diff --git a/UHLBehaviorTree b/UHLBehaviorTree index 1d2521bd..531ae1f8 160000 --- a/UHLBehaviorTree +++ b/UHLBehaviorTree @@ -1 +1 @@ -Subproject commit 1d2521bd7923e4b0cc108947cd27416efb45a187 +Subproject commit 531ae1f871c4b0fa8d9ba36705bd3186b3cdb390 diff --git a/UHLCharacter b/UHLCharacter index e0b22027..b38db4ec 160000 --- a/UHLCharacter +++ b/UHLCharacter @@ -1 +1 @@ -Subproject commit e0b22027098a8283b4d61d9a756aa348fe3beb02 +Subproject commit b38db4ec6dd98bafd63b2c5a510cc7622edf7f42 diff --git a/UHLDebugSystem b/UHLDebugSystem index a2367b45..5888c90e 160000 --- a/UHLDebugSystem +++ b/UHLDebugSystem @@ -1 +1 @@ -Subproject commit a2367b4519cd31ee5a3a0378ce04b772f7d5cea5 +Subproject commit 5888c90e1fef718a9399aba47b45217a83e5255a diff --git a/UHLGAS b/UHLGAS index 45235177..b635470e 160000 --- a/UHLGAS +++ b/UHLGAS @@ -1 +1 @@ -Subproject commit 45235177a951601c07fb095118df8150a0eb3e34 +Subproject commit b635470ec5b336dab869893a1e175d34efff77fa diff --git a/UHLStateTree b/UHLStateTree index c9b4a2ec..0bfea578 160000 --- a/UHLStateTree +++ b/UHLStateTree @@ -1 +1 @@ -Subproject commit c9b4a2ec3f3af868b2f38a3559b153a932f11302 +Subproject commit 0bfea578be6039ef831fd40e87d026e92c48f717 From 61aecd4ccac8f7a83d1c9a5231dc88140f120685 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Sun, 28 Sep 2025 23:04:17 +0300 Subject: [PATCH 18/21] update all UHL plugins --- UHL | 2 +- UHLAI | 2 +- UHLBehaviorTree | 2 +- UHLCharacter | 2 +- UHLCommonMaps | 2 +- UHLDebugSystem | 2 +- UHLGAS | 2 +- UHLStateTree | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/UHL b/UHL index 4836548b..995a1865 160000 --- a/UHL +++ b/UHL @@ -1 +1 @@ -Subproject commit 4836548bfe88472f7914ef9b8815f3245e8f0081 +Subproject commit 995a18654e15f1fbe72fb776b1ba75d234556f8d diff --git a/UHLAI b/UHLAI index 2e7a6456..dfb2c785 160000 --- a/UHLAI +++ b/UHLAI @@ -1 +1 @@ -Subproject commit 2e7a645698dd70083036a53feeef3600399cd016 +Subproject commit dfb2c785cf5195fff438f086ccbf324ff13fd39b diff --git a/UHLBehaviorTree b/UHLBehaviorTree index 531ae1f8..bd248218 160000 --- a/UHLBehaviorTree +++ b/UHLBehaviorTree @@ -1 +1 @@ -Subproject commit 531ae1f871c4b0fa8d9ba36705bd3186b3cdb390 +Subproject commit bd248218303d004765d574b22ee54e81ab799f8d diff --git a/UHLCharacter b/UHLCharacter index b38db4ec..27ffbe93 160000 --- a/UHLCharacter +++ b/UHLCharacter @@ -1 +1 @@ -Subproject commit b38db4ec6dd98bafd63b2c5a510cc7622edf7f42 +Subproject commit 27ffbe93659758ce22f85820f14877b9237a00ff diff --git a/UHLCommonMaps b/UHLCommonMaps index 0de21208..4a00e990 160000 --- a/UHLCommonMaps +++ b/UHLCommonMaps @@ -1 +1 @@ -Subproject commit 0de2120845f158eb07e53aeaffbf967b1f9e22df +Subproject commit 4a00e9901a3dc732c65fe388ab08f1ec50e93997 diff --git a/UHLDebugSystem b/UHLDebugSystem index 5888c90e..3daa6fee 160000 --- a/UHLDebugSystem +++ b/UHLDebugSystem @@ -1 +1 @@ -Subproject commit 5888c90e1fef718a9399aba47b45217a83e5255a +Subproject commit 3daa6fee1a925412a7d8106b35b0d2cb562ce57c diff --git a/UHLGAS b/UHLGAS index b635470e..2b863618 160000 --- a/UHLGAS +++ b/UHLGAS @@ -1 +1 @@ -Subproject commit b635470ec5b336dab869893a1e175d34efff77fa +Subproject commit 2b8636185069f24768e2f1cc6288c3699b4c64c1 diff --git a/UHLStateTree b/UHLStateTree index 0bfea578..b5abbd3a 160000 --- a/UHLStateTree +++ b/UHLStateTree @@ -1 +1 @@ -Subproject commit 0bfea578be6039ef831fd40e87d026e92c48f717 +Subproject commit b5abbd3a229027fba13c9f0e1bea115cdfd7da65 From ac8783ef9e10623987bccba517e54b64a208d863 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Fri, 10 Oct 2025 20:42:37 +0300 Subject: [PATCH 19/21] update --- UHLGAS | 2 +- UHLStateTree | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UHLGAS b/UHLGAS index 2b863618..33a8f65f 160000 --- a/UHLGAS +++ b/UHLGAS @@ -1 +1 @@ -Subproject commit 2b8636185069f24768e2f1cc6288c3699b4c64c1 +Subproject commit 33a8f65fa0d34f7f7fe3659b4cb53fbeff5d01e4 diff --git a/UHLStateTree b/UHLStateTree index b5abbd3a..a2916cc9 160000 --- a/UHLStateTree +++ b/UHLStateTree @@ -1 +1 @@ -Subproject commit b5abbd3a229027fba13c9f0e1bea115cdfd7da65 +Subproject commit a2916cc981ec153c3235c7905b1a7c3e204b48c5 From 1eb2d55cee7a1dce915ea5a49d3720430ddba863 Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Fri, 10 Oct 2025 21:18:20 +0300 Subject: [PATCH 20/21] update readme --- README.md | 825 +++------------------------------------------------ UHLCharacter | 2 +- 2 files changed, 39 insertions(+), 788 deletions(-) diff --git a/README.md b/README.md index e1c2d8c7..08934185 100644 --- a/README.md +++ b/README.md @@ -14,89 +14,60 @@ Support: `UE5.5 (main)`, `UE5.4 (branch UE5.4)` ![AiModule](https://github.com/user-attachments/assets/4becb592-c02e-423a-bf80-fcfc629ce518) -## ✨ Features +## ✨ Plugins and features -- AI nodes - - `GameplayFocus` - set focus on actor - - `RandomChance` - randomize actions +- [UHL](https://github.com/Ciberusps/UHL) - utility functions like `GetProjectVersion`, `GetAssetsOfClass`, `GetHighestPoint`. Editor - editor customization, e.g. `Custom thumnails`, `Custom class icon` +- [UHLGAS](https://github.com/Ciberusps/UHLGAS) - +- [UHLAI](https://github.com/Ciberusps/UHLAI) - +- [UHLBehaviorTrees](https://github.com/Ciberusps/UHLBehaviorTrees) & [UHLStateTree](https://github.com/Ciberusps/UHLStateTree) - AI nodes + - `SetGameplayFocus` - set focus on actor - `InRange` - check distance to enemy - `InAngle` - check angle to enemy - `PlayAnimMontage` - play attack animation - - `SetBBValue` - set blackboard value - - `DebugPrintBBValue` - print blackboard value - - `DebugPrintString` - print string on screen - `InvokeGameplayAbility` - activate/deactivate GAS Gameplay Ability by tag, with optional "wait for finishing" - `TurnTo` - turn enemy using turn animations -- GAS - Lyra based inputs, ability system component, ability system config, input cache, attribute set, ability sets -- **GAS** strong Lyra based toolset for quick start with GAS and scalable for big projects -- GAS abilities input binding using tags based on Lyra and enhanced with real project needs -- GameplayTags based **DebugSystem** -- Utils - utility functions for your game, e.g. `GetProjectVersion`, `GetAssetsOfClass`, `GetHighestPoint` -- Editor - editor customization, e.g. `Custom thumnails`, `Custom class icon` +- [UHLCommonMaps](https://github.com/Ciberusps/UHLCommonMaps) +- [UHLDebugSystem](https://github.com/Ciberusps/UHLDebugSystem) -## 🚀 Install -#### From source (recommended): +## 🚀 Install & ⬆️ Update -- add git submodule to your plugins folder +### From source (recommended) - ```bash - git submodule add https://github.com/Ciberusps/unreal-helper-library.git ./Plugins/UnrealHelperLibrary - git submodule update --init --recursive --checkout - ``` +```bash +// install as git submodule to your plugins folder +git submodule add https://github.com/Ciberusps/unreal-helper-library.git ./Plugins/UnrealHelperLibrary --
    - C++ setup, old engine versions - - - to use C++ things add code to file `.Build.cs` - - ```C# - // .Build.cs - public GameName(ReadOnlyTargetRules Target) : base(Target) - { - PublicDependencyModuleNames.AddRange(new string[] { - // add "UnrealHelperLibrary" to use it in C++ - "UnrealHelperLibrary", - }); - - // OPTIONALLY add "UnrealHelperEditor" module to use custom unreal engine editor features - if (Target.bBuildEditor) - { - PrivateDependencyModuleNames.AddRange(new string[] { "UnrealHelperEditor" }); - } - } - ``` - - - to use specific engine version specify branch e.g. `-b UE5.4` - - ```bash - git submodule add -b UE5.4 https://github.com/Ciberusps/unreal-helper-library.git ./Plugins/UnrealHelperLibrary - ``` +// to update plugin +git submodule update --init --recursive --checkout +``` - - to use specific engine version specify branch e.g. `-b UE5.4` +or install all plugins as independent plugins - ```bash - git submodule add -b UE5.4 https://github.com/Ciberusps/unreal-helper-library.git ./Plugins/UnrealHelperLibrary - ``` +```bash +git submodule add https://github.com/Ciberusps/UHL.git ./Plugins/UHL +git submodule add https://github.com/Ciberusps/UHLGAS.git ./Plugins/UHLGAS +git submodule add https://github.com/Ciberusps/UHLAI.git ./Plugins/UHLAI +git submodule add https://github.com/Ciberusps/UHLStateTree.git ./Plugins/UHLStateTree +git submodule add https://github.com/Ciberusps/UHLBehaviorTree.git ./Plugins/UHLBehaviorTree +git submodule add https://github.com/Ciberusps/UHLCharacter.git ./Plugins/UHLCharacter +git submodule add https://github.com/Ciberusps/UHLCommonMaps.git ./Plugins/UHLCommonMaps +git submodule add https://github.com/Ciberusps/UHLDebugSystem.git ./Plugins/UHLDebugSystem - > [!NOTE] - > Don't forget to update your `README.md` with instructions on how to setup - `git submodule update --init --recursive` and how to update submodules/plugin(s) - `git submodule update --remote` +// to update plugins +git submodule update --init --remote --recursive +``` - > [!NOTE] - > Add `Editor Preferences -> Force Compilation on Startup` in `Config/EditorPerProjectUserSettings.ini` your team don't want to recompile plugin manually 😉 +> [!NOTE] +> Don't forget to update your `README.md` with instructions on how to setup - `git submodule update --init --recursive` and how to update submodules/plugin(s) - `git submodule update --remote` -
    +> [!NOTE] +> Add `Editor Preferences -> Force Compilation on Startup` in `Config/EditorPerProjectUserSettings.ini` your team don't want to recompile plugin manually 😉 -#### From marketplace: +### From marketplace https://www.fab.com/listings/9f7d82e9-bc72-42ff-b302-b3d6562bd4c8 -## ⬆️ Update - -From source: - -- `git submodule update --remote` to update plugin from source - ## 🧩 Modules UHL consists of 3 modules: @@ -111,751 +82,27 @@ UHL consists of 3 modules: AI nodes for behavior tree, based on `BehaviorTree` and `BehaviorTreeComponent` from `UE5.4` and `UE5.5` with some improvements and additional features -> - Components -> - [AIPerceptionComponent](#uhlaiperceptioncomponent) -> - Composite -> - [RandomSelector](#btc_randomselector) -> - Services -> - [GameplayFocus](#setgameplayfocus) -> - Decorators -> - [CheckGASGameplayTagsOnActor](#checkgasgameplaytagsonactor) -> - [InAngle](#inangle) -> - [InRange](#inrange) -> - [LoopRandomCount](#looprandomcount) -> - [RandomChance](#randomchance) -> - [TimeLimitRandom](#timelimitrandom) -> - Tasks -> - [SetBBValue](#setbbvalue) -> - [DebugPrintBBValue](#debugprintbbvalue) -> - [DebugPrintString](#debugprintstring) -> - [InvokeGameplayAbility](#invokegameplayability) -> - [PlayAnimMontage](#playanimmontage) -> - [TurnTo](#turnto) - **[💪 GAS](#-gas-gameplay-ability-system)** Gameplay Ability System - Lyra based inputs, ability system component, ability system config, input cache, attribute set, ability sets -> - Components -> - [AbilitySystemComponent](#abilitysystemcomponent) -> - [InputConfig (GAS abilities input binding)](#inputconfig-gas-abilities-input-binding) -> - [AbilityInputCache (beta)](#abilityinputcache) -> - [GameplayAbility](#gameplayability) -> - [AttributeSet](#attributeset) -> - [AbilitySet](#abilityset) -> - [AbilitySystem Config](#abilitysystem-config) -> - Tasks -> - [InterpolateToPosition](#interpolatetoposition) -> - AbilityAsync tasks (AbilityAsync versions of GAS UAbilityTask's, AbilityAsync available in blueprints) -> - WaitForAbilityActivate -> - WaitForAbilityActivateWithTagRequirements -> - WaitForAbilityActivate_Query -> - [UHLGASBlueprintLibrary](#uhlgasblueprintlibrary) -> - [TryActivateAbilityWithTag](#tryactivateabilitywithtag) -> - [TryCancelAbilityWithTag](#trycancelabilitywithtag) -> - [TryCancelAbilitiesWithTags](#trycancelabilitieswithtags) -> - [FireGameplayEvent](#firegameplayevent) -> - [UpdateStateGameplayTags](#updatestategameplaytags) -> - [FindTagByString](#findtagbystring) -> - [GetUHLAbilitySystemComponent](#getuhlabilitysystemcomponent) -> - [CreateGenericGASGameplayEffectSpec](#creategenericgasgameplayeffectspec) **[🦸 Character](#character)** Default character class with UHL interfaces implemented, so you don't need to do it by yourself -> - [BaseCharacterWithASC](#basecharacterwithasc) (recommended for start) -> - [BaseCharacter](#basecharacter) **[🪲 DebugSystem](#-debugsystem)** Debug system for your game, in mid-size commands you always use limited set of debugging tools -> - Settings -> - [DebugSystemSettings](#debugsystemsettings) -> - Subsystem -> - [UHLDebugSystemSubsystem](#uhldebugsystemsubsystem) -> - AsyncActions -> - [WaitDebugCategoryChange](#aa_waitdebugcategorychange) -> - [DebugBlueprintLibrary](#debugblueprintlibrary) -> - [IsUHLDebugCategoryEnabled](#isuhldebugcategoryenabled) - **[📚 UnrealHelperLibrary](#unrealhelperlibrarybpl)** -> - [UnrealHelperLibraryBPL](#unrealhelperlibrarybpl) -> - Gameplay -> - GetActorClosestToCenterOfScreen -> - GetMostDistantActor -> -> - RelativeAngles -> - [RelativeAngleToActor](#relativeangletoactor) -> - [GetPointAtRelativeAngle](#getpointatrelativeangle) -> - [GetPointAtRelativeDirection](#getpointatrelativedirection) -> - [GetPointAtAngleRelativeToOtherActor](#getpointatanglerelativetootheractor) -> - [GetPointAtDirectionRelativeToOtherActor](#getpointatdirectionrelativetootheractor) -> - [DirectionToAngle](#directiontoangle) -> - UI/Screen -> - GetViewportSizeUnscaled -> - Misc -> - [GetProjectVersion](#getprojectversion) -> - [GetNamesOfComponentsOnObject](#getnamesofcomponentsonobject) -> - [GetAssetsOfClass](#getassetsofclass) -> - GetBuildType -> -> -> - Debug -> - DrawDebugLineOnCanvas -> - Other -> - [GetHighestPoint](#gethighestpoint) -> - [LoadingUtilLibrary](#loadingutillibrary) -> - [ApplyDefaultPriorityLoading](#applydefaultpriorityloading) -> - [ApplyStreamingPriorityLoading](#applystreamingpriorityloading) -> - [ApplyHighestPriorityLoading](#applyhighestpriorityloading) -> - [ApplyCustomPriorityLoading](#applycustompriorityloading) -> - [ForceGarbageCollection](#forcegarbagecollection) -> - [FlushLevelStreaming](#flushlevelstreaming) -> - [TraceUtilsBPL](#traceutilsbpl) -> - SweepCapsuleSingleByChannel -> - [Settings](#settings) -> - [UHL Settings](#uhl-settings) -> - [Subsystems](#subsystems) -> - [UHLHUD](#uhlhud) -> - AnimNotifyState (ANS) -> - [ANS_UHL_Base](#ans_uhl_base) -> - [ANS_ActivateAbility](#ans_activateability) **[⌨ Editor](#-uhl-editor)** -> - [Custom thumnails](#custom-thumnails) -> - [Custom class icon](#custom-class-icon) -> - [UHL Utils (Editor Utility Widget)](#uhl-utils-editor-utility-widget) -> - [ConvertToORM](#converttoorm) - ---- - -### 🧠 AI - -UHL provides most needed AI nodes toolset for developing at least 3d-action AI - GameplayFocus, Random choices using RandomChance and RandomSelector, PlayAnimMontage to play attacks animations, InRange and InAngle to check distance to enemy and required angle -![AI_nodes](https://github.com/user-attachments/assets/1a00afdf-ab36-4e1c-9bd1-1b29c46cd8ac) - -#### `UHLAIPerceptionComponent` - -⚒️ InProgress - -#### `BTC_RandomSelector` - -Select random child node using weights - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/ad19828d-032f-4938-9106-2763ec6fb1fd) - -
    - With cool validations - -#### Warns if summary of weights > 1 - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/78c62bb9-1b1e-4f5a-89b2-68ea4b445ec2) - -#### Warns if chances array have more items then child nodes - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/8dc579a0-7f89-4f27-8a1b-a43fa9889496) - -#### Shows error if child nodes count > than chances count - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/b8416859-a557-4378-85e3-27091f631b54) - -
    - -#### `CheckGASGameplayTagsOnActor` - -**BTD_CheckGASGameplayTagsOnActor** - checks that actor has GAS gameplay tags specified. - -> [!WARNING] -> Don't mess with `UBTDecorator_CheckGameplayTagsOnActor` - its only checks `GameplayTags` on actor itself not on `AbilitySystem`. - -Requirements: - -- actor should implement `IAbilitySystemInterface` to get `AbilitySystemComponent` - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/f1581009-b9cd-408f-84de-2475b43012ae) - -#### `InAngle` - -**BTD_InAngle** - decorator to check is enemy in one of specified angle ranges. Useful in developing big enemies, for example we developing dragon we want to know is player under the right wing or leg, is player in front of dragon or behind and so on. - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/20f95715-a013-4b5f-8107-cd72d3163f4a) - -#### `InRange` - -**BTD_InRange** - decorator to check distance between actors. Compliant with "MoveTo" node have same settings `bIncludeSelfCapsuleRadius` and `bIncludeTargetCapsuleRadius` to check distance excluding capsules radiuses - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/5ee47572-0fdb-4afa-bbd1-d18eafb86807) -![InRange](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/e32b5d05-de82-4dfb-80d1-539c866008ff) - -#### `LoopRandomCount` - -**BTD_LoopRandomCount** - randomized version of decorator `Loop` - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/9a97dd83-d5d3-4cfd-a9bb-830ce7f4c450) - -#### `TimeLimitRandom` - -**BTD_TimeLimitRandom** - randomized version of decorator `TimeLimit` - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/4fd5b54f-5066-4b47-9425-fac0f92b1b07) - -#### `RandomChance` - -**BTD_RandomChance** - commonly used decorator to randomize actions. Fine for single child node, extra bad for multiple nodes due to chance regression, for randomization between multiple child nodes better to use [RandomSelector](#btc_randomselector) - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/b469a200-5655-440a-a754-8f8f544a38a2) - -#### `SetGameplayFocus` - -**BTS_SetGameplayFocus** - alternative for "Set default focus". SetGameplayFocus made right way - prevents rotation jittering while enemy rotation. -One of most common problems that anybody stucks when starting developing AI - "focus dont work"/"focus works wrong". - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/c0add45c-76ef-44bc-b97c-0c56901e6e03) -![GameplayFocus](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/0126fc2b-8a20-4b61-93d8-b1ead6802057) - -Requirements: - -- turn on `UseControllerDesiredRotation` -- turn off - - `bOrientRotationToMovement` - - `UseControllerRotationYaw` - - `UseControllerRotationPitch` - - `UseControllerRotationRoll` - - -Troubleshooting: - -- check that nothing "ClearFocus" -- check that MoveTo uses "AllowStafe" - -#### `SetBBValue` - -**BTT_SetBBValue** - helps settings values in blackboard, supports all blackboard types and for some values event provides opportunity to make calculations like `int` - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/baf4ea25-5d19-482d-a60c-799663def759) - -#### `DebugPrintBBValue` - -**BTT_DebugPrintBBValue** - prints BB value of any type - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/d138c011-fc9a-438e-bd39-658480cd95bf) - -#### `DebugPrintString` - -**BTT_DebugPrintString** - simple task for printing debug info on screen - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/510e9766-37be-4f43-a60f-e0e012521841) - -#### `InvokeGameplayAbility` - -**BTT_InvokeGameplayAbility** - activate/deactivate GAS Gameplay Ability by tag, with optional "wait for finishing" - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/1916c411-7068-43db-9e69-3e6190874de5) - -#### `PlayAnimMontage` - -**BTT_PlayAnimMontage** - play anim montage with option to customize PlayRate, Starting Position, Start Section Name and stopping montage on task abort - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/5026ebdc-689d-4dba-a168-22ae8d6850bf) - -#### `TurnTo` - -**BTT_TurnTo** - turn to enemy using turn animations -Drop in replacement for "RotateToFaceBBEntry" but with option to "RotateTo" with animations -To get settings from actor requires `IUHLActorSettings` to be implemented on character - --- -### 💪 GAS (Gameplay Ability System) - -Many GAS-related things based on "Lyra" sample project. - -#### `AbilitySystemComponent` - -![UHLAbilitySystemComponent](https://github.com/user-attachments/assets/fe56c7a2-43e6-484a-ac65-635e3670204e) - -**UHLAbilitySystemComponent** - for quick start with GAS. You can nest from it on start and than turn off its functions when you ready to replace them with your custom solution. - -Features: - -- set `InitialAttributes` -- give `Abilities` on start -- activate `InitialActiveAbilities` -- apply `InitialGameplayTags` -- "Lyra"-like "InputConfig", GAS abilities input binding - -Setup: - -##### Option 1 - zero setup - -Easy way with zero setup, just nest your character from `AUHLBaseCharacterWithASC`, fits new projects -there you don't want to waste time at all. - -##### Option 2 - BP way - -Easy way - just add `UHLAbilitySystemComponent` to your character and call `InitAbilitySystem` on `BeginPlay`/`Possessed` - -![image](https://github.com/user-attachments/assets/781e3b92-7af2-42db-a47a-b19f6bdd1b71) - -##### Option 3 - C++ - -A bit harder and requires small C++ work, fits for projects with GAS already integrated. -Follow instructions below or just check `AUHLBaseCharacterWithASC` example - -```C++ -AUHLBaseCharacterWithASC::AUHLBaseCharacterWithASC(const FObjectInitializer& ObjectInitializer) - : Super(ObjectInitializer) -{ - // create AbilitySystemComponent if you don't have it - AbilitySystemComponent = CreateDefaultSubobject(TEXT("UHLAbilitySystem")); -} - -void AUHLBaseCharacterWithASC::PossessedBy(AController* NewController) -{ - Super::PossessedBy(NewController); - - // init AbilitySystem - AbilitySystemComponent->InitAbilitySystem(NewController, this); -} -``` - -If you want custom attributes init you can do it - -- by overriding `InitAttributes_Implementation` - recommended -- or just don't activate abilities `AbilitySystemComponent->InitAbilitySystem(NewController, this, false)` and make your own attributes init, and then call `AbilitySystemComponent->ActivateInitialAbilities()` - -You have 3 levels of advancement using GAS with UHL - -1) entry - just using abilities/attributes in your character on start of a project -2) when you understand that you want to share some abilities to other characters - use [AbilitySets](#abilityset) -3) when your team grows and you understand that locking whole character just to add ability is or change some ability system settings is too much - use [AbilitySystem Config](#abilitysystem-config) and optionally defaults in UHLSettings - -![image](https://github.com/user-attachments/assets/d0a47867-dacc-4fbf-bd52-dafa70c8939d) - - -#### InputConfig (GAS abilities input binding) - -Binding InputActions to GameplayAbilities using tags, based on `Lyra` but enhanced and adopted for 3D action game. - -![image](https://github.com/user-attachments/assets/78355f0a-bd98-430d-acda-c98405f4017d) - -##### Setup - -- turn on `bUseInputConfig` on `UHLAbilitySystemComponent` -- create `InputConfig` - `DataAsset` nested from `UHLInputConfig` -- add `InputConfig` to your character `UHLAbilitySystemComponent` -- in `Project Settings -> Input -> Default Input Component Class` -> set `UHLInputComponent` -- in your PlayerCharacter class add lines in `SetupPlayerInputComponent` for binding actions from `InputConfig` - -For now only C++ setup tested (blueprint option will be later) - -```C++ -// Your PlayerCharacter class -void AUHLPlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) -{ - Super::SetupPlayerInputComponent(PlayerInputComponent); - - UUHLInputComponent* UHLInputComponent = CastChecked(PlayerInputComponent); - UUHLInputConfig* UHLInputConfig = AbilitySystemComponent->InputConfig; - TArray BindHandles; - UHLInputComponent->BindAbilityActions(UHLInputConfig, AbilitySystemComponent, &UUHLAbilitySystemComponent::AbilityInputTagPressed, &UUHLAbilitySystemComponent::AbilityInputTagReleased, BindHandles); - - // optional - // if (UHLInputComponent) - // { - // UHLInputComponent->BindAction(UHLInputConfig->NativeInputAction_Move.InputAction, ETriggerEvent::Triggered, this, &AUHLPlayerCharacter::InputMove); - // UHLInputComponent->BindAction(UHLInputConfig->NativeInputAction_Move.InputAction, ETriggerEvent::Completed, this, &AUHLPlayerCharacter::InputStopMove); - - // UHLInputComponent->BindAction(UHLInputConfig->NativeInputAction_LookMouse.InputAction, ETriggerEvent::Triggered, this, &AUHLPlayerCharacter::InputLook); - // UHLInputComponent->BindAction(UHLInputConfig->NativeInputAction_LookStick.InputAction, ETriggerEvent::Triggered, this, &AUHLPlayerCharacter::InputLook); - // } -} -``` - -- in your PlayerController class add - -```c++ -// Your PlayerController.cpp -void AUHLPlayerController::OnPossess(APawn* InPawn) -{ - Super::OnPossess(InPawn); - - CachedPlayerCharacter = Cast(InPawn); -} - -void AUHLPlayerController::PostProcessInput(const float DeltaTime, const bool bGamePaused) -{ - Super::PostProcessInput(DeltaTime, bGamePaused); - - if (!CachedPlayerCharacter.IsValid()) return; - - if (UUHLAbilitySystemComponent* ASC = CachedPlayerCharacter.Get()->GetUHLAbilitySystemComponent()) - { - ASC->ProcessAbilityInput(DeltaTime, bGamePaused); - } -} - - -// Your PlayerController.h -UCLASS() -class UHL_API AUHLPlayerController : public APlayerController -{ - GENERATED_BODY() - -protected: - virtual void OnPossess(APawn* InPawn) override; - virtual void PostProcessInput(const float DeltaTime, const bool bGamePaused) override; - -private: - TWeakObjectPtr CachedPlayerCharacter; -}; -``` - -- now create `InputAction`(IA) and map it in your `InputMappingContext`(IMC) -- add `InputAction` to created `InputConfig` and map it to `AbilityTags` -- now Abilities associated with `AbilityTags` will activates when `InputAction` triggered -- WARN! abilities should nest from `UHLGameplayAbility` for `ActivationPolicy` work correctly -- to controll ability activation, every `UHLGameplayAbility` have `ActivationPolicy` - - `OnInputTriggered` - will activate when InputAction triggered - - `WhileInputActive` - activates ability when input pressed and deactivates when input released - - `OnSpawn` - activates ability when it gived(granted) to character - -#### AbilityInputCache - -`AbilityInputCache` (beta) - caches abilities activation. If you want to have input quality like in AAA games when you need cache some inputs and fire whem when its available. Abilities/Inputs to cache may vary depending on project e.g. for 3D actions(souls-likes, slashers) its critical, for shooters less important - -> [!WARN] -> dont work without [UHLAbilitySystemComponent](#abilitysystemcomponent) and [InputConfig](#inputconfig-gas-abilities-input-binding) enabled - -![image](https://github.com/user-attachments/assets/ecc013bf-cc5a-4211-a51c-ced5fe557ec2) - -##### Setup: - -Instructions here provided with souls-like developing background. Remember you can control `AbilityInputCache` wherever `ASC(AbilitySystemComponent)` is available just take `AbilityInputCache` from `ASC` and call `AddTagToCache`, `CheckCache`, `ClearCache`.... If you need "input window" just add `UHL.AbilityInputCache.Catching` on your character by hand and remove when window not required - -- activate `bUseAbilityInputCache` in `UHLAbilitySystemComponent` -- [optionaly] strongly recommended to activate `bUseInputCacheWindows` also. If `bUseInputCacheWindows` not activated any GameplayAbility marked with `bInputCache` that you try to activate in any time on fail will be added to `AbilityInputCache` thats not what you want in 3D action game -- in `GameplayAbility` that you want to cache activate `bInputCache` and fill if required - - `AddingToCacheInputRequiredTags` - tags that required to be on your character for this ability to be added to `AbilityInputCache` - - `AddingToCacheInputBlockedTags` - tags that blocks adding this ability to `AbilityInputCache` -- prepare you attack animation - add anim notifies - - `ANS_CatchToAbilityInputCache` - to mark when its possible to cache ability. Best practice - leave some frames on start(5-10frames at least) and finish when your "BlockAction" end - - `ANS_CheckAbilityInputCache` - when you want to check cache and activate ability. Best practice - on end of "BlockAction" with 5-10frames duration - -##### Debug: - -- activate `AbilityInputCache` debug category in [DebugSystem](#-debugsystem) from - - `ProjectSettings -> UHL DebugSubsystem Settings` - - or in runtime via `UHLDebugCategoriesListWidget` -- write in console `ToggleAbilityInputDebug`, don't forget to add `ProcessConsoleExec` to your `GameInstance` or it won't work - -#### AttributeSet - -Just class with default things that every `AttributeSet` wants like `ATTRIBUTE_ACCESSORS`. Nest your `AttributeSets` from it to not duplicate same things other and other again. - -#### AbilitySet - -"Lyra"-like set of `Abilities, AttributeSets, GameplayEffects`, that can be added to character and removed later by tag - -![image](https://github.com/user-attachments/assets/7f7a54dc-3276-4bc3-a866-ba992f506efc) - -AbilitySet - is second level of advancement of using GAS in UHL, when you understand that you want to -share some abilities to other characters - use AbilitySets - -Use cases: - -- gived by external source using or `AbilitySet->GiveToAbilitySystem` and removed by external source via `AbilitySetGrantedHandles.TakeFromAbilitySystem` -- gived by external source using `ASC->GiveAbilitySet(UUHLAbilitySet* AbilitySet)` and removed by tag calling `ASC->RemoveAbilitySetByTag()`, of course if tag associated with set by defining `AbilitySetTags` in `AbilitySet` - -#### AbilitySystem Config - -DataAsset - option for teams to edit `AbilitySystem` config externally to not locking character -for just changing abilities/initial attributes - -![image](https://github.com/user-attachments/assets/1cfe4ebd-da39-44b3-9955-73ff6e4708ac) - -Defaults can be changed in `ProjectSettings -> UHL Settings` - -#### GameplayAbility - -Additional events - OnSpawn - -Activation policy - InputTriggered, WhileInputActive, OnSpawn - -InputCache - to use it required to nest from GameplayAbility - -#### `InterpolateToPosition` - -**AT_InterpolateToPosition** - interpolate actor to specified position/rotation at a predetermined amount of time - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/764ddf72-595e-4316-9149-b7b0accc2b89) - -#### `UHLGASBlueprintLibrary` - -##### TryActivateAbilityWithTag - -##### TryCancelAbilityWithTag - -##### TryCancelAbilitiesWithTags - -##### FireGameplayEvent - -##### UpdateStateGameplayTags - -##### FindTagByString - -##### GetUHLAbilitySystemComponent - -##### CreateGenericGASGameplayEffectSpec - -#### `ANS_ActivateAbility` - -**ANS_ActivateAbility** - commonly used ANS that just activate ability on start and deactivate on end - -![image](https://github.com/user-attachments/assets/a1212bb9-dc09-45a7-8f3d-354ac8f2afa6) - -- `GameplayAbilityTag` - tag associated with ability to activate -- `bDeactivateOnMontageBlendingOut` - should ability deactivates on montage blends out -- `bAllowRemoteActivation` - you can allow remote activation - - - ---- - -### 🦸 Character - -Default characters classess with UHL interfaces implemented, so you don't need to do it by yourself - -#### `BaseCharacterWithASC` - -**UHLBaseCharacterWithASC** - recommended BaseCharacter for start - ASC created on start and -inited on `PossessedBy`. Can be turned off by disabling `bInitUHLAbilitySystemOnPosses` - -#### `BaseCharacter` - -**UHLBaseCharacter** - simplest BaseCharacter with only UHL interfaces implemented, so you don't need to do it by yourself - ---- - -### UnrealHelperLibraryBPL - -#### > RelativeAngles - -#### `RelativeAngleToActor` - -for most cases you want to use "InRange" like `IsOtherActorInAngle` (or `IsOtherCharacterInRange` if you want to check distance) - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/4a695df4-9583-451c-801b-98e63c8ad5c8) - -#### `GetPointAtRelativeAngle` - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/4c2f5e47-9f5c-4e70-8d77-57cb7383290a) -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/c0026be0-ce3a-4ee5-84e6-b8e90474fdb9) - -#### `GetPointAtRelativeDirection` - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/c1ea6dda-4ccf-4441-a7d0-dc83ac977a9c) -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/a33a93ad-f470-4dec-8c2c-6c76b275207f) - -#### `GetPointAtAngleRelativeToOtherActor` - -#### `GetPointAtDirectionRelativeToOtherActor` - -#### `DirectionToAngle` - -#### > Misc - -#### `GetProjectVersion` - -Get project version from "Project Settings" - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/c15d4c68-48d2-4d49-bee6-438f18064f9f) - -![image](https://github.com/Ciberusps/unreal-helper-library/assets/14001879/d9e7e53c-b0ba-47cc-b63a-099423a89346) - -#### `GetNamesOfComponentsOnObject` - -Get names of actor components on object, usefull for [`GetOptions` UPROPERTY](https://benui.ca/unreal/uproperty/#getoptions) - -#### `GetAssetsOfClass` - -#### > Other - -#### `GetHighestPoint` - -#### `ANS_UHL_Base` - -**ANS_UHL_Base** - base `AnimNotifyState` class with commonly used features like - -- subscribing `OnMontageBlendingOut` by overriding `OnMontageBlendingOut` can be disabled by `bUseOnMontageBlendingOut=false(true by default)` -- more come later - -### 🪲 DebugSystem - -Powerful debug system for gameplay based on GameplayTags. So any game needs debug system, in mid-size commands you always use limited set of debugging tools -more always than others, so **DebugSystem** is as tool for creating your debug system as fast as possible by providing `DebugCategories`(gameplaytags) that can be enabled/disabled - -Use case: -I want to have debug for AbilitySystem, it should turn on/off, available in editor between sessions and..... - -Components: - -##### DebugSystemSettings - -- add new categories, turn on/off default state, every debug category is a tag -- `DebugCategoryComponents` (DCC) - -##### Check is category enabled/subscribe on debug category state change - -- `WaitDebugCategoryChange` - blueprint node to easier check `isDebugCategoryEnabled` or not and wait for its changes -- `IsUHLDebugSystemEnabled` - blueprint node -- `DebugCategoriesList` - UI component for quick integration in your debug menu - -**Features:** - -- you can create DebugCategoryComponents that activate/deactivate console commands, event in blueprints like GAS abilities -- you can even compose DebugCategoryComponents e.g. you want Collisions + HitBoxes, so you can create combined DebugCategory and add "DCC_Collisions" and "DCC_HitBoxes" -- you can "Block" other DebugCategories by tag -- WaitDebugCategoryChange - -**How to add DebugCategory:** -1) ... -2) ... - -How to subscribe on debug category change in C++ - -```c++ - UAA_WaitDebugCategoryChange* WaitDebugCategoryChangeTask = UAA_WaitDebugCategoryChange::WaitDebugCategoryChange( - Actor->GetWorld(), - YourGameplayTags::TAG_DebugCategory_Combat // same as FGameplayTag("DebugCategory.Something") - ); - WaitDebugCategoryChangeTask->OnChange.AddUniqueDynamic(this, &UCombatSubsystem::OnDebugCategoryChanged); - // on activation "OnDebugCategoryChanged" will be fired - WaitDebugCategoryChangeTask->Activate(); -``` - -##### DebugSystemSubsystem - -##### `UHLDebugSystemSubsystem` - -**UHLDebugSystemSubsystem** - subsystem that provides interaction with debug categories - -##### DebugBlueprintLibrary - -###### `IsUHLDebugCategoryEnabled` - -Check is debug category enabled or not - -### Subsystems - -#### UHLHUD - -HUD with debugging abilities, for now used to display debug bars(e.g. HP/hidden attributes) - -### 🔃 LoadingUtilLibrary - -**UHLLoadingUtilLibrary** - loading utils from Lyra - -#### ApplyDefaultPriorityLoading - -#### ApplyStreamingPriorityLoading - -#### ApplyHighestPriorityLoading - -#### ApplyCustomPriorityLoading - -#### ForceGarbageCollection - -#### FlushLevelStreaming - -### 🎯 TraceUtilsBPL - -**UHLTraceUtilsBPL** - trace utils - -### ⚙️ Settings - -#### UHL Settings - -- You can set defaults for all [AbilitySystem](#abilitysystemcomponent) and [AbilitySystem Config](#abilitysystem-config) in your project its can be usefull -if you don't want to copy paste your `AttributeSets` - -### ⌨ UHL Editor - -**UHL Editor** - optional module with editor customization, e.g. custom thumnails, custom class icons - -#### `Custom thumnails` - -![image](https://github.com/user-attachments/assets/c24fd8bb-0ffe-4666-afd5-8800df650c35) - -**Custom thumnails** - to override thumbnail by your own, just implement `IUHLEditorCustomThumbnail` interface and define your own icon using `GetCustomThumbnailIcon()` - -> [!WARNING] -> ⚠️ NOT sure that blueprints supported for now - -```C++ -// UInventoryItem.h -#if WITH_EDITOR -#include "UHLEditorCustomThumbnail.h" -#endif - -// IUHLEditorCustomThumbnail not available in production build -#if !WITH_EDITOR -class IUHLEditorCustomThumbnail {}; -#endif - -class GAMECODE_API UInventoryItem : public UObject, - public IUHLEditorCustomThumbnail -{ -/** IUHLEditorCustomThumbnail **/ -#if WITH_EDITOR - virtual UTexture2D* GetCustomThumbnailIcon_Implementation() const override; -#endif -/** ~IUHLEditorCustomThumbnail **/ -} - ------------------------------------------------------------------- - -// UInventoryItem.cpp -#if WITH_EDITOR -UTexture2D* UInventoryItem::GetCustomThumbnailIcon_Implementation() -{ - return Description.Icon; -} -#endif -``` - -Thanks to [this post](https://forums.unrealengine.com/t/custom-thumbnail-not-display-asset-is-never-loaded/143155/2?u=ciberus) and [this](https://forums.unrealengine.com/t/custom-thumbnail-on-blueprint/337532/3?u=ciberus) - -#### `Custom class icon` - -**Custom class icon** - to override classes icons on your own, just set settings in `Project Settings -> Editor -> UnrealHelperEditor Settings` - -![image](https://github.com/user-attachments/assets/da940018-2120-4b81-84da-5237e97e9c86) - -[List of default Unreal Engine Editor icons](https://github.com/EpicKiwi/unreal-engine-editor-icons) - -Thanks to [this post](https://www.quodsoler.com/blog/customize-your-unreal-class-icons) and [this](https://forums.unrealengine.com/t/how-to-load-a-font-uasset-and-use-it-for-fslatefontinfo/1548466/3?u=ciberus) - -### UHL Utils (Editor Utility Widget) - -⚒️ InProgress - -### ConvertToORM - -Combines separate `Occlusion`, `Roughness`, `Metalic` textures into one `ORM` - -TODO check ref - https://github.com/Atulin/ChannelMerger - -## Special Thanks - -[@Ingarnm](https://github.com/Ingarnm), [@Vamp1rk0](https://github.com/Vamp1rk0) for feedback - ### Migration to UHL 2.0, NEW multi-plugins version if already have plugin @@ -896,3 +143,7 @@ git submodule add https://github.com/Ciberusps/UHLGAS.git ./Plugins/UHLGAS - UHLSettings moved to UHLAISettings now UHLStateTree and UHLBehaviorTree independent from core "UHL" plugin and can be used completly separatly from it. UHLStateTree and UHLBehaviorTree depends only on UHLAI - + +## Special Thanks + +[@Ingarnm](https://github.com/Ingarnm), [@Vamp1rk0](https://github.com/Vamp1rk0) for feedback diff --git a/UHLCharacter b/UHLCharacter index 27ffbe93..4b25eae0 160000 --- a/UHLCharacter +++ b/UHLCharacter @@ -1 +1 @@ -Subproject commit 27ffbe93659758ce22f85820f14877b9237a00ff +Subproject commit 4b25eae08749bdf7d63736844117eb9aa6283634 From a3013a90177848436425c8af9d369f2093f71b6c Mon Sep 17 00:00:00 2001 From: Ciberusps Date: Fri, 10 Oct 2025 21:38:03 +0300 Subject: [PATCH 21/21] Update UHLCommonMaps --- UHLCommonMaps | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UHLCommonMaps b/UHLCommonMaps index 4a00e990..6c79cf3d 160000 --- a/UHLCommonMaps +++ b/UHLCommonMaps @@ -1 +1 @@ -Subproject commit 4a00e9901a3dc732c65fe388ab08f1ec50e93997 +Subproject commit 6c79cf3dcabd489f624fa60ae1cc938a65af955f

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 a{)tI=1$~Lk#B+ngU#QsEo4mWw{r>^TfIx-- diff --git a/Content/Characters/Base/Animations/AM_TH_BS_Attack_1.uasset b/Content/Characters/Base/Animations/AM_TH_BS_Attack_1.uasset deleted file mode 100644 index 0e3c73e07ff8fb7fc80bdf0bbad10c33d37256d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9830 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 H1LFT5oZBsZ diff --git a/Content/Characters/Base/Animations/AM_TH_BS_Attack_2.uasset b/Content/Characters/Base/Animations/AM_TH_BS_Attack_2.uasset deleted file mode 100644 index 47964071b5a526962627e9ae310e3049c8ba7dd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9383 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 U1W62Qo$oDsx5!YsJ0Sl50ni;z=l}o! diff --git a/Content/Characters/Base/Animations/AS_TH_BS_Attack_1.uasset b/Content/Characters/Base/Animations/AS_TH_BS_Attack_1.uasset deleted file mode 100644 index 95bc0abcfcd423874770d1daf162b18abd064066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3512285 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�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ⅆ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%0DJhGx??IMPKQ$*}r3Y{x2)c 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 xhq+f>GvcnI{Ln3W7}*wxYdW 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�vp8}~EXB>f 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