Advertisement
Guest User

Untitled

a guest
Apr 16th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void AMasterProjectile::OnBounce(const FHitResult& ImpactResult, const FVector& ImpactVelocity)
  2. {
  3.    
  4.    
  5.     if(IsValid(ImpactResult.PhysMaterial.Get()) && Role == ROLE_Authority)
  6.     {
  7.         FString HitMat = ImpactResult.PhysMaterial.Get()->GetName();
  8.         LastRecordedLocation = ImpactResult.ImpactPoint;
  9.         GEngine->AddOnScreenDebugMessage(-1, 1.0, FColor::Red, *HitMat);
  10.         if ((HitMat == "PHYSM_Steel" || HitMat == "PHYSM_Concrete" || HitMat == "PHYSM_Wood"))
  11.         {
  12.             Namestring = HitMat;
  13.            
  14.        
  15.             FVector EndPoint = ((ImpactVelocity.GetSafeNormal(0.0001)) * 500.0f) + ImpactResult.ImpactPoint;
  16.             FVector  Startpoint = ImpactResult.ImpactPoint;
  17.            
  18.             //hit Hit for upcoming logic calculations          
  19.             TArray<FHitResult> TraceHit;
  20.  
  21.             FCollisionQueryParams CollisionParms;
  22.  
  23.             CollisionParms.bReturnPhysicalMaterial = true;
  24.             TArray<TEnumAsByte<EObjectTypeQuery>> TraceObjectTypes;
  25.             TraceObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_WorldStatic));
  26.             TraceObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_Pawn));
  27.             TraceObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_WorldDynamic));
  28.  
  29.             UKismetSystemLibrary::LineTraceMultiForObjects(GetWorld(), EndPoint, Startpoint,  TraceObjectTypes, false, TArray<AActor*>(),
  30.                 EDrawDebugTrace::ForDuration, TraceHit, true, FColor::Orange, FColor::Black, 2.0f);
  31.             if (TraceHit.Num() != -1)
  32.             {
  33.                
  34.                 FString HitPhysMat = TraceHit.Last().PhysMaterial.Get()->GetName();
  35.                 FName HitMaterialName = FName(*HitPhysMat);
  36.                 static const FString ContextString(TEXT("Player attack montage CONTEXT"));
  37.                 FWeaponData* PenData = BulletPenData->FindRow<FWeaponData>(HitMaterialName, ContextString, true);
  38.                
  39.                
  40.  
  41.                 if (PenData)
  42.                 {
  43.                     FVector Impact = LastRecordedLocation - TraceHit.Last().ImpactPoint;
  44.                     float Density = PenData->Density;
  45.                     float HitThickness;
  46.                     LastdataPillar = TraceHit.Last().ImpactPoint;
  47.  
  48.  
  49.                     HitThickness = Impact.Size();
  50.  
  51.                     float maxpen = ((((ProjectileMass / Density) * PenetratorLength) * (ImpactVelocity.Size() / 100.0f) / 1000.0f) / 10.0f );
  52.                                        
  53.                     bool CanPen = maxpen > HitThickness;
  54.                     if (CanPen)
  55.                     {
  56.                         FVector newVelocity = ((maxpen - HitThickness) / maxpen) * ImpactVelocity;
  57.                         FActorSpawnParameters Spawninfo;
  58.                         Spawninfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
  59.                        
  60.                         AMasterProjectile* Projectile = GetWorld()->SpawnActor<AMasterProjectile>(TraceHit.Last().ImpactPoint , GetActorRotation(), Spawninfo);
  61.                        
  62.                         if (Projectile)
  63.                         {
  64.                             Projectile->LastPoistion = TraceHit.Last().ImpactPoint;
  65.                             Projectile->ProjectileMovement->Velocity = newVelocity;
  66.                             Projectile->ProjectileMovement->UpdateComponentVelocity();
  67.                            
  68.                             LastdataPillar = newVelocity;
  69.                             FString PrintLogData = newVelocity.ToString();
  70.                             UE_LOG(LogTemp, Warning, TEXT("CaPen"));
  71.                            
  72.                             Destroy();
  73.                         }
  74.    
  75.        
  76.                     }
  77.                     else
  78.                     {
  79.                         UE_LOG(LogTemp, Warning, TEXT("CantPen"));
  80.                         Destroy();
  81.                        
  82.                     }
  83.                 }
  84.             }
  85.         }
  86.                
  87.     }
  88.     else
  89.     {
  90.         UE_LOG(LogTemp, Warning, TEXT("NoPhysMat"));
  91.         Destroy();
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement