// Copyright Echo Devgroup #include "AbilitySystem/AuraAbilitySystemLibrary.h" #include "Game/AuraGameMode.h" #include "Kismet/GameplayStatics.h" #include "Player/AuraPlayerState.h" #include "UI/WidgetController/AuraWidgetController.h" #include "UI/HUD/AuraHUD.h" UOverlayWidgetController* UAuraAbilitySystemLibrary::GetOverlayWidgetController(const UObject* WorldContextObject) { if (APlayerController* PC = UGameplayStatics::GetPlayerController(WorldContextObject, 0)) { if (AAuraHUD* AuraHUD = Cast(PC->GetHUD())) { AAuraPlayerState* PS = PC->GetPlayerState(); UAbilitySystemComponent* ASC = PS->GetAbilitySystemComponent(); UAttributeSet* AS = PS->GetAttributeSet(); const FWidgetControllerParams WidgetControllerParams(PC, PS, ASC, AS); return AuraHUD->GetOverlayWidgetController(WidgetControllerParams); } } return nullptr; } UAttributeMenuWidgetController* UAuraAbilitySystemLibrary::GetAttributeMenuWidgetController( const UObject* WorldContextObject) { if (APlayerController* PC = UGameplayStatics::GetPlayerController(WorldContextObject, 0)) { if (AAuraHUD* AuraHUD = Cast(PC->GetHUD())) { AAuraPlayerState* PS = PC->GetPlayerState(); UAbilitySystemComponent* ASC = PS->GetAbilitySystemComponent(); UAttributeSet* AS = PS->GetAttributeSet(); const FWidgetControllerParams WidgetControllerParams(PC, PS, ASC, AS); return AuraHUD->GetAttributeMenuWidgetController(WidgetControllerParams); } } return nullptr; } void UAuraAbilitySystemLibrary::InitializeDefaultAttributes(const UObject* WorldContextObject, ECharacterClass CharacterClass, float Level, UAbilitySystemComponent* ASC) { AAuraGameMode* AuraGameMode = Cast(UGameplayStatics::GetGameMode(WorldContextObject)); if (AuraGameMode == nullptr) return; const AActor* AvatarActor = ASC->GetAvatarActor(); UCharacterClassInfo* CharacterClassInfo = AuraGameMode->CharacterClassInfo; const FCharacterClassDefaultInfo ClassDefaultInfo = CharacterClassInfo->GetClassDefaultInfo(CharacterClass); FGameplayEffectContextHandle PrimaryAttributesContextHandle = ASC->MakeEffectContext(); PrimaryAttributesContextHandle.AddSourceObject(AvatarActor); const FGameplayEffectSpecHandle PrimaryAttributesSpecHandle = ASC->MakeOutgoingSpec(ClassDefaultInfo.PrimaryAttributes, Level, PrimaryAttributesContextHandle); ASC->ApplyGameplayEffectSpecToSelf(*PrimaryAttributesSpecHandle.Data.Get()); FGameplayEffectContextHandle SecondaryAttributesContextHandle = ASC->MakeEffectContext(); SecondaryAttributesContextHandle.AddSourceObject(AvatarActor); const FGameplayEffectSpecHandle SecondaryAttributesSpecHandle = ASC->MakeOutgoingSpec(CharacterClassInfo->SecondaryAttributes, Level, SecondaryAttributesContextHandle); ASC->ApplyGameplayEffectSpecToSelf(*SecondaryAttributesSpecHandle.Data.Get()); FGameplayEffectContextHandle VitalAttributesContextHandle = ASC->MakeEffectContext(); VitalAttributesContextHandle.AddSourceObject(AvatarActor); const FGameplayEffectSpecHandle VitalAttributesSpecHandle = ASC->MakeOutgoingSpec(CharacterClassInfo->VitalAttributes, Level, VitalAttributesContextHandle); ASC->ApplyGameplayEffectSpecToSelf(*VitalAttributesSpecHandle.Data.Get()); }