- 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>
76 lines
2.7 KiB
C++
76 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "UObject/Interface.h"
|
|
#include "ZeusEntityTypes.h"
|
|
#include "ZeusEntityInterface.generated.h"
|
|
|
|
/**
|
|
* UZeusEntityInterface
|
|
*
|
|
* Marcador `UInterface` necessario para o sistema de reflexao da Unreal. Todo o
|
|
* contrato vive em `IZeusEntityInterface` (puro C++).
|
|
*/
|
|
UINTERFACE(BlueprintType, MinimalAPI, meta = (CannotImplementInterfaceInBlueprint))
|
|
class UZeusEntityInterface : public UInterface
|
|
{
|
|
GENERATED_BODY()
|
|
};
|
|
|
|
/**
|
|
* IZeusEntityInterface
|
|
*
|
|
* Contrato comum de todas as entidades replicadas pelo Zeus Server (player
|
|
* local, players remotos, mobs, NPCs, objetos). Adaptado para o nosso modelo
|
|
* "cliente solto + servidor valida input".
|
|
*
|
|
* Decisoes:
|
|
* 1. **Identidade autoritativa**: `EntityId` e `EntityType` vem do servidor; o
|
|
* cliente nunca os altera.
|
|
* 2. **Visibilidade gated por AOI**: o servidor envia spawn/despawn quando o
|
|
* target entra/sai da area de interesse. O cliente reage via
|
|
* `SetEntityRelevant(bool)`.
|
|
* 3. **Player local nao reconcilia em V0**: para o `AZeusCharacter` o
|
|
* `ApplyEntitySnapshot` e no-op (cliente solto controla landscape). Quando
|
|
* a colisao de objetos chegar no servidor podemos ligar reconciliacao
|
|
* horizontal opcional.
|
|
*
|
|
* Por que UInterface (e nao heranca classica)?
|
|
* - `AZeusCharacter` ja herda de `ACharacter`. Forcar uma classe base
|
|
* `AZeusEntity : AActor` para todos perderia o `ACharacter` gratuito.
|
|
* A interface permite que o player local (`ACharacter`), o proxy remoto
|
|
* (`ACharacter`) e entidades genericas (`AActor`) implementem o mesmo
|
|
* contrato sem heranca multipla concreta.
|
|
*/
|
|
class ZMMO_API IZeusEntityInterface
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
/** Identificador autoritativo da entidade no servidor. */
|
|
virtual int64 GetZeusEntityId() const = 0;
|
|
|
|
/** Categoria da entidade (Player, Mob, NPC, Object). */
|
|
virtual EZeusEntityType GetZeusEntityType() const = 0;
|
|
|
|
/**
|
|
* Aplica um snapshot autoritativo. Implementacoes podem extender com
|
|
* interpolacao temporal ou logica especifica (anim drivers, etc.).
|
|
*
|
|
* Para o jogador local, este metodo e no-op em V0: o cliente conduz a
|
|
* fisica do landscape de forma autoritativa local, e o servidor apenas
|
|
* valida input/velocidade (ADR 0038).
|
|
*/
|
|
virtual void ApplyEntitySnapshot(const FZeusEntitySnapshot& Snapshot) = 0;
|
|
|
|
/**
|
|
* Alterna entre estado visivel/ativo (`true`) e oculto/desativado (`false`).
|
|
* Implementacao default das classes do projeto: `Hidden + DisableCollision +
|
|
* DisableTick` ao desativar (preserva o ator para futuro pooling).
|
|
*
|
|
* Para o jogador local, `bRelevant=false` e ignorado — nunca despawnamos o
|
|
* proprio personagem do cliente local.
|
|
*/
|
|
virtual void SetEntityRelevant(bool bRelevant) = 0;
|
|
};
|