Advertisement
Guest User

Untitled

a guest
Dec 4th, 2017
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. FName UStructuralDamageEffectComponent::ParameterName = TEXT("Damage");
  2.  
  3. UStructuralDamageEffectComponent::UStructuralDamageEffectComponent()
  4. {
  5.     DamageMask = CreateDefaultSubobject<UTextureRenderTarget2D>(TEXT("DamageMask"));
  6.     DamageMask->RenderTargetFormat = ETextureRenderTargetFormat::RTF_R8;
  7. }
  8.  
  9. void UStructuralDamageEffectComponent::Initialize(UMaterialCopyComponent* InMaterialCopy, int32 InDamageMaskResolution)
  10. {
  11.     DamageMask->InitAutoFormat(InDamageMaskResolution, InDamageMaskResolution);
  12.     DamageMask->UpdateResourceImmediate(true);
  13.  
  14.     float Value = 0.0f;
  15.     if (InMaterialCopy->MaterialInstances.Num() > 0)
  16.         for (auto i = 0; i < InMaterialCopy->MaterialInstances.Num(); i++)
  17.         {
  18.             if (InMaterialCopy->MaterialInstances[i]->GetScalarParameterValue(ParameterName, Value))
  19.                 Materials.Add(InMaterialCopy->MaterialInstances[i]);
  20.         }
  21. }
  22.  
  23. void UStructuralDamageEffectComponent::SetDamage(float InValue)
  24. {
  25.     InValue = FMath::Clamp(InValue, 0.0f, 1.0f);
  26.  
  27.     if (Materials.Num() > 0)
  28.         for (auto i = 0; i < Materials.Num(); i++)
  29.             Materials[i]->SetScalarParameterValue(ParameterName, InValue);
  30. }
  31.  
  32. void UStructuralDamageEffectComponent::AddHit(FVector InLocation, FVector InDirection, float InRadius)
  33. {
  34.     // TODO: This material is null here- what!!?
  35.     DamageMaskMaterial->SetVectorParameterValue(TEXT("Location"), InLocation);
  36.     DamageMaskMaterial->SetVectorParameterValue(TEXT("Direction"), InDirection);
  37.     DamageMaskMaterial->SetScalarParameterValue(TEXT("Radius"), InRadius);
  38.  
  39.     UKismetRenderingLibrary::DrawMaterialToRenderTarget(this, DamageMask, DamageMaskMaterial);
  40.  
  41.     DamageMask->UpdateResource();
  42. }
  43.  
  44. void UStructuralDamageEffectComponent::BeginPlay()
  45. {
  46.     Super::BeginPlay();
  47.  
  48.     if (DamageMask->Resource != nullptr)
  49.     {
  50.         if (Materials.Num() > 0)
  51.         {
  52.             UMaterialInterface* OriginalMaterial = LoadObject<UMaterialInterface>(nullptr, TEXT("Material'/Game/Empires/Materials/M_DamageMaskCreator.M_DamageMaskCreator'"));
  53.             DamageMaskMaterial = UMaterialInstanceDynamic::Create(OriginalMaterial, GetOuter());
  54.  
  55.             for (auto i = 0; i < Materials.Num(); i++)
  56.                 Materials[i]->SetTextureParameterValue(TEXT("DamageMask"), DamageMask);
  57.         }
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement