From 6f4c73273e67519d32e29f5db375210b860423db Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Sun, 29 May 2022 13:02:43 +0200 Subject: [PATCH] 210 - Dynamic Elim Announcements --- Source/Blaster/HUD/BlasterHUD.cpp | 64 +++++++++++++++++++++++-------- Source/Blaster/HUD/BlasterHUD.h | 9 +++++ 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/Source/Blaster/HUD/BlasterHUD.cpp b/Source/Blaster/HUD/BlasterHUD.cpp index 8d8a9cb..b34d1d1 100644 --- a/Source/Blaster/HUD/BlasterHUD.cpp +++ b/Source/Blaster/HUD/BlasterHUD.cpp @@ -8,13 +8,61 @@ #include "DebugWidget.h" #include "ElimAnnouncement.h" #include "Blueprint/UserWidget.h" -#include "Components/TextBlock.h" +#include "Blueprint/WidgetLayoutLibrary.h" +#include "Components/CanvasPanelSlot.h" +#include "Components/HorizontalBox.h" void ABlasterHUD::BeginPlay() { Super::BeginPlay(); } +void ABlasterHUD::AddElimAnnouncement(FString Attacker, FString Victim) +{ + OwningPlayer = OwningPlayer == nullptr ? GetOwningPlayerController() : OwningPlayer; + if (OwningPlayer && ElimAnnouncementClass) + { + UElimAnnouncement* ElimAnnouncementWidget = CreateWidget(OwningPlayer, ElimAnnouncementClass); + if (ElimAnnouncementWidget) + { + ElimAnnouncementWidget->SetElimAnnouncementText(Attacker, Victim); + ElimAnnouncementWidget->AddToViewport(); + for (UElimAnnouncement* Msg : ElimMessages) + { + if (Msg && Msg->AnnouncementBox) + { + UCanvasPanelSlot* CanvasSlot = UWidgetLayoutLibrary::SlotAsCanvasSlot(Msg->AnnouncementBox); + FVector2D Position = CanvasSlot->GetPosition(); + FVector2D NewPosition( + CanvasSlot->GetPosition().X, + Position.Y - CanvasSlot->GetSize().Y + ); + CanvasSlot->SetPosition(NewPosition); + } + } + ElimMessages.Add(ElimAnnouncementWidget); + + FTimerHandle ElimMsgTimer; + FTimerDelegate ElimMsgDelegate; + ElimMsgDelegate.BindUFunction(this, FName("ElimAnnouncementTimerFinished"), ElimAnnouncementWidget); + GetWorldTimerManager().SetTimer( + ElimMsgTimer, + ElimMsgDelegate, + ElimAnnouncementTime, + false + ); + } + } +} + +void ABlasterHUD::ElimAnnouncementTimerFinished(UElimAnnouncement* MsgToRemove) +{ + if (MsgToRemove) + { + MsgToRemove->RemoveFromParent(); + } +} + void ABlasterHUD::AddDebugWidget() { APlayerController* PlayerController = GetOwningPlayerController(); @@ -45,20 +93,6 @@ void ABlasterHUD::AddAnnouncementOverlay() } } -void ABlasterHUD::AddElimAnnouncement(FString Attacker, FString Victim) -{ - OwningPlayer = OwningPlayer == nullptr ? GetOwningPlayerController() : OwningPlayer; - if (OwningPlayer && ElimAnnouncementClass) - { - UElimAnnouncement* ElimAnnouncementWidget = CreateWidget(OwningPlayer, ElimAnnouncementClass); - if (ElimAnnouncementWidget) - { - ElimAnnouncementWidget->SetElimAnnouncementText(Attacker, Victim); - ElimAnnouncementWidget->AddToViewport(); - } - } -} - void ABlasterHUD::DrawHUD() { Super::DrawHUD(); diff --git a/Source/Blaster/HUD/BlasterHUD.h b/Source/Blaster/HUD/BlasterHUD.h index 8d9c1f8..ead3251 100644 --- a/Source/Blaster/HUD/BlasterHUD.h +++ b/Source/Blaster/HUD/BlasterHUD.h @@ -71,6 +71,15 @@ private: UPROPERTY(EditAnywhere) TSubclassOf ElimAnnouncementClass; + UPROPERTY(EditAnywhere) + float ElimAnnouncementTime = 2.5f; + + UFUNCTION() + void ElimAnnouncementTimerFinished(UElimAnnouncement* MsgToRemove); + + UPROPERTY() + TArray ElimMessages; + public: FORCEINLINE void SetHUDPackage(const FHUDPackage& Package) { HUDPackage = Package; }; };