Updated Combat to Include Red Vignette on Damage Taken

This commit is contained in:
Philip W 2023-04-27 06:59:52 +01:00
parent 9fd372ed9d
commit 11c905613a
8 changed files with 51 additions and 6 deletions

Binary file not shown.

BIN
Content/Blueprints/Combat_UI/RedVignette.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/Blueprints/Combat_UI/RedVignette_Inst.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/Levels/Build.umap (Stored with Git LFS)

Binary file not shown.

View File

@ -7,6 +7,7 @@
#include "TurnBaseCombatV2.h"
#include "BehaviorTree/BlackboardComponent.h"
#include "Blueprint/UserWidget.h"
#include "Kismet/GameplayStatics.h"
#include "Misc/OutputDeviceNull.h"
@ -36,6 +37,7 @@ void UHoldToInitCombat::BeginPlay()
InitCombatWidget->SetVisibility(ESlateVisibility::Hidden);
ReloadSlider = Cast<URadialSlider>(InitCombatWidget->GetWidgetFromName("ReloadSlider"));
CombatSystem = Cast<ATurnBaseCombatV2>(GetWorld()->GetGameState());
}
@ -53,6 +55,12 @@ void UHoldToInitCombat::TickComponent(float DeltaTime, ELevelTick TickType, FAct
InitCombatWidget->SetVisibility(ESlateVisibility::Hidden);
}
CombatSystem->RedVignetteMaterialInstance->GetScalarParameterValue(FName("BlendWeight"), RedVignetteIntensity);
if (RedVignetteIntensity > 0.0f)
{
CombatSystem->RedVignetteMaterialInstance->SetScalarParameterValue(FName("BlendWeight"), RedVignetteIntensity - DeltaTime * 2.0f);
}
if (bClickDown && TargetEnemy != nullptr)
{
Cast<ATurnBaseCombatV2>(GetWorld()->GetGameState())->StartCombat(TargetEnemy);

View File

@ -7,6 +7,7 @@
#include "NiagaraFunctionLibrary.h"
#include "Components/RadialSlider.h"
#include "BehaviorTree/BlackboardComponent.h"
#include "TurnBaseCombatV2.h"
#include "HoldToInitCombat.generated.h"
class UNiagaraSystem;
@ -46,6 +47,9 @@ public:
private:
bool bClickDown = false;
float ReloadTimer = 0.0f;
ATurnBaseCombatV2* CombatSystem;
float RedVignetteIntensity;
UFUNCTION()
AActor* LookingAtEnemy() const;

View File

@ -149,6 +149,21 @@ void ATurnBaseCombatV2::BeginPlay()
}
PlayerHealth = &Cast<ATempCharacter>(PlayerActor)->Health;
TArray<AActor*> AllActorsInScene;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), APostProcessVolume::StaticClass(), AllActorsInScene);
if (ensureMsgf(AllActorsInScene.Num() > 0, TEXT("No Post Processing Volume in scene")))
{
PostProcessVolume = Cast<APostProcessVolume>(AllActorsInScene[0]);
}
if (IsValid(RedVignetteMaterialInstance))
{
FWeightedBlendable WeightedBlendable;
WeightedBlendable.Object = RedVignetteMaterialInstance;
WeightedBlendable.Weight = 1.0f;
PostProcessVolume->Settings.WeightedBlendables.Array.Add(WeightedBlendable);
}
CombatTutorialWidgetInstance = CreateWidget<UUserWidget>(GetWorld(), CombatTutorialWidget);
HUD = CreateWidget<UUserWidget>(GetWorld(), HUDWidget);
TArray<AActor*> PlayerChildActors;
@ -250,7 +265,7 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
if ((CurrentComboString == "II" || CurrentComboString == "PP" || CurrentComboString == "EE" || CurrentComboString == "AA") &&
(PreviousComboString == "II" || PreviousComboString == "PP" || PreviousComboString == "EE" || PreviousComboString == "AA"))
{
ChainDamageMultiplier += 0.2;
ChainDamageMultiplier += ChainDamageMultiplierIncrease;
DamageMultiplierTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString("x"), FText::FromString(FString::SanitizeFloat(ChainDamageMultiplier))));
}
else if (CurrentComboString == "EI")
@ -312,7 +327,6 @@ void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType)
*PlayerHealth -= FMath::Clamp(Damage * BaseDefenseMultiplier, 0, 100);
UpdateProgressBars();
AddBattleLogMessage("Player was damaged for " + FString::FromInt(Damage * BaseDefenseMultiplier) + " HP by " + DamageType + ".");
//Ends Combat if either the player or enemy is dead
if (*EnemyHealth <= 0)
{
EndCombat();
@ -326,6 +340,11 @@ void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType)
DeathScreenWidget->AddToViewport();
return;
}
FOutputDeviceNull AR;
const FString Command = FString::Printf(TEXT("PlayCameraShakeShoot"));
PlayerActor->CallFunctionByNameWithArguments(*Command, AR, nullptr, true);
RedVignetteMaterialInstance->SetScalarParameterValue(FName("BlendWeight"), 1.0f);
//Ends Combat if either the player or enemy is dead
}
void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType)

View File

@ -11,6 +11,7 @@
#include "NiagaraFunctionLibrary.h"
#include "GameFramework/GameStateBase.h"
#include "Components/WidgetComponent.h"
#include "Engine/PostProcessVolume.h"
#include "StatusEffects/Thorns.h"
#include "TurnBaseCombatV2.generated.h"
@ -34,6 +35,8 @@ public:
float BaseDefenseMultiplier = 1.0f;
UPROPERTY()
float ChainDamageMultiplier = 1.0f;
UPROPERTY(EditAnywhere)
float ChainDamageMultiplierIncrease = 0.2f;
UPROPERTY(EditDefaultsOnly)
int DefaultActionPoints = 2;
@ -51,6 +54,8 @@ public:
UPROPERTY(EditDefaultsOnly)
UNiagaraSystem* GunEffect;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
UMaterialInstanceDynamic* RedVignetteMaterialInstance;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
AActor* PlayerActor;
@ -129,6 +134,9 @@ private:
bool IsValidCombo(FString Combo) const;
bool IsSpecialCombo(FString Combo) const;
UPROPERTY()
APostProcessVolume* PostProcessVolume;
UPROPERTY()
TSubclassOf<UStatusEffect> ThornsStatusEffect;
UPROPERTY()