// Copyright Echo Devgroup #include "Character/AuraEnemy.h" #include "AbilitySystem/AuraAbilitySystemComponent.h" #include "AbilitySystem/AuraAbilitySystemLibrary.h" #include "AbilitySystem/AuraAttributeSet.h" #include "Aura/Aura.h" #include "Components/WidgetComponent.h" #include "UI/Widget/AuraUserWidget.h" AAuraEnemy::AAuraEnemy() { GetMesh()->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block); AbilitySystemComponent = CreateDefaultSubobject("AbilitySystemComponent"); AbilitySystemComponent->SetIsReplicated(true); AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Minimal); AttributeSet = CreateDefaultSubobject("AttributeSet"); HealthBar = CreateDefaultSubobject("HealthBar"); HealthBar->SetupAttachment(GetRootComponent()); } void AAuraEnemy::HighlightActor() { GetMesh()->SetRenderCustomDepth(true); GetMesh()->SetCustomDepthStencilValue(CUSTOM_DEPTH_RED); Weapon->SetRenderCustomDepth(true); Weapon->SetCustomDepthStencilValue(CUSTOM_DEPTH_RED); if (UAuraUserWidget* AuraUserWidget = Cast(HealthBar->GetUserWidgetObject())) { AuraUserWidget->SetWidgetController(this); } if (const UAuraAttributeSet* AuraAS = Cast(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); } ); OnHealthChanged.Broadcast(AuraAS->GetHealth()); OnMaxHealthChanged.Broadcast(AuraAS->GetMaxHealth()); } } void AAuraEnemy::UnHighlightActor() { GetMesh()->SetRenderCustomDepth(false); Weapon->SetRenderCustomDepth(false); } int32 AAuraEnemy::GetPlayerLevel() { return Level; } void AAuraEnemy::BeginPlay() { Super::BeginPlay(); InitAbilityActorInfo(); } void AAuraEnemy::InitAbilityActorInfo() { AbilitySystemComponent->InitAbilityActorInfo(this, this); Cast(AbilitySystemComponent)->AbilityActorInfoSet(); InitializeDefaultAttributes(); } void AAuraEnemy::InitializeDefaultAttributes() const { UAuraAbilitySystemLibrary::InitializeDefaultAttributes(this, CharacterClass, Level, AbilitySystemComponent); }