UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ParticleSystemComponent.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3
4#pragma once
5
6#include "CoreMinimal.h"
8#include "UObject/Object.h"
13#include "Particles/Emitter.h"
18#include "ParticleSystemComponent.generated.h"
19
24struct EventData;
29struct FPSCTickData;
31
32//
33// Forward declarations.
34//
39class UFXSystemAsset;
43
45UENUM(BlueprintType)
47{
48 PSPT_None UMETA(DisplayName="None"),
49 PSPT_Scalar UMETA(DisplayName="Scalar"),
50 PSPT_ScalarRand UMETA(DisplayName="Scalar Random"),
51 PSPT_Vector UMETA(DisplayName="Vector"),
52 PSPT_VectorRand UMETA(DisplayName="Vector Random"),
53 PSPT_Color UMETA(DisplayName="Color"),
54 PSPT_Actor UMETA(DisplayName="Actor"),
55 PSPT_Material UMETA(DisplayName="Material"),
56 PSPT_VectorUnitRand UMETA(DisplayName = "Vector Unit Random"),
58};
59
61UENUM()
63{
65 PRS_Disabled UMETA(DisplayName="Disabled"),
68 PRS_Capturing UMETA(DisplayName="Capturing"),
71 PRS_Replaying UMETA(DisplayName="Replaying"),
73};
74
78UENUM()
80{
82 EPET_Any UMETA(DisplayName="Any"),
84 EPET_Spawn UMETA(DisplayName="Spawn"),
86 EPET_Death UMETA(DisplayName="Death"),
88 EPET_Collision UMETA(DisplayName="Collision"),
90 EPET_Burst UMETA(DisplayName="Burst"),
92 EPET_Blueprint UMETA(DisplayName="Blueprint"),
94};
95
96// Called when the particle system is done
98
99//Called just before the activation of a component changes.
101
103USTRUCT(BlueprintType)
105{
107
108
109 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
111
124 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
126
127 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
128 float Scalar;
129
130 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
131 float Scalar_Low;
132
133 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
135
136 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
137 FVector Vector_Low;
138
139 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
141
142 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
144
145 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ParticleSysParam)
147
149 : ParamType(0)
150 , Scalar(0)
151 , Scalar_Low(0)
153 , Vector_Low(ForceInit)
155 , Actor(NULL)
156 , Material(NULL)
157 , AsyncActorToWorld(FTransform::Identity)
158 , AsyncActorVelocity(FVector::ZeroVector)
159 , bAsyncDataCopyIsValid(false)
160 {
161 }
162
164 {
166 if(Actor)
167 {
168 AsyncActorToWorld = Actor->ActorToWorld();
169 AsyncActorVelocity = Actor->GetVelocity();
170 }
171
172 bAsyncDataCopyIsValid = true;
173 }
174
176 {
178 bAsyncDataCopyIsValid = false;
179 }
180
182 {
183 if(bAsyncDataCopyIsValid)
184 {
185 return AsyncActorToWorld;
186 }
187 else if(Actor)
188 {
190 return Actor->ActorToWorld();
191 }
192
194 }
195
197 {
198 if (bAsyncDataCopyIsValid)
199 {
200 return AsyncActorVelocity;
201 }
202 else if (Actor)
203 {
205 return Actor->GetVelocity();
206 }
207
208 return FVector::ZeroVector;
209 }
210
211private:
212 FTransform AsyncActorToWorld;
213 FVector AsyncActorVelocity;
214 bool bAsyncDataCopyIsValid;
215
216};
217
218template <> struct TIsPODType<FParticleSysParam> { enum { Value = true }; };
219
249
267
274
279{
280
281};
282
311
324
331
333USTRUCT(BlueprintType)
335{
337
338 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Effects|Components|ParticleSystem")
339 TObjectPtr<const UObject> WorldContextObject;
340
341 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effects|Components|ParticleSystem")
342 TObjectPtr<UFXSystemAsset> SystemTemplate;
343
344 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effects|Components|ParticleSystem")
345 FVector Location = FVector::ZeroVector;
346
347 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effects|Components|ParticleSystem")
348 FRotator Rotation = FRotator::ZeroRotator;
349
350 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effects|Components|ParticleSystem")
352
353 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Effects|Components|ParticleSystem")
354 TObjectPtr<USceneComponent> AttachToComponent;
355
356 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Effects|Components|ParticleSystem")
357 FName AttachPointName = NAME_None;
358
359 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Effects|Components|ParticleSystem")
360 TEnumAsByte<EAttachLocation::Type> LocationType = EAttachLocation::KeepWorldPosition;
361
362 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effects|Components|ParticleSystem")
363 bool bAutoDestroy = true;
364
365 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effects|Components|ParticleSystem")
366 bool bAutoActivate = true;
367
368 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Effects|Components|ParticleSystem")
370
371 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Effects|Components|ParticleSystem")
372 bool bPreCullCheck = true;
373
374 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Effects|Components|ParticleSystem")
375 bool bIsPlayerEffect = false;
376};
377
378UCLASS(Abstract, MinimalAPI)
379class UFXSystemComponent : public UPrimitiveComponent
380{
382public:
383
385 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
386 virtual void SetBoolParameter(FName ParameterName, bool Param) {}
387
389 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
390 virtual void SetIntParameter(FName ParameterName, int Param) {}
391
393 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
394 virtual void SetFloatParameter(FName ParameterName, float Param) {}
395
400 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
401 virtual void SetVectorParameter(FName ParameterName, FVector Param) {}
402
407 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
408 virtual void SetColorParameter(FName ParameterName, FLinearColor Param) {}
409
414 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
415 virtual void SetActorParameter(FName ParameterName, class AActor* Param) {}
416
420 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
421 virtual UFXSystemAsset* GetFXSystemAsset() const { return nullptr; };
422
430 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
431 virtual void SetEmitterEnable(FName EmitterName, bool bNewEnableState) {};
432
442 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
443 virtual void SetAutoAttachmentParameters(USceneComponent* Parent, FName SocketName, EAttachmentRule LocationRule, EAttachmentRule RotationRule, EAttachmentRule ScaleRule) {}
444
452 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
453 virtual void SetUseAutoManageAttachment(bool bAutoManage) {}
454
460 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
461 virtual void ReleaseToPool() {}
462
464 virtual uint32 GetApproxMemoryUsage() const { return 0; }
465
466 virtual void ActivateSystem(bool bFlagAsJustAttached = false) { };
467
469 virtual void DeactivateImmediate() {}
470
472 static ENGINE_API bool RequiresLWCTileRecache(const FVector3f CurrentTile, const FVector CurrentLocation);
473
474#if WITH_PER_COMPONENT_PARTICLE_PERF_STATS
475 mutable FParticlePerfStats* ParticlePerfStats = nullptr;
476#endif
477
478protected:
479 ENGINE_API void PrecacheAssetPSOs(UFXSystemAsset* FXSystemAsset);
480};
481
482
486UCLASS(ClassGroup=(Rendering), hidecategories=Object, hidecategories=Physics, hidecategories=Collision, showcategories=Trigger, editinlinenew, meta=(BlueprintSpawnableComponent, DisplayName = "Cascade Particle System Component"), MinimalAPI)
487class UParticleSystemComponent : public UFXSystemComponent
488{
489 friend class FParticleSystemWorldManager;
490
492
493 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Particles)
494 TObjectPtr<class UParticleSystem> Template;
495
498
504 TArray<TObjectPtr<class USkeletalMeshComponent>> SkelMeshComponents;
505
507
509
510private:
512 uint8 bIsElligibleForAsyncTick:1;
514 uint8 bIsElligibleForAsyncTickComputed:1;
515public:
516
518
521
524
527
528 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Particles)
530
532 UPROPERTY()
534
536 uint8 bJustRegistered:1;
537
540
546 UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category=Particles)
548
556 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Attachment)
558
563 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Attachment, meta=(EditCondition="bAutoManageAttachment"))
565
570
572
573 UPROPERTY()
575
577 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LOD)
579
584 UPROPERTY()
586
589
592
595
596 uint8 bAutoDestroy : 1;
597
598private:
599
602
605
607 uint8 bAsyncDataCopyIsValid:1;
609
612
615
617 ENGINE_API void CancelAutoAttachment(bool bDetachFromParent, const UWorld* MyWorld);
618
620 int32 ManagerHandle : 30;
625
626public:
627
628#if WITH_EDITOR
629 virtual bool Editor_CanBeTickManaged()const { return true; }
630#endif
632
633 inline bool IsTickManaged()const { return ManagerHandle != INDEX_NONE && !IsPendingManagerRemove(); }
634 inline int32 GetManagerHandle()const { return ManagerHandle; }
636
637 inline int32 IsPendingManagerAdd()const { return bPendingManagerAdd; }
638 inline void SetPendingManagerAdd(bool bValue) { bPendingManagerAdd = bValue; }
639 inline int32 IsPendingManagerRemove()const { return bPendingManagerRemove; }
640 inline void SetPendingManagerRemove(bool bValue) { bPendingManagerRemove = bValue; }
641
644
645
647 EPSCPoolMethod PoolingMethod;
648
650 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LOD)
652
654 UPROPERTY()
656
659
660 void ResetNextTick()
661 {
662 bResetTriggered = true;
663 }
664
666 {
668 }
669
674 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Particles)
676
677 UPROPERTY(BlueprintAssignable)
678 FParticleSpawnSignature OnParticleSpawn;
679
680 UPROPERTY(BlueprintAssignable)
681 FParticleBurstSignature OnParticleBurst;
682
683 UPROPERTY(BlueprintAssignable)
684 FParticleDeathSignature OnParticleDeath;
685
686 UPROPERTY(BlueprintAssignable)
687 FParticleCollisionSignature OnParticleCollide;
688
689 UPROPERTY(Transient, DuplicateTransient)
691
692 UPROPERTY(Transient, DuplicateTransient)
693 FVector OldPosition;
694
695 UPROPERTY(Transient, DuplicateTransient)
697
698 UPROPERTY(Transient, DuplicateTransient)
699 float WarmupTime;
700
701 UPROPERTY(Transient, DuplicateTransient)
702 float WarmupTickRate;
703
704private:
705 int32 LODLevel;
706
707public:
708
713 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Particles)
714 float SecondsBeforeInactive;
715
716private:
719
720public:
725 UPROPERTY()
727
728#if WITH_EDITORONLY_DATA
732 UPROPERTY()
734
738 UPROPERTY()
740
741#endif // WITH_EDITORONLY_DATA
743 float AccumTickTime;
744
747
750
753
755 UPROPERTY()
757
760
763
765 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Particles)
766 float CustomTimeDilation;
767
769 float EmitterDelay;
770
773
776
779
782
785
786public:
792 UPROPERTY(VisibleInstanceOnly, BlueprintReadWrite, Category=Attachment, meta=(EditCondition="bAutoManageAttachment"))
793 TWeakObjectPtr<USceneComponent> AutoAttachParent;
794
801 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Attachment, meta=(EditCondition="bAutoManageAttachment"))
803
804#if WITH_EDITORONLY_DATA
809 UPROPERTY()
811#endif
812
817 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Attachment, meta = (EditCondition = "bAutoManageAttachment"))
819
824 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Attachment, meta = (EditCondition = "bAutoManageAttachment"))
826
831 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Attachment, meta = (EditCondition = "bAutoManageAttachment"))
833
841 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem", meta=(DeprecatedFunction, DeprecationMessage="Please use Set Auto Attachment Parameters"))
842 void SetAutoAttachParams(USceneComponent* Parent, FName SocketName = NAME_None, EAttachLocation::Type LocationType = EAttachLocation::KeepRelativeOffset);
843
853 ENGINE_API void SetAutoAttachmentParameters(USceneComponent* Parent, FName SocketName, EAttachmentRule LocationRule, EAttachmentRule RotationRule, EAttachmentRule ScaleRule) override;
854
855 virtual void SetUseAutoManageAttachment(bool bAutoManage) override { bAutoManageAttachment = bAutoManage; }
856
857private:
858
863
864public:
865 class FFXSystem* FXSystem;
866
867 // Called when the particle system is done
868 UPROPERTY(BlueprintAssignable)
870
871private:
884public:
885
889 ENGINE_API bool ShouldManageSignificance()const;
891 ENGINE_API void OnSignificanceChanged(bool bSignificant, bool bApplyToEmitters, bool bAsync=false);
892
895 {
898 }
899
900 inline const FVector3f& GetLWCTile() const { return LWCTile; }
901
904
907
909
911 ENGINE_API bool CanBeOccluded()const;
912
913 ENGINE_API void Complete();
914
915 inline const FTransform& GetAsyncComponentToWorld()
916 {
918 {
919 check(bAsyncDataCopyIsValid);
921 }
922 return GetComponentTransform();
923 }
924
925 inline const TArray<struct FParticleSysParam>& GetAsyncInstanceParameters()
926 {
928 {
929 check(bAsyncDataCopyIsValid);
931 }
932 return InstanceParameters;
933 }
934
935 inline const FBoxSphereBounds& GetAsyncBounds()
936 {
938 {
939 check(bAsyncDataCopyIsValid);
940 return AsyncBounds;
941 }
942 return Bounds;
943 }
944
945 inline const FVector& GetAsyncPartSysVelocity()
946 {
948 {
949 check(bAsyncDataCopyIsValid);
951 }
952 return PartSysVelocity;
953 }
954
955 inline const TArray<FVector>& GetPlayerLocations()
956 {
957 return PlayerLocations;
958 }
959
961 {
963 }
964
965 //
966 // Beam-related script functions.
967 //
968
975 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
976 ENGINE_API virtual void SetBeamEndPoint(int32 EmitterIndex, FVector NewEndPoint);
977
985 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
986 ENGINE_API virtual void SetBeamSourcePoint(int32 EmitterIndex, FVector NewSourcePoint, int32 SourceIndex);
987
995 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
996 ENGINE_API virtual void SetBeamSourceTangent(int32 EmitterIndex, FVector NewTangentPoint, int32 SourceIndex);
997
1005 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
1006 ENGINE_API virtual void SetBeamSourceStrength(int32 EmitterIndex, float NewSourceStrength, int32 SourceIndex);
1007
1015 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
1016 ENGINE_API virtual void SetBeamTargetPoint(int32 EmitterIndex, FVector NewTargetPoint, int32 TargetIndex);
1017
1025 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
1026 ENGINE_API virtual void SetBeamTargetTangent(int32 EmitterIndex, FVector NewTangentPoint, int32 TargetIndex);
1027
1035 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
1036 ENGINE_API virtual void SetBeamTargetStrength(int32 EmitterIndex, float NewTargetStrength, int32 TargetIndex);
1037
1046 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
1047 ENGINE_API virtual bool GetBeamEndPoint(int32 EmitterIndex, FVector& OutEndPoint) const;
1048
1059 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
1060 ENGINE_API virtual bool GetBeamSourcePoint(int32 EmitterIndex, int32 SourceIndex, FVector& OutSourcePoint) const;
1061
1072 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
1073 ENGINE_API virtual bool GetBeamSourceTangent(int32 EmitterIndex, int32 SourceIndex, FVector& OutTangentPoint) const;
1074
1085 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
1086 ENGINE_API virtual bool GetBeamSourceStrength(int32 EmitterIndex, int32 SourceIndex, float& OutSourceStrength) const;
1087
1098 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
1099 ENGINE_API virtual bool GetBeamTargetPoint(int32 EmitterIndex, int32 TargetIndex, FVector& OutTargetPoint) const;
1100
1111 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
1112 ENGINE_API virtual bool GetBeamTargetTangent(int32 EmitterIndex, int32 TargetIndex, FVector& OutTangentPoint) const;
1113
1124 UFUNCTION(BlueprintCallable, Category = "Effects|Components|ParticleSystem")
1125 ENGINE_API virtual bool GetBeamTargetStrength(int32 EmitterIndex, int32 TargetIndex, float& OutTargetStrength) const;
1126
1133 ENGINE_API void SetEmitterEnable(FName EmitterName, bool bNewEnableState) override;
1134
1135
1141 ENGINE_API void SetBoolParameter(FName ParameterName, bool Param) override;
1142
1148 ENGINE_API void SetIntParameter(FName ParameterName, int Param) override;
1149
1151 ENGINE_API void SetFloatParameter(FName ParameterName, float Param) override;
1152
1157 ENGINE_API void SetVectorParameter(FName ParameterName, FVector Param) override;
1158
1163 ENGINE_API void SetColorParameter(FName ParameterName, FLinearColor Param) override;
1164
1169 ENGINE_API void SetActorParameter(FName ParameterName, class AActor* Param) override;
1170
1174 virtual UFXSystemAsset* GetFXSystemAsset() const { return Template; };
1175
1180 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
1181 ENGINE_API void SetMaterialParameter(FName ParameterName, class UMaterialInterface* Param);
1182
1192 ENGINE_API virtual bool GetFloatParameter(const FName InName, float& OutFloat);
1193
1204
1215
1226
1236 ENGINE_API virtual bool GetActorParameter(const FName InName, class AActor*& OutActor);
1237
1248
1253 ENGINE_API void ClearParameter(FName ParameterName, enum EParticleSysParamType ParameterType = EParticleSysParamType(0));
1254
1256 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
1257 ENGINE_API void SetTemplate(class UParticleSystem* NewTemplate);
1258
1260 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
1262
1263
1266
1274
1283 UFUNCTION(BlueprintCallable, Category = "Effects|Particles|Trails")
1285
1289 UFUNCTION(BlueprintCallable, Category = "Effects|Particles|Trails")
1290 ENGINE_API void EndTrails();
1291
1292 ENGINE_API void ReleaseToPool() override;
1293
1302 UFUNCTION(BlueprintCallable, Category = "Effects|Particles|Trails")
1304
1305public:
1307 class FRenderCommandFence* ReleaseResourcesFence;
1308
1309 TArray<struct FParticleEmitterInstance*> EmitterInstances;
1310
1313
1316
1318 class FInstanceOwner;
1319 TUniquePtr<FInstanceOwner> InstanceOwner;
1320
1321private:
1324
1327
1329 FGraphEventRef AsyncWork;
1330
1332 float DeltaTimeTick;
1339
1340#if WITH_STATE_STREAM_ACTOR
1342#endif
1343
1344public:
1345
1346 //~ Begin UActorComponent Interface.
1347#if WITH_EDITOR
1348 ENGINE_API virtual void CheckForErrors() override;
1349#endif
1350 ENGINE_API virtual bool IsReadyForOwnerToAutoDestroy() const override;
1351 ENGINE_API virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
1352 virtual UObject const* AdditionalStatObject() const override
1353 {
1354 return Template;
1355 }
1356 ENGINE_API virtual void SetComponentTickEnabled(bool bEnabled)override;
1357 ENGINE_API virtual bool IsComponentTickEnabled() const override;
1358
1359 ENGINE_API virtual void OnAttachmentChanged()override;
1360 ENGINE_API virtual void OnChildAttached(USceneComponent* ChildComponent)override;
1361 ENGINE_API virtual void OnChildDetached(USceneComponent* ChildComponent)override;
1362
1363 ENGINE_API virtual void OnEndOfFrameUpdateDuringTick() override;
1364protected:
1365 ENGINE_API virtual void CreateRenderState_Concurrent(FRegisterComponentContext* Context) override;
1366 ENGINE_API virtual void SendRenderTransform_Concurrent() override;
1367 ENGINE_API virtual void DestroyRenderState_Concurrent() override;
1368 ENGINE_API virtual void OnRegister() override;
1369 ENGINE_API virtual void OnUnregister() override;
1370 ENGINE_API virtual void SendRenderDynamicData_Concurrent() override;
1371public:
1372#if WITH_EDITORONLY_DATA
1373 virtual bool RequiresGameThreadEndOfFrameUpdates() const override { return true; }
1374 virtual bool RequiresGameThreadEndOfFrameRecreate() const override { return true; }
1375#endif
1376 //~ End UActorComponent Interface.
1377
1379 {
1380 STALL,
1382 SILENT, // this would only be appropriate for editor only or other unusual things that we never see in game
1383 };
1386 {
1387 if (AsyncWork.GetReference())
1388 {
1393 }
1394 }
1395
1397 inline void ForceAsyncWorkCompletion(EForceAsyncWorkCompletion Behavior, bool bDefinitelyGameThread = true) const
1398 {
1399 if (AsyncWork.GetReference())
1400 {
1402 }
1403 }
1404
1409 ENGINE_API int32 GetCurrentDetailMode() const;
1410
1413
1416
1417 ENGINE_API void ForceReset();
1418
1420private:
1423
1426
1427public:
1428
1429 //~ Begin UObject Interface.
1430 ENGINE_API virtual void PostLoad() override;
1431 ENGINE_API virtual void BeginDestroy() override;
1432 ENGINE_API virtual void FinishDestroy() override;
1433#if WITH_EDITOR
1435 ENGINE_API virtual void PostEditChangeChainProperty(FPropertyChangedChainEvent& PropertyChangedEvent) override;
1436#endif // WITH_EDITOR
1437 ENGINE_API virtual void Serialize(FArchive& Ar) override;
1438 ENGINE_API virtual void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize) override;
1439 ENGINE_API virtual FString GetDetailedInfoInternal() const override;
1440 //~ End UObject Interface.
1441
1442 //Begin UPrimitiveComponent Interface
1443 ENGINE_API virtual int32 GetNumMaterials() const override;
1444 ENGINE_API virtual UMaterialInterface* GetMaterial(int32 ElementIndex) const override;
1445 ENGINE_API virtual void SetMaterial(int32 ElementIndex, UMaterialInterface* Material) override;
1446 ENGINE_API virtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override;
1447 ENGINE_API virtual FPrimitiveSceneProxy* CreateSceneProxy() override;
1448 ENGINE_API virtual void GetUsedMaterials( TArray<UMaterialInterface*>& OutMaterials, bool bGetDebugMaterials = false ) const override;
1450 ENGINE_API virtual FBodyInstance* GetBodyInstance(FName BoneName = NAME_None, bool bGetWelded = true, int32 Index = INDEX_NONE) const override;
1451 //End UPrimitiveComponent Interface
1452
1453 //~ Begin USceneComonent Interface
1454protected:
1455 ENGINE_API virtual bool ShouldActivate() const override;
1456
1457public:
1458#if WITH_EDITOR
1459 ENGINE_API virtual bool GetMaterialPropertyPath(int32 ElementIndex, UObject*& OutOwner, FString& OutPropertyPath, FProperty*& OutProperty) override;
1460#endif // WITH_EDITOR
1461 ENGINE_API virtual void Activate(bool bReset=false) override;
1462 ENGINE_API virtual void Deactivate() override;
1463 ENGINE_API virtual void DeactivateImmediate() override;
1464 ENGINE_API virtual void ApplyWorldOffset(const FVector& InOffset, bool bWorldShift) override;
1465 //~ End USceneComponent Interface
1466
1468 ENGINE_API virtual void ActivateSystem(bool bFlagAsJustAttached = false) override;
1471 // Collision Handling...
1472 ENGINE_API virtual bool ParticleLineCheck(FHitResult& Hit, AActor* SourceActor, const FVector& End, const FVector& Start, const FVector& HalfExtent, const FCollisionObjectQueryParams& ObjectParams);
1473
1475 inline bool CanTickInAnyThread()
1476 {
1477 if (!bIsElligibleForAsyncTickComputed)
1478 {
1479 ComputeCanTickInAnyThread();
1480 }
1481 return bIsElligibleForAsyncTick;
1482 }
1484 ENGINE_API void ComputeCanTickInAnyThread();
1485
1490 UFUNCTION(BlueprintCallable, Category = "Rendering|Material")
1492
1493 ENGINE_API virtual UMaterialInterface* GetMaterialByName(FName MaterialSlotName) const override;
1494 ENGINE_API virtual void SetMaterialByName(FName MaterialSlotName, class UMaterialInterface* SourceMaterial) override;
1495
1497 UFUNCTION(BlueprintCallable, Category = "Rendering|Material")
1499
1502
1505
1507 ENGINE_API uint32 GetApproxMemoryUsage() const override;
1508
1509protected:
1510
1511 // @todo document
1513
1526
1535
1538
1541
1542 // @todo document
1543 ENGINE_API virtual void UpdateDynamicData();
1544
1545public:
1546 inline int32 GetCurrentLODIndex() const
1547 {
1548 return LODLevel;
1549 }
1550
1551 // If particles have not already been initialised (ie. EmitterInstances created) do it now.
1552 ENGINE_API virtual void InitParticles();
1553
1554
1555 // @todo document
1556 ENGINE_API void ResetParticles(bool bEmptyInstances = false);
1557
1558
1559 // @todo document
1561
1562
1563 // @todo document
1564 ENGINE_API void UpdateInstances(bool bEmptyInstances = false);
1565
1566
1567 // @todo document
1568 ENGINE_API bool HasCompleted();
1569
1570
1571 // @todo document
1572 ENGINE_API void InitializeSystem();
1573
1581
1583 ENGINE_API void AutoPopulateInstanceProperties();
1584
1595 ENGINE_API void ReportEventSpawn(const FName InEventName, const float InEmitterTime,
1597
1608 ENGINE_API void ReportEventDeath(const FName InEventName, const float InEmitterTime,
1610
1626 ENGINE_API void ReportEventCollision(const FName InEventName, const float InEmitterTime, const FVector InLocation,
1628 const float InParticleTime, const FVector InNormal, const float InTime, const int32 InItem, const FName InBoneName, UPhysicalMaterial* PhysMat);
1629
1638 ENGINE_API void ReportEventBurst(const FName InEventName, const float InEmitterTime, const int32 ParticleCount,
1640
1650 UFUNCTION(BlueprintCallable, Category="Effects|Components|ParticleSystem")
1653
1654
1661
1662 // @todo document
1663 ENGINE_API void KillParticlesForced();
1664
1669 ENGINE_API void SetVectorRandParameter(FName ParameterName, const FVector& Param, const FVector& ParamLow);
1670
1671
1672
1677 ENGINE_API void SetVectorUnitRandParameter(FName ParameterName, const FVector& Param, const FVector& ParamLow);
1678
1683 ENGINE_API void SetFloatRandParameter(FName ParameterName, float Param, float ParamLow);
1684
1689
1690
1691 // @todo document
1693
1701
1704
1706 ENGINE_API virtual int32 GetLODLevel();
1707
1709 ENGINE_API void ResetToDefaults();
1710
1711private:
1717
1718public:
1719 inline FParticlePerfStatsContext GetPerfStatsContext(){ return FParticlePerfStatsContext(GetWorld(), Template, this); }
1720};
1721
1722
1724// ParticleSystemComponent inlines
1725
1726inline void UParticleSystemComponent::SetAutoAttachParams(USceneComponent* Parent, FName SocketName, EAttachLocation::Type LocationType)
1727{
1729 AutoAttachSocketName = SocketName;
1730
1731 USceneComponent::ConvertAttachLocation(LocationType, AutoAttachLocationRule, AutoAttachRotationRule, AutoAttachScaleRule);
1732}
1733
1734
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
@ ForceInit
Definition CoreMiscDefines.h:155
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:58
#define DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type, Param1Name)
Definition DelegateCombinations.h:53
ELevelTick
Definition EngineBaseTypes.h:70
EAttachmentRule
Definition EngineTypes.h:62
ETrailWidthMode
Definition EngineTypes.h:682
return true
Definition ExternalRpcRegistry.cpp:601
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EParticleSignificanceLevel
Definition ParticleHelper.h:2398
EParticleSysParamType
Definition ParticleSystemComponent.h:47
@ PSPT_MAX
Definition ParticleSystemComponent.h:57
ParticleReplayState
Definition ParticleSystemComponent.h:63
@ PRS_MAX
Definition ParticleSystemComponent.h:72
EParticleEventType
Definition ParticleSystemComponent.h:80
@ UMETA
Definition ParticleSystemComponent.h:48
@ EPET_MAX
Definition ParticleSystemComponent.h:93
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
EPSCPoolMethod
Definition WorldPSCPool.h:16
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition Archive.h:1208
Definition FXSystemPrivate.h:188
Definition NameTypes.h:617
Definition ParticleHelper.h:2241
Definition ParticleSystemSceneProxy.h:37
Definition ParticleSystemManager.h:82
Definition PrimitiveSceneProxy.h:296
Definition UnrealType.h:174
Definition ActorComponent.h:47
Definition RenderCommandFence.h:15
Definition TextureStreamingTypes.h:223
Definition Array.h:670
Definition EnumAsByte.h:22
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Definition ContainerAllocationPolicies.h:894
Definition UniquePtr.h:107
Definition AnimNotifyState.h:25
Definition ParticleSystem.h:118
Definition ParticleSystemComponent.h:380
virtual void DeactivateImmediate()
Definition ParticleSystemComponent.h:469
virtual void ActivateSystem(bool bFlagAsJustAttached=false)
Definition ParticleSystemComponent.h:466
virtual uint32 GetApproxMemoryUsage() const
Definition ParticleSystemComponent.h:464
Definition MaterialInstanceDynamic.h:15
Definition MaterialInterface.h:296
Definition Object.h:95
Definition ParticleSystemReplay.h:68
Definition ParticleSystem.h:160
Definition PhysicalMaterial.h:104
Definition World.h:918
Definition EngineTypes.h:164
Type
Definition EngineTypes.h:166
@ CanBeOccluded
Definition ScenePrivate.h:2490
Definition SceneComponent.h:24
ENGINE_API FBox CalcBounds(const FVector &P0, const FVector &P1, const FVector &P2, const FVector &P3)
Definition BezierUtilities.cpp:26
FIntermediate3DTransform GetComponentTransform(const UObject *Object)
Definition MovieSceneTracksCustomAccessors.cpp:18
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition EngineBaseTypes.h:571
Definition BodyInstance.h:320
Definition CollisionQueryParams.h:430
Definition Color.h:486
Definition ParticleHelper.h:1265
Definition ParticleHelper.h:1174
Definition ParticleSystemComponent.h:335
Definition HitResult.h:21
Definition Color.h:48
Definition ParticleSystemManager.h:29
Definition ParticleEmitterInstances.h:1701
Definition ParticleEmitterInstances.h:226
Definition ParticleSystemComponent.h:316
int32 ParticleCount
Definition ParticleSystemComponent.h:317
FParticleEventBurstData()
Definition ParticleSystemComponent.h:319
Definition ParticleSystemComponent.h:287
UPhysicalMaterial * PhysMat
Definition ParticleSystemComponent.h:301
int32 Item
Definition ParticleSystemComponent.h:295
FVector Normal
Definition ParticleSystemComponent.h:289
FParticleEventCollideData()
Definition ParticleSystemComponent.h:303
float Time
Definition ParticleSystemComponent.h:292
FName BoneName
Definition ParticleSystemComponent.h:298
Definition ParticleSystemComponent.h:224
FVector Velocity
Definition ParticleSystemComponent.h:238
FVector Location
Definition ParticleSystemComponent.h:235
float EmitterTime
Definition ParticleSystemComponent.h:232
FParticleEventData()
Definition ParticleSystemComponent.h:243
int32 Type
Definition ParticleSystemComponent.h:226
TArray< class UParticleModuleEventSendToGame * > EventData
Definition ParticleSystemComponent.h:241
FName EventName
Definition ParticleSystemComponent.h:229
Definition ParticleSystemComponent.h:279
Definition ParticleSystemComponent.h:329
Definition ParticleSystemComponent.h:272
Definition ParticleSystemComponent.h:254
float ParticleTime
Definition ParticleSystemComponent.h:256
FParticleExistingData()
Definition ParticleSystemComponent.h:261
FVector Direction
Definition ParticleSystemComponent.h:259
Definition ParticlePerfStats.h:302
Definition ParticlePerfStats.h:171
Definition ParticleSystemComponent.h:105
FTransform GetAsyncActorToWorld() const
Definition ParticleSystemComponent.h:181
void ResetAsyncActorCache()
Definition ParticleSystemComponent.h:175
void UpdateAsyncActorCache()
Definition ParticleSystemComponent.h:163
FVector GetAsyncActorVelocity() const
Definition ParticleSystemComponent.h:196
Definition ParticleSystemStateStreamHandle.h:15
Definition UnrealType.h:7001
Definition RandomStream.h:20
Definition ResourceSize.h:31
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition ObjectPtr.h:488
Definition WeakObjectPtrTemplates.h:25
Definition BoxSphereBounds.h:25
static CORE_API const TTransform< double > Identity
Definition TransformNonVectorized.h:58
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79