- Renomeia ~50 classes UCLASS/USTRUCT/UENUM/UINTERFACE pra Zeus* (AZeusGameMode, AZeusCharacter, UZeusGameInstance, IZeusEntityInterface, UZeusWorldSubsystem, FZeusEntitySnapshot, etc.) - Encurta AZMMOPlayerCharacter -> AZeusCharacter - Renomeia módulos satélite ZMMOAttributes -> ZeusAttributes e ZMMOJobs -> ZeusJobs (pasta + .Build.cs + .uproject) - Mantém módulo principal ZMMO (renomeia depois quando jogo ganhar nome) - DefaultEngine.ini: ActiveClassRedirects ZMMOX -> ZeusX (preserva BPs/assets) - DefaultGame.ini: sections atualizadas pra ZeusThemeSubsystem/ZeusPlayerState - Category="ZMMO|..." -> "Zeus|..." em UPROPERTYs - Preserva LogZMMO, ZMMO_API, /Script/ZMMO., /Game/ZMMO/, classes Target Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
52 lines
1.8 KiB
C++
52 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Subsystems/WorldSubsystem.h"
|
|
#include "ZeusAttributesPayload.h"
|
|
#include "ZeusAttributeNetworkHandler.generated.h"
|
|
|
|
class UZeusNetworkSubsystem;
|
|
|
|
/**
|
|
* Ponte entre o `UZeusNetworkSubsystem` (GameInstanceSubsystem do plugin
|
|
* ZeusNetwork) e os `UZeusAttributeComponent` ligados aos atores do mundo.
|
|
*
|
|
* Por que UWorldSubsystem (e nao GameInstanceSubsystem)?
|
|
* - O registry de atores (`UZeusWorldSubsystem::GetActorByEntityId`) e'
|
|
* World-scoped, reset a cada OpenLevel.
|
|
* - World subsystem so existe enquanto ha mundo carregado, o que e' exato
|
|
* quando precisamos rotear snapshots (no front-end nao ha pawn).
|
|
*
|
|
* Lifecycle: `Initialize` binda nos 3 delegates do ZeusNetworkSubsystem;
|
|
* `Deinitialize` unbinda. Conversao `FZeusAttributesPayload ->
|
|
* FZeusAttributesSnapshot` (USTRUCT Blueprint) acontece aqui.
|
|
*/
|
|
UCLASS()
|
|
class ZEUSATTRIBUTES_API UZeusAttributeNetworkHandler : public UWorldSubsystem
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
|
virtual void Deinitialize() override;
|
|
|
|
virtual bool ShouldCreateSubsystem(UObject* Outer) const override;
|
|
|
|
private:
|
|
void HandleAttributeSnapshotFull(const FZeusAttributesPayload& Payload);
|
|
void HandleHpSpUpdate(int64 EntityId, int32 Hp, int32 Sp);
|
|
void HandleLevelUp(int64 EntityId, int32 NewBaseLevel, int32 StatusPointDelta);
|
|
void HandleStatAllocReply(bool bAccepted, int32 Reason);
|
|
|
|
UZeusNetworkSubsystem* GetZeusNetSubsystem() const;
|
|
|
|
/// Acha o AttributeComponent do player local (Pawn->PlayerState).
|
|
/// Usado pro StatAllocReply (sem EntityId no payload).
|
|
class UZeusAttributeComponent* FindLocalPlayerAttributeComponent() const;
|
|
|
|
FDelegateHandle SnapshotFullHandle;
|
|
FDelegateHandle HpSpUpdateHandle;
|
|
FDelegateHandle LevelUpHandle;
|
|
FDelegateHandle StatAllocReplyHandle;
|
|
};
|