210 - Dynamic Elim Announcements
This commit is contained in:
parent
fa685e4b62
commit
6f4c73273e
|
@ -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();
|
||||||
|
|
|
@ -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; };
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue