feat(gas): AZeusPlayerState implementa IAbilitySystemInterface
UE5 GAS nodes BP ("Get Ability System Component", "Apply Gameplay Effect To
Target", etc.) precisam que o PlayerState exponha o ASC via
IAbilitySystemInterface. Pattern Lyra: PlayerState dona a interface; ASC vive
como subobject do UZeusGASComponent (Component Registry).
Tres acessos:
- GetAbilitySystemComponent (interface, retorna base UAbilitySystemComponent)
- GetZeusAbilitySystemComponent (BlueprintPure, retorna UZeusAbilitySystemComponent
custom com 12 overrides ZeusNetwork)
- GetZeusAttributeSet (BlueprintPure, helper pro AttributeSet tipado)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,13 @@
|
|||||||
#include "ZeusPlayerState.h"
|
#include "ZeusPlayerState.h"
|
||||||
|
|
||||||
|
#include "AbilitySystemComponent.h"
|
||||||
#include "Components/ActorComponent.h"
|
#include "Components/ActorComponent.h"
|
||||||
#include "Misc/ConfigCacheIni.h"
|
#include "Misc/ConfigCacheIni.h"
|
||||||
#include "Net/UnrealNetwork.h"
|
#include "Net/UnrealNetwork.h"
|
||||||
#include "ZMMO.h"
|
#include "ZMMO.h"
|
||||||
|
#include "ZeusAbilitySystemComponent.h"
|
||||||
|
#include "ZeusAttributeSet.h"
|
||||||
|
#include "ZeusGASComponent.h"
|
||||||
|
|
||||||
AZeusPlayerState::AZeusPlayerState()
|
AZeusPlayerState::AZeusPlayerState()
|
||||||
{
|
{
|
||||||
@@ -98,3 +102,32 @@ void AZeusPlayerState::SetCharInfo(const FString& InCharName, const FString& InG
|
|||||||
CharName = InCharName;
|
CharName = InCharName;
|
||||||
GuildName = InGuildName;
|
GuildName = InGuildName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UAbilitySystemComponent* AZeusPlayerState::GetAbilitySystemComponent() const
|
||||||
|
{
|
||||||
|
// ASC vive como subobject do UZeusGASComponent (que esta no Component
|
||||||
|
// Registry). UE5 GAS nodes BP ("Get Ability System Component", "Apply
|
||||||
|
// Gameplay Effect To Target", etc.) chamam isto via IAbilitySystemInterface.
|
||||||
|
// O retorno e o ponteiro upcastado pra UAbilitySystemComponent (base) —
|
||||||
|
// mas em runtime e' UZeusAbilitySystemComponent (cast tipado via
|
||||||
|
// GetZeusAbilitySystemComponent abaixo).
|
||||||
|
return GetZeusAbilitySystemComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
UZeusAbilitySystemComponent* AZeusPlayerState::GetZeusAbilitySystemComponent() const
|
||||||
|
{
|
||||||
|
if (UZeusGASComponent* GAS = GetZeusComponent<UZeusGASComponent>())
|
||||||
|
{
|
||||||
|
return GAS->AbilitySystemComponent.Get();
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
UZeusAttributeSet* AZeusPlayerState::GetZeusAttributeSet() const
|
||||||
|
{
|
||||||
|
if (UZeusGASComponent* GAS = GetZeusComponent<UZeusGASComponent>())
|
||||||
|
{
|
||||||
|
return GAS->AttributeSet.Get();
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "AbilitySystemInterface.h"
|
||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
#include "GameFramework/PlayerState.h"
|
#include "GameFramework/PlayerState.h"
|
||||||
#include "Templates/SubclassOf.h"
|
#include "Templates/SubclassOf.h"
|
||||||
@@ -7,6 +8,8 @@
|
|||||||
|
|
||||||
class FLifetimeProperty;
|
class FLifetimeProperty;
|
||||||
class UActorComponent;
|
class UActorComponent;
|
||||||
|
class UZeusAbilitySystemComponent;
|
||||||
|
class UZeusAttributeSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PlayerState do MMO. Pattern UE5 idiomatico: o GameMode atribui
|
* PlayerState do MMO. Pattern UE5 idiomatico: o GameMode atribui
|
||||||
@@ -45,13 +48,36 @@ class UActorComponent;
|
|||||||
* ou o helper `GetZeusComponent<T>()`.
|
* ou o helper `GetZeusComponent<T>()`.
|
||||||
*/
|
*/
|
||||||
UCLASS(Config = Game, BlueprintType)
|
UCLASS(Config = Game, BlueprintType)
|
||||||
class ZMMO_API AZeusPlayerState : public APlayerState
|
class ZMMO_API AZeusPlayerState : public APlayerState, public IAbilitySystemInterface
|
||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AZeusPlayerState();
|
AZeusPlayerState();
|
||||||
|
|
||||||
|
// === IAbilitySystemInterface (UE5 GAS) ===
|
||||||
|
//
|
||||||
|
// Padrao Lyra: PlayerState implementa a interface; o ASC vive como
|
||||||
|
// subobject do UZeusGASComponent (Component Registry). Isso permite que
|
||||||
|
// qualquer Actor que receba este PlayerState resolva o ASC via cast
|
||||||
|
// pra IAbilitySystemInterface OU via node BP "Get Ability System
|
||||||
|
// Component" (que faz o mesmo internamente).
|
||||||
|
//
|
||||||
|
// Acesso BP: "Get Ability System Component" + pin do PlayerState.
|
||||||
|
// Acesso C++: `Cast<IAbilitySystemInterface>(PlayerState)->GetAbilitySystemComponent()`.
|
||||||
|
virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;
|
||||||
|
|
||||||
|
/// Versao tipada do ASC custom — retorna direto UZeusAbilitySystemComponent
|
||||||
|
/// (os 12 overrides que falam com o servidor custom via opcodes ZeusNetwork).
|
||||||
|
/// Prefira este sobre o getter da interface no BP — evita cast + expoe a API
|
||||||
|
/// do ASC custom (RequestActivateAbility, etc.).
|
||||||
|
UFUNCTION(BlueprintPure, Category = "Zeus|GAS")
|
||||||
|
UZeusAbilitySystemComponent* GetZeusAbilitySystemComponent() const;
|
||||||
|
|
||||||
|
/// Helper BP-friendly pro AttributeSet tipado (template C++ nao expoe pra BP).
|
||||||
|
UFUNCTION(BlueprintPure, Category = "Zeus|GAS")
|
||||||
|
UZeusAttributeSet* GetZeusAttributeSet() const;
|
||||||
|
|
||||||
// === Identidade publica ===
|
// === Identidade publica ===
|
||||||
//
|
//
|
||||||
// Todos os campos publicos sao Replicated — hoje o cliente UE5 roda em
|
// Todos os campos publicos sao Replicated — hoje o cliente UE5 roda em
|
||||||
|
|||||||
Reference in New Issue
Block a user