Add MVP death respawn UI

This commit is contained in:
2026-05-18 21:13:31 -07:00
parent 0be6e0b7ef
commit 7c98bb7d41
6 changed files with 114 additions and 1 deletions
+36
View File
@@ -24,6 +24,7 @@ void AAgrarianDebugHUD::DrawHUD()
}
DrawMvpHudFrame(AgrarianCharacter);
DrawDeathRespawnPanel(AgrarianCharacter);
DrawInteractionPrompt(AgrarianCharacter);
DrawCriticalStats(AgrarianCharacter->GetSurvivalComponent());
const float InventoryBottomY = DrawInventoryPanel(AgrarianCharacter);
@@ -68,6 +69,41 @@ void AAgrarianDebugHUD::DrawMvpHudFrame(const AAgrarianGameCharacter* AgrarianCh
DrawText(HudText, FColor(225, 235, 220), X + (18.0f * Scale), Y + (16.0f * Scale), nullptr, 0.86f * Scale, false);
}
void AAgrarianDebugHUD::DrawDeathRespawnPanel(const AAgrarianGameCharacter* AgrarianCharacter)
{
if (!bShowDeathRespawnUI || !AgrarianCharacter || !Canvas)
{
return;
}
const UAgrarianSurvivalComponent* SurvivalComponent = AgrarianCharacter->GetSurvivalComponent();
if (!SurvivalComponent || !SurvivalComponent->Survival.bIsDead)
{
return;
}
const float Scale = FMath::Max(0.25f, TextScale);
const float PanelWidth = FMath::Min(Canvas->ClipX - 80.0f, 560.0f * Scale);
const float PanelHeight = 178.0f * Scale;
const float X = (Canvas->ClipX - PanelWidth) * 0.5f;
const float Y = (Canvas->ClipY - PanelHeight) * 0.5f;
DrawRect(FLinearColor(0.035f, 0.018f, 0.016f, 0.86f), X, Y, PanelWidth, PanelHeight);
DrawRect(FLinearColor(0.78f, 0.20f, 0.16f, 0.95f), X, Y, PanelWidth, 4.0f * Scale);
float TextY = Y + (28.0f * Scale);
DrawScaledLine(TEXT("YOU DID NOT SURVIVE"), X + (28.0f * Scale), TextY, 1.28f * Scale, FColor(245, 150, 130));
DrawScaledLine(
FString::Printf(TEXT("Cause: %s"), *SurvivalComponent->Survival.LastDeathReason.ToString()),
X + (30.0f * Scale),
TextY,
0.92f * Scale,
FColor(225, 210, 195));
TextY += 10.0f * Scale;
DrawScaledLine(TEXT("Respawn will return you to Ground Zero with acute conditions stabilized."), X + (30.0f * Scale), TextY, 0.86f * Scale, FColor(190, 205, 180));
DrawScaledLine(TEXT("Use the MVP respawn action when ready."), X + (30.0f * Scale), TextY, 0.86f * Scale, FColor(190, 205, 180));
}
void AAgrarianDebugHUD::DrawInteractionPrompt(const AAgrarianGameCharacter* AgrarianCharacter)
{
if (!bShowInteractionPrompt || !AgrarianCharacter || !AgrarianCharacter->HasInteractionPrompt() || !Canvas)
+4
View File
@@ -51,11 +51,15 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Agrarian|HUD")
bool bShowInteractionPrompt = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Agrarian|HUD")
bool bShowDeathRespawnUI = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Agrarian|HUD", meta = (ClampMin = "0.25"))
float PromptTextScale = 1.15f;
protected:
void DrawMvpHudFrame(const class AAgrarianGameCharacter* AgrarianCharacter);
void DrawDeathRespawnPanel(const class AAgrarianGameCharacter* AgrarianCharacter);
void DrawInteractionPrompt(const class AAgrarianGameCharacter* AgrarianCharacter);
void DrawCriticalStats(const UAgrarianSurvivalComponent* SurvivalComponent);
float DrawInventoryPanel(const class AAgrarianGameCharacter* AgrarianCharacter);
@@ -320,6 +320,19 @@ void AAgrarianGamePlayerController::AgrarianToggleInteractionPrompts()
ClientMessage(AgrarianHUD->bShowInteractionPrompt ? TEXT("MVP interaction prompts shown.") : TEXT("MVP interaction prompts hidden."));
}
void AAgrarianGamePlayerController::AgrarianToggleDeathRespawnUI()
{
AAgrarianDebugHUD* AgrarianHUD = GetHUD<AAgrarianDebugHUD>();
if (!AgrarianHUD)
{
ClientMessage(TEXT("No Agrarian HUD is active."));
return;
}
AgrarianHUD->bShowDeathRespawnUI = !AgrarianHUD->bShowDeathRespawnUI;
ClientMessage(AgrarianHUD->bShowDeathRespawnUI ? TEXT("MVP death/respawn UI shown.") : TEXT("MVP death/respawn UI hidden."));
}
void AAgrarianGamePlayerController::AgrarianSelectCharacter(FName Archetype)
{
if (!MvpFrontendWidget)
@@ -100,6 +100,9 @@ public:
UFUNCTION(Exec)
void AgrarianToggleInteractionPrompts();
UFUNCTION(Exec)
void AgrarianToggleDeathRespawnUI();
UFUNCTION(Exec)
void AgrarianSelectCharacter(FName Archetype);