Add MVP character proxy selection
This commit is contained in:
@@ -12,12 +12,15 @@
|
||||
#include "AgrarianPersistenceSubsystem.h"
|
||||
#include "AgrarianShelterActor.h"
|
||||
#include "AgrarianSurvivalComponent.h"
|
||||
#include "Components/SkeletalMeshComponent.h"
|
||||
#include "EnhancedInputSubsystems.h"
|
||||
#include "Engine/LocalPlayer.h"
|
||||
#include "Engine/SkeletalMesh.h"
|
||||
#include "GameFramework/Character.h"
|
||||
#include "GameFramework/CharacterMovementComponent.h"
|
||||
#include "InputCoreTypes.h"
|
||||
#include "InputMappingContext.h"
|
||||
#include "Materials/MaterialInterface.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "TimerManager.h"
|
||||
#include "AgrarianGame.h"
|
||||
@@ -75,6 +78,20 @@ namespace
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const TCHAR* GetMvpCharacterProxyMeshPath(const FName ProxyId)
|
||||
{
|
||||
return ProxyId == TEXT("female")
|
||||
? TEXT("/Game/Characters/Mannequins/Meshes/SKM_Quinn_Simple.SKM_Quinn_Simple")
|
||||
: TEXT("/Game/Characters/Mannequins/Meshes/SKM_Manny_Simple.SKM_Manny_Simple");
|
||||
}
|
||||
|
||||
const TCHAR* GetMvpCharacterProxyMaterialPath(const FName ProxyId)
|
||||
{
|
||||
return ProxyId == TEXT("female")
|
||||
? TEXT("/Game/Agrarian/Characters/Materials/M_AGR_CharacterProxy_Workwear_Female.M_AGR_CharacterProxy_Workwear_Female")
|
||||
: TEXT("/Game/Agrarian/Characters/Materials/M_AGR_CharacterProxy_Workwear_Male.M_AGR_CharacterProxy_Workwear_Male");
|
||||
}
|
||||
}
|
||||
|
||||
void AAgrarianGamePlayerController::BeginPlay()
|
||||
@@ -258,6 +275,30 @@ void AAgrarianGamePlayerController::HandleMvpEscapeInput()
|
||||
ShowMvpPauseMenu();
|
||||
}
|
||||
|
||||
void AAgrarianGamePlayerController::ApplyMvpCharacterProxyToPawn()
|
||||
{
|
||||
AAgrarianGameCharacter* AgrarianCharacter = GetPawn<AAgrarianGameCharacter>();
|
||||
USkeletalMeshComponent* MeshComponent = AgrarianCharacter ? AgrarianCharacter->GetMesh() : nullptr;
|
||||
if (!MeshComponent)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (USkeletalMesh* ProxyMesh = LoadObject<USkeletalMesh>(nullptr, GetMvpCharacterProxyMeshPath(SelectedMvpCharacterProxyId)))
|
||||
{
|
||||
MeshComponent->SetSkeletalMesh(ProxyMesh);
|
||||
}
|
||||
|
||||
if (UMaterialInterface* ProxyMaterial = LoadObject<UMaterialInterface>(nullptr, GetMvpCharacterProxyMaterialPath(SelectedMvpCharacterProxyId)))
|
||||
{
|
||||
const int32 MaterialCount = FMath::Max(1, MeshComponent->GetNumMaterials());
|
||||
for (int32 MaterialIndex = 0; MaterialIndex < MaterialCount; ++MaterialIndex)
|
||||
{
|
||||
MeshComponent->SetMaterial(MaterialIndex, ProxyMaterial);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AAgrarianGamePlayerController::AgrarianGrantItem(FName ItemId, int32 Quantity)
|
||||
{
|
||||
if (ItemId == NAME_None || Quantity <= 0)
|
||||
@@ -498,14 +539,18 @@ void AAgrarianGamePlayerController::AgrarianSelectCharacter(FName Archetype)
|
||||
|
||||
if (Archetype == TEXT("male") || Archetype == TEXT("YoungAdultMale"))
|
||||
{
|
||||
SelectedMvpCharacterProxyId = TEXT("male");
|
||||
MvpFrontendWidget->SetSelectedCharacterArchetype(EAgrarianMvpCharacterArchetype::YoungAdultMale);
|
||||
ApplyMvpCharacterProxyToPawn();
|
||||
ClientMessage(TEXT("Selected MVP young adult male character archetype."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (Archetype == TEXT("female") || Archetype == TEXT("YoungAdultFemale"))
|
||||
{
|
||||
SelectedMvpCharacterProxyId = TEXT("female");
|
||||
MvpFrontendWidget->SetSelectedCharacterArchetype(EAgrarianMvpCharacterArchetype::YoungAdultFemale);
|
||||
ApplyMvpCharacterProxyToPawn();
|
||||
ClientMessage(TEXT("Selected MVP young adult female character archetype."));
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user