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>
This commit is contained in:
69
Source/ZeusJobs/Public/ZeusJobsSubsystem.h
Normal file
69
Source/ZeusJobs/Public/ZeusJobsSubsystem.h
Normal file
@@ -0,0 +1,69 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Subsystems/GameInstanceSubsystem.h"
|
||||
#include "ZeusJobTypes.h"
|
||||
#include "ZeusJobsSubsystem.generated.h"
|
||||
|
||||
class UZeusJobDataAsset;
|
||||
|
||||
/**
|
||||
* Cache central de UZeusJobDataAsset por ClassId. Vive como GameInstance
|
||||
* Subsystem — startup automatico quando GameInstance inicializa (PIE,
|
||||
* standalone, packaged). Sobrevive a map transitions.
|
||||
*
|
||||
* Initialize:
|
||||
* 1. Carrega via AssetRegistry: scan de UZeusJobDataAsset em todo Content
|
||||
* 2. Cacheia em TMap<int32, UZeusJobDataAsset*> por ClassId
|
||||
* 3. Log: quantos jobs encontrou
|
||||
*
|
||||
* Uso:
|
||||
* - C++: GameInstance->GetSubsystem<UZeusJobsSubsystem>()->GetJobData(0)
|
||||
* - BP: UZeusJobsLibrary::GetJobData(WorldContext, 0)
|
||||
*
|
||||
* Fase 7+ (Mod support): SCANEAR PrimaryAssetType="ZeusJob" do AssetManager
|
||||
* permite mods adicionarem DAs proprios sem mexer no source.
|
||||
*/
|
||||
UCLASS()
|
||||
class ZEUSJOBS_API UZeusJobsSubsystem : public UGameInstanceSubsystem
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
||||
virtual void Deinitialize() override;
|
||||
|
||||
/// Lookup por classId. Retorna nullptr se ClassId nao tem DA correspondente
|
||||
/// (caller usa Library com fallback FText).
|
||||
UFUNCTION(BlueprintPure, Category = "Zeus|Jobs")
|
||||
UZeusJobDataAsset* GetJobData(int32 ClassId) const;
|
||||
|
||||
/// Total de jobs cacheados (diagnostico).
|
||||
UFUNCTION(BlueprintPure, Category = "Zeus|Jobs")
|
||||
int32 GetJobCount() const { return CachedJobs.Num(); }
|
||||
|
||||
/// Lista jobs num tier especifico (UI agrupa por tier — ex: dropdown
|
||||
/// "Vocacoes possiveis"). Ordem do retorno e' a do AssetRegistry scan
|
||||
/// — UI pode reordenar por ClassId/DisplayName se precisar.
|
||||
UFUNCTION(BlueprintPure, Category = "Zeus|Jobs")
|
||||
TArray<UZeusJobDataAsset*> GetJobsByTier(EZeusJobTier Tier) const;
|
||||
|
||||
/// Destinos de promocao validos a partir do `CurrentClassId`. Filtra
|
||||
/// pelos jobs que tem `ParentClassId == CurrentClassId`. WBP de
|
||||
/// promocao consome direto pra montar botoes "Tornar-se X".
|
||||
///
|
||||
/// NOTA: condicao de elegibilidade real (jobLevel >= cap, quest, item)
|
||||
/// e' do server — UI apenas LISTA opcoes possiveis pelo schema. Server
|
||||
/// reponde rejeicao via S_JOB_CHANGE_RESULT (Jobs::EJobChangeRejectReason).
|
||||
UFUNCTION(BlueprintPure, Category = "Zeus|Jobs")
|
||||
TArray<UZeusJobDataAsset*> GetEligibleNextJobs(int32 CurrentClassId) const;
|
||||
|
||||
private:
|
||||
/// Scan AssetRegistry + popula CachedJobs. Sincronizo (V1) — chamado UMA
|
||||
/// vez no Initialize. Pra 50 jobs eh aceitavel; se crescer pra 200+ pode
|
||||
/// virar async no futuro.
|
||||
void LoadJobsFromAssetRegistry();
|
||||
|
||||
UPROPERTY()
|
||||
TMap<int32, TObjectPtr<UZeusJobDataAsset>> CachedJobs;
|
||||
};
|
||||
Reference in New Issue
Block a user