210 - Dynamic Elim Announcements
This commit is contained in:
parent
fa685e4b62
commit
6f4c73273e
|
@ -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<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()
|
||||
{
|
||||
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()
|
||||
{
|
||||
Super::DrawHUD();
|
||||
|
|
|
@ -71,6 +71,15 @@ private:
|
|||
UPROPERTY(EditAnywhere)
|
||||
TSubclassOf<class UElimAnnouncement> ElimAnnouncementClass;
|
||||
|
||||
UPROPERTY(EditAnywhere)
|
||||
float ElimAnnouncementTime = 2.5f;
|
||||
|
||||
UFUNCTION()
|
||||
void ElimAnnouncementTimerFinished(UElimAnnouncement* MsgToRemove);
|
||||
|
||||
UPROPERTY()
|
||||
TArray<UElimAnnouncement*> ElimMessages;
|
||||
|
||||
public:
|
||||
FORCEINLINE void SetHUDPackage(const FHUDPackage& Package) { HUDPackage = Package; };
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue