feat(jobs): Jobs.1 client UI infra (handler + library + tecla J) + UI tweaks

Infraestrutura cliente da promocao de classe (Jobs.1). WBP_JobChangePanel
NAO esta neste commit — foi exploracao descartada (criar UI dinamica de
botoes via MCP BP graph esbarrou em limites do CreateWidget node). A
fundacao C++ fica pronta pra ser usada quando voltarmos pra UI.

INFRA C++ NOVA (Source/ZMMOJobs/)
* UZMMOJobChangeNetworkHandler (WorldSubsystem novo) — bind no
  OnJobChangeResult do plugin e re-broadcast via FZMMOOnJobChangeResultBP
  (dynamic multicast assignavel em BP). WBP futura escuta direto.
* UZMMOJobsSubsystem helpers: GetJobsByTier(EZMMOJobTier) +
  GetEligibleNextJobs(currentClassId) — filtra por ParentClassId. Pure.
* UZMMOJobsLibrary BPFL wrappers + SendJobChangeRequest convenience
  (delega pro UZeusNetworkSubsystem). Dep ZeusNetwork adicionada no
  Build.cs.

ENUM + INPUT
* EZMMOInGameUIState ganha JobChangePanel (entre StatusWindow e
  Inventory). DA_InGameScreenSet pendente de receber entry quando
  WBP for criada (tecla J vai falhar silenciosamente ate la).
* ZMMOPlayerController: tecla J -> ToggleJobChangePanel ->
  Flow->ToggleScreen(JobChangePanel). Espelha pattern do Alt+A do
  StatusWindow (InputComponent legacy BindKey + FInputChord).

UI TWEAKS
* WBP_StatusWindow + DT_UI_Styles: ajustes visuais no Editor durante a
  sessao (sem mudanca funcional documentavel — provavelmente fontes/
  spacing/cores).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-24 01:37:04 -03:00
parent f832c1a4df
commit 6391372f00
12 changed files with 250 additions and 1 deletions

View File

@@ -2,6 +2,7 @@
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "ZMMOJobTypes.h"
#include "ZMMOJobsLibrary.generated.h"
class UZMMOJobDataAsset;
@@ -36,4 +37,26 @@ public:
UFUNCTION(BlueprintPure, Category = "Zeus|Jobs",
meta = (WorldContext = "WorldContextObject"))
static bool IsJobRegistered(const UObject* WorldContextObject, int32 ClassId);
/// Lista jobs num tier (UI dropdown). Vazio se subsystem indisponivel.
UFUNCTION(BlueprintPure, Category = "Zeus|Jobs",
meta = (WorldContext = "WorldContextObject"))
static TArray<UZMMOJobDataAsset*> GetJobsByTier(
const UObject* WorldContextObject, EZMMOJobTier Tier);
/// Destinos de promocao a partir do char atual. WBP de promocao consome
/// direto. Vazio se nao houver filhos (ex: char ja' esta em Tier 3
/// Mastery — Jobs.4 introduzira terminal de progressao).
UFUNCTION(BlueprintPure, Category = "Zeus|Jobs",
meta = (WorldContext = "WorldContextObject"))
static TArray<UZMMOJobDataAsset*> GetEligibleNextJobs(
const UObject* WorldContextObject, int32 CurrentClassId);
/// Helper de send via ZeusNetworkSubsystem. Conveniencia pra WBP nao
/// precisar pegar o subsystem manualmente. Idempotente: rejeitado
/// silenciosamente se nao conectado.
UFUNCTION(BlueprintCallable, Category = "Zeus|Jobs",
meta = (WorldContext = "WorldContextObject"))
static void SendJobChangeRequest(
const UObject* WorldContextObject, int32 TargetClassId);
};