210 - Dynamic Elim Announcements

This commit is contained in:
Kingsmedia 2022-05-29 13:02:43 +02:00
parent fa685e4b62
commit 6f4c73273e
2 changed files with 58 additions and 15 deletions

View File

@ -8,13 +8,61 @@
#include "DebugWidget.h" #include "DebugWidget.h"
#include "ElimAnnouncement.h" #include "ElimAnnouncement.h"
#include "Blueprint/UserWidget.h" #include "Blueprint/UserWidget.h"
#include "Components/TextBlock.h" #include "Blueprint/WidgetLayoutLibrary.h"
#include "Components/CanvasPanelSlot.h"
#include "Components/HorizontalBox.h"
void ABlasterHUD::BeginPlay() void ABlasterHUD::BeginPlay()
{ {
Super::BeginPlay(); Super::BeginPlay();
} }
void ABlasterHUD::AddElimAnnouncement(FString Attacker, FString Victim)
{
OwningPlayer = OwningPlayer == nullptr ? GetOwningPlayerController() : OwningPlayer;
if (OwningPlayer && ElimAnnouncementClass)
{
UElimAnnouncement* ElimAnnouncementWidget = CreateWidget<UElimAnnouncement>(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() void ABlasterHUD::AddDebugWidget()
{ {
APlayerController* PlayerController = GetOwningPlayerController(); 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<UElimAnnouncement>(OwningPlayer, ElimAnnouncementClass);
if (ElimAnnouncementWidget)
{
ElimAnnouncementWidget->SetElimAnnouncementText(Attacker, Victim);
ElimAnnouncementWidget->AddToViewport();
}
}
}
void ABlasterHUD::DrawHUD() void ABlasterHUD::DrawHUD()
{ {
Super::DrawHUD(); Super::DrawHUD();

View File

@ -71,6 +71,15 @@ private:
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
TSubclassOf<class UElimAnnouncement> ElimAnnouncementClass; TSubclassOf<class UElimAnnouncement> ElimAnnouncementClass;
UPROPERTY(EditAnywhere)
float ElimAnnouncementTime = 2.5f;
UFUNCTION()
void ElimAnnouncementTimerFinished(UElimAnnouncement* MsgToRemove);
UPROPERTY()
TArray<UElimAnnouncement*> ElimMessages;
public: public:
FORCEINLINE void SetHUDPackage(const FHUDPackage& Package) { HUDPackage = Package; }; FORCEINLINE void SetHUDPackage(const FHUDPackage& Package) { HUDPackage = Package; };
}; };