Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FName UStructuralDamageEffectComponent::ParameterName = TEXT("Damage");
- UStructuralDamageEffectComponent::UStructuralDamageEffectComponent()
- {
- DamageMask = CreateDefaultSubobject<UTextureRenderTarget2D>(TEXT("DamageMask"));
- DamageMask->RenderTargetFormat = ETextureRenderTargetFormat::RTF_R8;
- }
- void UStructuralDamageEffectComponent::Initialize(UMaterialCopyComponent* InMaterialCopy, int32 InDamageMaskResolution)
- {
- DamageMask->InitAutoFormat(InDamageMaskResolution, InDamageMaskResolution);
- DamageMask->UpdateResourceImmediate(true);
- float Value = 0.0f;
- if (InMaterialCopy->MaterialInstances.Num() > 0)
- for (auto i = 0; i < InMaterialCopy->MaterialInstances.Num(); i++)
- {
- if (InMaterialCopy->MaterialInstances[i]->GetScalarParameterValue(ParameterName, Value))
- Materials.Add(InMaterialCopy->MaterialInstances[i]);
- }
- }
- void UStructuralDamageEffectComponent::SetDamage(float InValue)
- {
- InValue = FMath::Clamp(InValue, 0.0f, 1.0f);
- if (Materials.Num() > 0)
- for (auto i = 0; i < Materials.Num(); i++)
- Materials[i]->SetScalarParameterValue(ParameterName, InValue);
- }
- void UStructuralDamageEffectComponent::AddHit(FVector InLocation, FVector InDirection, float InRadius)
- {
- // TODO: This material is null here- what!!?
- DamageMaskMaterial->SetVectorParameterValue(TEXT("Location"), InLocation);
- DamageMaskMaterial->SetVectorParameterValue(TEXT("Direction"), InDirection);
- DamageMaskMaterial->SetScalarParameterValue(TEXT("Radius"), InRadius);
- UKismetRenderingLibrary::DrawMaterialToRenderTarget(this, DamageMask, DamageMaskMaterial);
- DamageMask->UpdateResource();
- }
- void UStructuralDamageEffectComponent::BeginPlay()
- {
- Super::BeginPlay();
- if (DamageMask->Resource != nullptr)
- {
- if (Materials.Num() > 0)
- {
- UMaterialInterface* OriginalMaterial = LoadObject<UMaterialInterface>(nullptr, TEXT("Material'/Game/Empires/Materials/M_DamageMaskCreator.M_DamageMaskCreator'"));
- DamageMaskMaterial = UMaterialInstanceDynamic::Create(OriginalMaterial, GetOuter());
- for (auto i = 0; i < Materials.Num(); i++)
- Materials[i]->SetTextureParameterValue(TEXT("DamageMask"), DamageMask);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement