void AShooterWeapon_Instant::SpawnTrailEffect(const FVector& EndPoint)
{
    if (TrailFX)
    {
        const FVector Origin = GetMuzzleLocation();

        UParticleSystemComponent* TrailPSC = UGameplayStatics::SpawnEmitterAtLocation(this, TrailFX, Origin);
        if (TrailPSC)
        {
            TrailPSC->SetVectorParameter(TrailTargetParam, EndPoint);
        }
    }
}
void UARFXEffectComponent::SimulateHitOnClients(FVector Origin, FVector Location, FName StartSocket)
{
	//FVector Origin = UARTraceStatics::GetStartLocation(SocketName, Causer);
	//UARTraceStatics::GetHitResult(10000, StartSocket, )
	//if ()
	//{
		if (TrailFXPar)
		{
			UParticleSystemComponent* TrailPSC = UGameplayStatics::SpawnEmitterAtLocation(GetOwner(), TrailFXPar, Origin);
			if (TrailPSC)
			{
				const FVector AdjustedDir = (Location - Origin).SafeNormal();
				FVector ParticleSpeed = AdjustedDir * TrailSpeedPar;
				TrailPSC->SetVectorParameter(TrailSpeedParamName, ParticleSpeed);
			}
		}
	//}
}
void ASWeaponInstant::SpawnTrailEffects(const FVector& EndPoint)
{
    // Keep local count for effects
    BulletsShotCount++;

    const FVector Origin = GetMuzzleLocation();
    FVector ShootDir = EndPoint - Origin;

    // Only spawn if a minimum distance is satisfied.
    if (ShootDir.Size() < MinimumProjectileSpawnDistance)
    {
        return;
    }

    if (BulletsShotCount % TracerRoundInterval == 0)
    {
        if (TracerFX)
        {
            ShootDir.Normalize();
            UGameplayStatics::SpawnEmitterAtLocation(this, TracerFX, Origin, ShootDir.Rotation());
        }
    }
    else
    {
        // Only create trails FX by other players.
        ASCharacter* OwningPawn = GetPawnOwner();
        if (OwningPawn && OwningPawn->IsLocallyControlled())
        {
            return;
        }

        if (TrailFX)
        {
            UParticleSystemComponent* TrailPSC = UGameplayStatics::SpawnEmitterAtLocation(this, TrailFX, Origin);
            if (TrailPSC)
            {
                TrailPSC->SetVectorParameter(TrailTargetParam, EndPoint);
            }
        }
    }
}
예제 #4
0
bool AHeatmapDataCollector::BuildSplinePath(uint8 CharNumberIn /*= 0*/, bool isActive/*=true */)
{
	if (bBuildSpline)
	{
		if (PathSpline)
		{
			if (PathSpline->GetNumberOfSplinePoints() != 0)
			{
				PathSpline->ClearSplinePoints();
			}
			auto FileFrom = SaveDirectoryPath + "/" + LogFileName + "_" + FString::FromInt(CharNumberIn) + ".txt";
			bool DExists = FPlatformFileManager::Get().GetPlatformFile().FileExists(*FileFrom);//DirectoryExists(*FileFrom);
			if (DExists)///////////////////
			{

				//if (SplineDataSwitcher == ESplineDataSwitcher::ES_ArrayData)
				//{
				//	//TArray<int16> ArrayFromFile;
				//	auto FileFrom = SaveDirectoryPath + "/" + "ArrayLocationLogs.txt";
				//	LoadFileToArray(ArrayFromFile, *FileFrom, 0);
				//	FVector SplinePoint;
				//	SplinePoint.X = 0;
				//	SplinePoint.Y = 0;
				//	SplinePoint.Z = 0;
				//	for (size_t i = 0; i < ArrayFromFile.Num(); i++)
				//	{
				//		SplinePoint.X = (ArrayFromFile[i] < 12800 && ArrayFromFile[i] > -12800 ? ArrayFromFile[i] : GetActorLocation().X);
				//		i++;
				//		SplinePoint.Y = (ArrayFromFile[i] < 12800 && ArrayFromFile[i] > -12800 ? ArrayFromFile[i] : GetActorLocation().Y);
				//		i++;
				//		SplinePoint.Z = (ArrayFromFile[i] < 12800 && ArrayFromFile[i] > -5000 ? ArrayFromFile[i] : GetActorLocation().Z);
				//		PathSpline->AddSplineWorldPoint(SplinePoint);
				//	}
				//}
				if (SplineDataSwitcher == ESplineDataSwitcher::ES_StringData)
				{
					FString StringFromFile;
					ParseCoordsFromFile(StringFromFile, *FileFrom);

					if (ParticlesArr.Num() > 0)
					{
						for (auto i = 0; i < ParticlesArr.Num(); i++)
						{

							UParticleSystemComponent* D = Cast<UParticleSystemComponent>(ParticlesArr[i]);
							if (D != NULL)
								D->DeactivateSystem();
						}
						ParticlesArr.Empty();
					}

					int32 numSplinePoints = PathSpline->GetNumberOfSplinePoints();
					for (auto pointIdx = 0; pointIdx < numSplinePoints; pointIdx++)
					{
						const FName Source = FName(TEXT("Source"));
						const FName SourceTan = FName(TEXT("Source_Tan"));
						const FName Target = FName(TEXT("Target"));
						const FName TargetTan = FName(TEXT("Target_Tan"));
						const FName TeamColorParam = FName(TEXT("TeamColor"));

						FVector sourceBeamLocation = PathSpline->GetLocationAtSplinePoint(pointIdx, ESplineCoordinateSpace::World);
						FRotator sourceBeamRot;
						sourceBeamRot.Pitch = 0;
						sourceBeamRot.Yaw = 0;
						sourceBeamRot.Roll = 0;
						float sourceDistanceAlongSpline = PathSpline->GetDistanceAlongSplineAtSplinePoint(pointIdx);
						FVector sourceTangentAtDistance = PathSpline->GetTangentAtDistanceAlongSpline(sourceDistanceAlongSpline, ESplineCoordinateSpace::World);

						FVector targetBeamLocation = PathSpline->GetLocationAtSplinePoint(pointIdx + 1, ESplineCoordinateSpace::World);
						float targetDistanceAlongSpline = PathSpline->GetDistanceAlongSplineAtSplinePoint(pointIdx + 1);
						FVector targetTangentAtDistance = PathSpline->GetTangentAtDistanceAlongSpline(targetDistanceAlongSpline, ESplineCoordinateSpace::World);

						if (GetWorld())
						{
							UParticleSystemComponent* Spawner = UGameplayStatics::SpawnEmitterAtLocation(this, BeamParticle, sourceBeamLocation, sourceBeamRot, true);////ftom world to this

							UParticleSystemComponent* chek = Cast<UParticleSystemComponent>(Spawner);
							if (chek)
							{
								ParticlesArr.Add(Spawner);
								if (Spawner)
								{
									Spawner->SetVectorParameter(Source, sourceBeamLocation);
									Spawner->SetVectorParameter(SourceTan, sourceTangentAtDistance);
									Spawner->SetVectorParameter(Target, targetBeamLocation);
									Spawner->SetVectorParameter(TargetTan, targetTangentAtDistance);
									Spawner->SetColorParameter(TeamColorParam, TeamColor);

								}
							}
						}

					}
					return true;//
				}
			}

		}
	}
	if (isActive == false)																	/// clearing particles
	{
		for (auto i = 0; i < ParticlesArr.Num(); i++)
		{

			UParticleSystemComponent* D = Cast<UParticleSystemComponent>(ParticlesArr[i]);
			if (D != NULL)
				D->DeactivateSystem();
		}
		ParticlesArr.Empty();
	}
	return false;
}