Files
ZMMO/Source/ZeusJobs/Public/ZeusJobDataAsset.h
Mateus Rodrigues 6a6a28a086 refactor: prefixo ZMMO -> Zeus em classes/módulos C++ do cliente
- 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>
2026-06-02 17:24:38 -03:00

94 lines
3.9 KiB
C++

#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "ZeusJobTypes.h"
#include "ZeusJobDataAsset.generated.h"
class UTexture2D;
class USoundBase;
class UAnimInstance;
class UAnimMontage;
/**
* Dados visuais/UI de UM job (classe). 1 .uasset por job em
* `Content/ZMMO/Data/Jobs/DA_Job_<Nome>.uasset`.
*
* ClassId eh a CHAVE — bate com `classId` do snapshot do server (rathena
* pc.hpp `job_class`, ex: Novice=0, Swordsman=1, Mage=2, ...).
*
* Soft pointers (TSoftObjectPtr) sao usados pra assets pesados (textures,
* sounds) — lazy-loaded quando precisar (level up, hover icon). DataAsset
* em si fica em memoria depois do scan do Subsystem.
*
* Async pointers (TSubclassOf) sao sync — anim BP precisa estar carregada
* quando o player spawna.
*/
UCLASS(BlueprintType)
class ZEUSJOBS_API UZeusJobDataAsset : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
/// Chave estavel (bate com `Config/Jobs/<Name>.json:Id` no server e com
/// `FZeusAttributesSnapshot::ClassId` recebido do server).
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job")
int32 ClassId = 0;
/// Nome tecnico estavel (en-US). Ex: "Novice", "Swordsman". Aparece em
/// logs e telemetria — NUNCA exibido pro player.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job")
FString TechnicalName;
/// Nome localizado exibido na UI (pt-BR no projeto base). Ex: "Novato".
/// Pode usar FText Localization tables pra multi-idioma futuro.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job")
FText DisplayName;
/// Tier hierarquico — espelha `JobDef::tier` do server. UI usa pra agrupar
/// jobs (ex: lista de Vocacoes possiveis quando promovendo Novato).
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job")
EZeusJobTier Tier = EZeusJobTier::Beginner;
/// ClassId do parent na arvore de promocao. 0 = sem parent (Novato eh root).
/// Espelha `JobDef::parentJobId` do server. UI usa pra filtrar destinos
/// possiveis ao mostrar painel de promocao.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job")
int32 ParentClassId = 0;
/// Lista de armas que o job pode equipar. Espelha `JobDef::allowedWeaponsMask`
/// do server (mas como TArray pra editor visual em vez de bitmask cru).
/// Inventory UI usa pra hint "nao pode equipar" + filtro de catalogo.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job")
TArray<EZeusWeaponType> AllowedWeapons;
/// Icone do job — usado em StatusWindow, CharacterCard, JobChangeUI.
/// Soft ptr: nao carrega ate alguem chamar LoadSynchronous() ou async load.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job|Assets")
TSoftObjectPtr<UTexture2D> JobIcon;
/// AnimInstance class override (opcional). Quando nao-null, AnimBP
/// padrao do PlayerCharacter eh substituido por esta classe no spawn
/// (jobs com move set diferente — Monge bate, Assassin furtivo, etc.).
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job|Anim")
TSubclassOf<UAnimInstance> DefaultAnimInstanceClass;
/// Montage de "job change" (animacao de transformacao). Tocada quando
/// player promove de Novice → 1a classe. V1 nao implementado.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job|Anim")
TSoftObjectPtr<UAnimMontage> JobChangeMontage;
/// Som de level up override. Quando null, HUD usa som generico do projeto.
/// Soft ptr: lazy load no primeiro level up.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Zeus|Job|Audio")
TSoftObjectPtr<USoundBase> LevelUpSoundCue;
/// PrimaryAssetType pro AssetManager (precisa pra GetPrimaryAssetIdList).
/// Hardcoded "ZeusJob" — registry classifica todos os DAs deste tipo.
virtual FPrimaryAssetId GetPrimaryAssetId() const override
{
return FPrimaryAssetId(FPrimaryAssetType(TEXT("ZeusJob")),
*FString::Printf(TEXT("Job_%d_%s"), ClassId, *TechnicalName));
}
};