diff --git a/Source/ZMMO/Game/Entity/ZeusCharacter.cpp b/Source/ZMMO/Game/Entity/ZeusCharacter.cpp index 1a31eb0..14f2afc 100644 --- a/Source/ZMMO/Game/Entity/ZeusCharacter.cpp +++ b/Source/ZMMO/Game/Entity/ZeusCharacter.cpp @@ -173,6 +173,12 @@ void AZeusCharacter::Tick(const float DeltaSeconds) void AZeusCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { + // IMPORTANTE: chamar Super:: pra que BPs filhos consigam auto-bindar + // nodes EnhancedInputAction no Event Graph (ex: GA_Kick / IA_Kick no + // BP_ThirdPersonCharacter). Sem isso, bindings em BP ficam orfaos -- + // so' bindings C++ (Move/Look/Jump/Dash abaixo) recebem input. + Super::SetupPlayerInputComponent(PlayerInputComponent); + if (UEnhancedInputComponent* EnhancedInputComponent = Cast(PlayerInputComponent)) { EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &AZeusCharacter::OnJumpPressed); diff --git a/Source/ZMMO/Game/Modes/ZeusGameMode.cpp b/Source/ZMMO/Game/Modes/ZeusGameMode.cpp index a017ef8..9f8c11f 100644 --- a/Source/ZMMO/Game/Modes/ZeusGameMode.cpp +++ b/Source/ZMMO/Game/Modes/ZeusGameMode.cpp @@ -5,10 +5,47 @@ #include "ZeusPlayerController.h" #include "ZeusPlayerState.h" +#include "UObject/ConstructorHelpers.h" + AZeusGameMode::AZeusGameMode() { - DefaultPawnClass = AZeusCharacter::StaticClass(); + // DefaultPawnClass: usar o BP filho (BP_ThirdPersonCharacter) em vez do + // C++ puro. BPs filhos so' sao instanciados se o pawn possessed for da + // classe BP -- caso contrario o engine cria a classe C++ direta e perde + // TUDO que o designer fez no BP (EnhancedInputAction events, AnimBP wire, + // hooks de ability, componentes adicionados via editor). + // + // Fallback pra AZeusCharacter pura se o asset BP nao existir (asset + // renomeado/deletado por engano -- nao deve acontecer em prod). + static ConstructorHelpers::FClassFinder DefaultPawnBP( + TEXT("/Game/ZMMO/Core/Player/BP_ZeusPlayerCharacter")); + if (DefaultPawnBP.Succeeded()) + { + DefaultPawnClass = DefaultPawnBP.Class; + } + else + { + DefaultPawnClass = AZeusCharacter::StaticClass(); + } + PlayerControllerClass = AZeusPlayerController::StaticClass(); - PlayerStateClass = AZeusPlayerState::StaticClass(); + + // PlayerStateClass: usar BP filho pelo mesmo motivo do DefaultPawnClass -- + // componentes BP-added (ex: UZeusGASComponent listado em DefaultGame.ini + // ComponentClasses), eventos no Event Graph e overrides do designer so' + // existem na classe BP. C++ direto (AZeusPlayerState) perde tudo isso. + // TODO: renomear o asset pra BP_ZeusPlayerState pra alinhar com a convencao + // (BP_ZeusPlayerCharacter) -- quando renomear, atualizar o path aqui. + static ConstructorHelpers::FClassFinder PlayerStateBP( + TEXT("/Game/ZMMO/Core/Player/BP_PlayerState")); + if (PlayerStateBP.Succeeded()) + { + PlayerStateClass = PlayerStateBP.Class; + } + else + { + PlayerStateClass = AZeusPlayerState::StaticClass(); + } + HUDClass = AZeusHUD::StaticClass(); } diff --git a/ZMMO.uproject b/ZMMO.uproject index d50db3d..8513882 100644 --- a/ZMMO.uproject +++ b/ZMMO.uproject @@ -76,6 +76,10 @@ { "Name": "CommonUI", "Enabled": true + }, + { + "Name": "GameplayAbilities", + "Enabled": true } ], "AdditionalPluginDirectories": [