diff --git a/Content/Widget/WBP_PlayerUI.uasset b/Content/Widget/WBP_PlayerUI.uasset index be80868..9c6e2d4 100644 Binary files a/Content/Widget/WBP_PlayerUI.uasset and b/Content/Widget/WBP_PlayerUI.uasset differ diff --git a/Source/Exo/Private/Characters/ExoPlayerCharacter.cpp b/Source/Exo/Private/Characters/ExoPlayerCharacter.cpp index 0f2765e..6547be9 100644 --- a/Source/Exo/Private/Characters/ExoPlayerCharacter.cpp +++ b/Source/Exo/Private/Characters/ExoPlayerCharacter.cpp @@ -82,6 +82,8 @@ void AExoPlayerCharacter::BeginPlay() PlayerHud->SetVisibilityAmmo(false); PlayerHud->SetVisibilityViewFinder(false); PlayerHud->SetShootingViewFinder(false); + PlayerHud->SetVisibilityDialogue(false); + PlayerHud->SetDialogueText(FText::FromString(TEXT("Przykładowy tekst"))); } } } diff --git a/Source/Exo/Private/Widget/WBP_PlayerUI.cpp b/Source/Exo/Private/Widget/WBP_PlayerUI.cpp index b334c0d..d7cfdc6 100644 --- a/Source/Exo/Private/Widget/WBP_PlayerUI.cpp +++ b/Source/Exo/Private/Widget/WBP_PlayerUI.cpp @@ -39,6 +39,12 @@ void UWBP_PlayerUI::SetAmmoNumber(int ammo) AmmoText->SetText(FText::AsNumber(ammo)); } +void UWBP_PlayerUI::SetDialogueText(FText text) +{ + timerDialogue = 0.0f; + textDialogue = text; +} + UUWBP_Buf* UWBP_PlayerUI::AddBuf(UTexture2D* texture, float procent) { if (!BufClass) @@ -93,6 +99,11 @@ void UWBP_PlayerUI::SetShootingViewFinder(bool Shooting) shootingViewFinder=Shooting; } +void UWBP_PlayerUI::SetVisibilityDialogue(bool visibility) +{ + showDialogue=visibility; +} + void UWBP_PlayerUI::NativeTick(const FGeometry& MyGeometry, float InDeltaTime) { Super::NativeTick(MyGeometry, InDeltaTime); @@ -102,7 +113,17 @@ void UWBP_PlayerUI::NativeTick(const FGeometry& MyGeometry, float InDeltaTime) opacityViewFinder = FMath::Clamp(opacityViewFinder + showSpeed * (showViewFinder?1:-1), 0.0f, 1.0f); opacityBuf = FMath::Clamp(opacityBuf + showSpeed * (showBuf?1:-1), 0.0f, 1.0f); opacityAmmo = FMath::Clamp(opacityAmmo + showSpeed * (showAmmo?1:-1), 0.0f, 1.0f); + opacityDialogue = FMath::Clamp(opacityDialogue + showSpeed * (showDialogue?1:-1), 0.0f, 1.0f); shootingViewFinderPercent=FMath::Clamp(shootingViewFinderPercent + showSpeed * (shootingViewFinder?1:-1), 0.0f, 1.0f); + timerDialogue += DialogueSpeed * InDeltaTime; + + FString OriginalString = textDialogue.ToString(); + int textDialogueSize = OriginalString.Len() * FMath::Clamp(timerDialogue / DialogueSpeed, 0.0f, 1.0f); + FString Substring = OriginalString.Left(textDialogueSize); + FText text = FText::FromString(Substring); + + if (DialogueText) + DialogueText->SetText(text); if (HPBar) HPBar->SetRenderOpacity(opacityHp); if (ViewFinder) @@ -111,6 +132,8 @@ void UWBP_PlayerUI::NativeTick(const FGeometry& MyGeometry, float InDeltaTime) BufPanel->SetRenderOpacity(opacityBuf); if (AmmoImage) AmmoPanel->SetRenderOpacity(opacityAmmo); + if (DialoguePanel) + DialoguePanel->SetRenderOpacity(opacityDialogue); if (!DynamicViewFinderMaterial) { if (!ViewFinder) @@ -129,8 +152,9 @@ void UWBP_PlayerUI::NativeTick(const FGeometry& MyGeometry, float InDeltaTime) } if (DynamicViewFinderMaterial) { - DynamicViewFinderMaterial->SetScalarParameterValue("Percent",shootingViewFinderPercent); - ViewFinder->SetRenderScale(FVector2D(1.0f, 1.0f)*((1.0f-shootingViewFinderPercent)*3+1)); + float changeViewFinderProcent=FMath::Clamp( FMath::Pow(shootingViewFinderPercent,3),0,1.0f); + DynamicViewFinderMaterial->SetScalarParameterValue("Percent",changeViewFinderProcent); + ViewFinder->SetRenderScale(FVector2D(1.0f, 1.0f)*((1.0f-changeViewFinderProcent)*3+1)); } } diff --git a/Source/Exo/Public/Widget/WBP_PlayerUI.h b/Source/Exo/Public/Widget/WBP_PlayerUI.h index b3567ed..a2c089a 100644 --- a/Source/Exo/Public/Widget/WBP_PlayerUI.h +++ b/Source/Exo/Public/Widget/WBP_PlayerUI.h @@ -22,6 +22,8 @@ public: void SetAmmoNumber(int ammo); + void SetDialogueText(FText text); + UUWBP_Buf* AddBuf(UTexture2D* texture,float procent); UPROPERTY(EditAnywhere, meta = (BindWidget)) @@ -42,6 +44,12 @@ public: UPROPERTY(EditAnywhere, meta = (BindWidget)) class UCanvasPanel* AmmoPanel; + UPROPERTY(EditAnywhere, meta = (BindWidget)) + class UCanvasPanel* DialoguePanel; + + UPROPERTY(EditAnywhere, meta = (BindWidget)) + class UTextBlock* DialogueText; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Buf") float BufRange; @@ -55,7 +63,10 @@ public: TMap AmmoIconMap; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Display") - float DisplaySpeed=1.0f; + float DisplaySpeed = 1.0f; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Display") + float DialogueSpeed = 0.1f; void SetVisibilityHP(bool visibility); @@ -66,6 +77,8 @@ public: void SetVisibilityViewFinder(bool visibility); void SetShootingViewFinder(bool Shooting); + + void SetVisibilityDialogue(bool visibility); protected: void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override; private: @@ -73,10 +86,12 @@ private: void updateBufPosition(); - bool showHp = true, showBuf = true, showAmmo = true, showViewFinder = true; - float opacityHp = 1.0f, opacityBuf = 1.0f, opacityAmmo = 1.0f, opacityViewFinder = 1.0f; - bool shootingViewFinder = false; - float shootingViewFinderPercent = 1.0f; + bool showHp = true, showBuf = true, showAmmo = true, showViewFinder = true, showDialogue = true; + float opacityHp = 1.0f, opacityBuf = 1.0f, opacityAmmo = 1.0f, opacityViewFinder = 1.0f, opacityDialogue = 1.0f; + bool shootingViewFinder = false; + float shootingViewFinderPercent = 1.0f; + float timerDialogue = 0.0f; + FText textDialogue = FText(); UMaterialInstanceDynamic* DynamicViewFinderMaterial = nullptr; };