// Copyright Echo Devgroup #include "Character/AuraCharacterBase.h" #include "AbilitySystemComponent.h" #include "AbilitySystem/AuraAbilitySystemComponent.h" #include "Aura/Aura.h" #include "Components/CapsuleComponent.h" AAuraCharacterBase::AAuraCharacterBase() { PrimaryActorTick.bCanEverTick = false; GetCapsuleComponent()->SetCollisionResponseToChannel(ECC_Camera, ECR_Ignore); //Make it so that the Capsule for Character doesn't block the camera. GetCapsuleComponent()->SetGenerateOverlapEvents(false); GetMesh()->SetCollisionResponseToChannel(ECC_Camera, ECR_Ignore); //Make it so that the Character Mesh doesn't block the Camera GetMesh()->SetCollisionResponseToChannel(ECC_PROJECTILE, ECR_Overlap); // GetMesh()->SetGenerateOverlapEvents(true); Weapon = CreateDefaultSubobject("Weapon"); Weapon->SetupAttachment(GetMesh(), FName("WeaponHandSocket")); Weapon->SetCollisionEnabled(ECollisionEnabled::NoCollision); } UAbilitySystemComponent* AAuraCharacterBase::GetAbilitySystemComponent() const { return AbilitySystemComponent; } void AAuraCharacterBase::BeginPlay() { Super::BeginPlay(); } FVector AAuraCharacterBase::GetCombatSocketLocation() { return Weapon->GetSocketLocation(WeaponTipSocketName); } void AAuraCharacterBase::InitAbilityActorInfo() { } void AAuraCharacterBase::ApplyEffectToSelf(TSubclassOf GameplayEffectClass, float Level) const { check(IsValid(GetAbilitySystemComponent())); check(GameplayEffectClass); FGameplayEffectContextHandle ContextHandle = GetAbilitySystemComponent()->MakeEffectContext(); ContextHandle.AddSourceObject(this); const FGameplayEffectSpecHandle SpecHandle = GetAbilitySystemComponent()->MakeOutgoingSpec(GameplayEffectClass,Level, ContextHandle); GetAbilitySystemComponent()->ApplyGameplayEffectSpecToTarget(*SpecHandle.Data.Get(), GetAbilitySystemComponent()); } void AAuraCharacterBase::InitializeDefaultAttributes() const { ApplyEffectToSelf(DefaultPrimaryAttributes,1.f); ApplyEffectToSelf(DefaultSecondaryAttributes, 1.f); ApplyEffectToSelf(DefaultVitalAttributes, 1.f); } void AAuraCharacterBase::AddCharacterAbilities() { UAuraAbilitySystemComponent* AuraASC = CastChecked(AbilitySystemComponent); if (!HasAuthority()) return; AuraASC->AddCharacterAbilities(StartupAbilities); }