103 - Dissolving with Curves

This commit is contained in:
Bert 2022-05-08 18:35:37 +02:00
parent e7afae361b
commit 018013cb5d
6 changed files with 50 additions and 0 deletions

Binary file not shown.

View File

@ -49,6 +49,8 @@ ABlasterCharacter::ABlasterCharacter()
TurningInPlace = ETurningInPlace::ETIP_NotTurning;
NetUpdateFrequency = 66.f;
MinNetUpdateFrequency = 33.f;
DissolveTimeline = CreateDefaultSubobject<UTimelineComponent>(TEXT("DissolveTimelineComponent"));
}
void ABlasterCharacter::BeginPlay()
@ -120,6 +122,15 @@ void ABlasterCharacter::MulticastEliminated_Implementation()
{
bEliminated = true;
PlayEliminatedMontage();
if (DissolveMaterialInstance)
{
DynamicDissolveMaterialInstance = UMaterialInstanceDynamic::Create(DissolveMaterialInstance, this);
GetMesh()->SetMaterial(0, DynamicDissolveMaterialInstance);
DynamicDissolveMaterialInstance->SetScalarParameterValue(TEXT("Dissolve"), 0.55f);
DynamicDissolveMaterialInstance->SetScalarParameterValue(TEXT("Glow"), 200.f);
}
StartDissolve();
}
void ABlasterCharacter::EliminationTimerFinished()
@ -477,6 +488,24 @@ void ABlasterCharacter::UpdateHUDHealth()
}
}
void ABlasterCharacter::UpdateDissolveMaterial(float DissolveValue)
{
if (DynamicDissolveMaterialInstance)
{
DynamicDissolveMaterialInstance->SetScalarParameterValue(TEXT("Dissolve"), DissolveValue);
}
}
void ABlasterCharacter::StartDissolve()
{
DissolveTrack.BindDynamic(this, &ABlasterCharacter::UpdateDissolveMaterial);
if (DissolveCurve && DissolveTimeline)
{
DissolveTimeline->AddInterpFloat(DissolveCurve, DissolveTrack);
DissolveTimeline->Play();
}
}
void ABlasterCharacter::SetOverlappingWeapon(AWeapon* Weapon)
{
if (OverlappingWeapon)

View File

@ -5,6 +5,7 @@
#include "CoreMinimal.h"
#include "Blaster/Interfaces/InteractWithCrosshairInterface.h"
#include "Blaster/Types/TurningInPlace.h"
#include "Components/TimelineComponent.h"
#include "GameFramework/Character.h"
#include "BlasterCharacter.generated.h"
@ -123,6 +124,26 @@ private:
FTimerHandle EliminationTimer;
void EliminationTimerFinished();
// Dissolve effect
UPROPERTY(VisibleAnywhere)
UTimelineComponent* DissolveTimeline;
FOnTimelineFloat DissolveTrack;
UPROPERTY(EditAnywhere)
UCurveFloat* DissolveCurve;
UFUNCTION()
void UpdateDissolveMaterial(float DissolveValue);
void StartDissolve();
// Dynamic instance that we can change at runtime
UPROPERTY(VisibleAnywhere, Category = Elimination)
UMaterialInstanceDynamic* DynamicDissolveMaterialInstance;
// Material instance set on the Blueprint, used with the dynamic material instance
UPROPERTY(EditAnywhere, Category = Elimination)
UMaterialInstance* DissolveMaterialInstance;
public:
void SetOverlappingWeapon(AWeapon* Weapon);