diff --git a/Content/Blueprints/HUD/BP_BlasterHUD.uasset b/Content/Blueprints/HUD/BP_BlasterHUD.uasset index 36daa96..a137d65 100644 Binary files a/Content/Blueprints/HUD/BP_BlasterHUD.uasset and b/Content/Blueprints/HUD/BP_BlasterHUD.uasset differ diff --git a/Content/Blueprints/HUD/WBP_Announcement.uasset b/Content/Blueprints/HUD/WBP_Announcement.uasset new file mode 100644 index 0000000..506fcd8 Binary files /dev/null and b/Content/Blueprints/HUD/WBP_Announcement.uasset differ diff --git a/Source/Blaster/HUD/Announcement.cpp b/Source/Blaster/HUD/Announcement.cpp new file mode 100644 index 0000000..f6b8b15 --- /dev/null +++ b/Source/Blaster/HUD/Announcement.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "Announcement.h" + diff --git a/Source/Blaster/HUD/Announcement.h b/Source/Blaster/HUD/Announcement.h new file mode 100644 index 0000000..c307478 --- /dev/null +++ b/Source/Blaster/HUD/Announcement.h @@ -0,0 +1,25 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "Announcement.generated.h" + +/** + * + */ +UCLASS() +class BLASTER_API UAnnouncement : public UUserWidget +{ + GENERATED_BODY() + +public: + + UPROPERTY(meta = (BindWidget)) + class UTextBlock* AnnouncementText; + + UPROPERTY(meta = (BindWidget)) + UTextBlock* WarmupTime; + +}; diff --git a/Source/Blaster/HUD/BlasterHUD.cpp b/Source/Blaster/HUD/BlasterHUD.cpp index 3b0848c..9a7424a 100644 --- a/Source/Blaster/HUD/BlasterHUD.cpp +++ b/Source/Blaster/HUD/BlasterHUD.cpp @@ -3,6 +3,7 @@ #include "BlasterHUD.h" +#include "Announcement.h" #include "CharacterOverlay.h" #include "Blueprint/UserWidget.h" @@ -21,6 +22,16 @@ void ABlasterHUD::AddCharacterOverlay() } } +void ABlasterHUD::AddAnnouncementOverlay() +{ + APlayerController* PlayerController = GetOwningPlayerController(); + if (PlayerController && AnnouncementClass) + { + Announcement = CreateWidget(PlayerController, AnnouncementClass); + Announcement->AddToViewport(); + } +} + void ABlasterHUD::DrawHUD() { Super::DrawHUD(); diff --git a/Source/Blaster/HUD/BlasterHUD.h b/Source/Blaster/HUD/BlasterHUD.h index 4c2637f..00e1e73 100644 --- a/Source/Blaster/HUD/BlasterHUD.h +++ b/Source/Blaster/HUD/BlasterHUD.h @@ -32,6 +32,7 @@ class BLASTER_API ABlasterHUD : public AHUD public: virtual void DrawHUD() override; void AddCharacterOverlay(); + void AddAnnouncementOverlay(); UPROPERTY(EditAnywhere, Category = "Player Stats") TSubclassOf CharacterOverlayClass; @@ -39,6 +40,11 @@ public: UPROPERTY() class UCharacterOverlay* CharacterOverlay; + UPROPERTY(EditAnywhere, Category = "Announcements") + TSubclassOf AnnouncementClass; + + UPROPERTY() + class UAnnouncement* Announcement; protected: virtual void BeginPlay() override; diff --git a/Source/Blaster/PlayerController/BlasterPlayerController.cpp b/Source/Blaster/PlayerController/BlasterPlayerController.cpp index 2f77881..75e9f49 100644 --- a/Source/Blaster/PlayerController/BlasterPlayerController.cpp +++ b/Source/Blaster/PlayerController/BlasterPlayerController.cpp @@ -4,6 +4,7 @@ #include "BlasterPlayerController.h" #include "Blaster/Character/BlasterCharacter.h" +#include "Blaster/HUD/Announcement.h" #include "Blaster/HUD/BlasterHUD.h" #include "Blaster/HUD/CharacterOverlay.h" #include "Components/ProgressBar.h" @@ -17,6 +18,10 @@ void ABlasterPlayerController::BeginPlay() Super::BeginPlay(); BlasterHUD = Cast(GetHUD()); + if (BlasterHUD) + { + BlasterHUD->AddAnnouncementOverlay(); + } } void ABlasterPlayerController::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const @@ -72,17 +77,26 @@ float ABlasterPlayerController::GetServerTime() return GetWorld()->GetTimeSeconds() + ClientServerDelta; } +void ABlasterPlayerController::HandleMatchHasStarted() +{ + BlasterHUD = BlasterHUD == nullptr ? Cast(GetHUD()) : BlasterHUD; + if (BlasterHUD) + { + BlasterHUD->AddCharacterOverlay(); + if (BlasterHUD->Announcement) + { + BlasterHUD->Announcement->SetVisibility(ESlateVisibility::Hidden); + } + } +} + void ABlasterPlayerController::OnMatchStateSet(FName State) { MatchState = State; if (MatchState == MatchState::InProgress) { - BlasterHUD = BlasterHUD == nullptr ? Cast(GetHUD()) : BlasterHUD; - if (BlasterHUD) - { - BlasterHUD->AddCharacterOverlay(); - } + HandleMatchHasStarted(); } } @@ -90,11 +104,7 @@ void ABlasterPlayerController::OnRep_MatchState() { if (MatchState == MatchState::InProgress) { - BlasterHUD = BlasterHUD == nullptr ? Cast(GetHUD()) : BlasterHUD; - if (BlasterHUD) - { - BlasterHUD->AddCharacterOverlay(); - } + HandleMatchHasStarted(); } } @@ -164,7 +174,7 @@ void ABlasterPlayerController::SetHUDHealth(float Health, float MaxHealth) void ABlasterPlayerController::SetHUDScore(float Score) { BlasterHUD = BlasterHUD == nullptr ? Cast(GetHUD()) : BlasterHUD; - bool bHUDValid =CharacterOverlay && CharacterOverlay->ScoreValue; + bool bHUDValid = CharacterOverlay && CharacterOverlay->ScoreValue; if (bHUDValid) { diff --git a/Source/Blaster/PlayerController/BlasterPlayerController.h b/Source/Blaster/PlayerController/BlasterPlayerController.h index a1dfa13..800fe5f 100644 --- a/Source/Blaster/PlayerController/BlasterPlayerController.h +++ b/Source/Blaster/PlayerController/BlasterPlayerController.h @@ -37,6 +37,7 @@ protected: virtual void BeginPlay() override; void CheckTimeSync(float DeltaSeconds); + void HandleMatchHasStarted(); void SetHUDTime(); void PollInit();