Files
Aura-TopDownRPG-GAS/Source/Aura/Private/Character/AuraEnemy.cpp

100 lines
3.1 KiB
C++
Raw Normal View History

2025-10-14 22:20:59 -04:00
// Copyright Echo Devgroup
#include "Character/AuraEnemy.h"
2025-11-02 06:40:35 -05:00
#include "AuraGameplayTags.h"
2025-10-14 22:20:59 -04:00
#include "AbilitySystem/AuraAbilitySystemComponent.h"
2025-10-18 11:28:42 -04:00
#include "AbilitySystem/AuraAbilitySystemLibrary.h"
2025-10-14 22:20:59 -04:00
#include "AbilitySystem/AuraAttributeSet.h"
#include "Aura/Aura.h"
#include "Components/WidgetComponent.h"
2025-11-02 06:40:35 -05:00
#include "GameFramework/CharacterMovementComponent.h"
#include "UI/Widget/AuraUserWidget.h"
2025-10-14 22:20:59 -04:00
AAuraEnemy::AAuraEnemy()
{
GetMesh()->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block);
AbilitySystemComponent = CreateDefaultSubobject<UAuraAbilitySystemComponent>("AbilitySystemComponent");
AbilitySystemComponent->SetIsReplicated(true);
AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Minimal);
AttributeSet = CreateDefaultSubobject<UAuraAttributeSet>("AttributeSet");
HealthBar = CreateDefaultSubobject<UWidgetComponent>("HealthBar");
HealthBar->SetupAttachment(GetRootComponent());
2025-10-14 22:20:59 -04:00
}
void AAuraEnemy::HighlightActor()
{
GetMesh()->SetRenderCustomDepth(true);
2025-10-17 16:43:49 -04:00
GetMesh()->SetCustomDepthStencilValue(CUSTOM_DEPTH_RED);
2025-10-14 22:20:59 -04:00
Weapon->SetRenderCustomDepth(true);
2025-10-17 16:43:49 -04:00
Weapon->SetCustomDepthStencilValue(CUSTOM_DEPTH_RED);
2025-11-02 06:40:35 -05:00
}
2025-11-02 06:40:35 -05:00
void AAuraEnemy::UnHighlightActor()
{
GetMesh()->SetRenderCustomDepth(false);
Weapon->SetRenderCustomDepth(false);
}
int32 AAuraEnemy::GetPlayerLevel()
{
return Level;
}
void AAuraEnemy::Die()
{
SetLifeSpan(LifeSpan);
Super::Die();
}
2025-11-02 06:40:35 -05:00
void AAuraEnemy::BeginPlay()
{
Super::BeginPlay();
GetCharacterMovement()->MaxWalkSpeed = BaseWalkSpeed;
InitAbilityActorInfo();
UAuraAbilitySystemLibrary::GiveStartupAbilities(this, AbilitySystemComponent);
if (UAuraUserWidget* AuraUserWidget = Cast<UAuraUserWidget>(HealthBar->GetUserWidgetObject()))
{
AuraUserWidget->SetWidgetController(this);
}
if (const UAuraAttributeSet* AuraAS = Cast<UAuraAttributeSet>(AttributeSet))
{
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(AuraAS->GetHealthAttribute()).AddLambda(
[this](const FOnAttributeChangeData& Data){ OnHealthChanged.Broadcast(Data.NewValue); }
);
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(AuraAS->GetMaxHealthAttribute()).AddLambda(
[this](const FOnAttributeChangeData& Data)
{
OnMaxHealthChanged.Broadcast(Data.NewValue);
}
);
2025-11-02 06:40:35 -05:00
AbilitySystemComponent->RegisterGameplayTagEvent(FAuraGameplayTags::Get().Combat_HitReact, EGameplayTagEventType::NewOrRemoved).AddUObject(
this,
&AAuraEnemy::HitReactTagChanged
);
OnHealthChanged.Broadcast(AuraAS->GetHealth());
OnMaxHealthChanged.Broadcast(AuraAS->GetMaxHealth());
}
2025-10-14 22:20:59 -04:00
}
2025-11-02 06:40:35 -05:00
void AAuraEnemy::HitReactTagChanged(const FGameplayTag CallbackTag, int32 NewCount)
2025-10-14 22:20:59 -04:00
{
2025-11-02 06:40:35 -05:00
bHitReacting = NewCount > 0;
GetCharacterMovement()->MaxWalkSpeed = bHitReacting ? 0.f : BaseWalkSpeed;
2025-10-14 22:20:59 -04:00
}
void AAuraEnemy::InitAbilityActorInfo()
{
2025-10-17 14:46:42 -04:00
AbilitySystemComponent->InitAbilityActorInfo(this, this);
2025-10-14 22:20:59 -04:00
Cast<UAuraAbilitySystemComponent>(AbilitySystemComponent)->AbilityActorInfoSet();
2025-10-17 14:46:42 -04:00
InitializeDefaultAttributes();
2025-10-18 11:28:42 -04:00
}
void AAuraEnemy::InitializeDefaultAttributes() const
{
UAuraAbilitySystemLibrary::InitializeDefaultAttributes(this, CharacterClass, Level, AbilitySystemComponent);
}