24 virtual void PostInitProperties()
override;
27 virtual void BeginPlay()
override;
28 virtual void TickComponent(
const float DeltaTime,
const ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
override;
29 virtual void EndPlay(
const EEndPlayReason::Type EndPlayReason)
override;
30 virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps)
const override;
37 UFUNCTION(BlueprintCallable, Category =
"IVSmoke | Hole | API")
41 void CreatePenetrationHole(
const FVector3f& Origin,
const FVector3f& Direction,
const uint8 PresetID);
44 void CreateExplosionHole(
const FVector3f& Origin,
const uint8 PresetID);
47 void RegisterTrackDynamicHole(AActor* TargetActor,
const uint8 PresetID);
52#pragma region Authority Only
56 TArray<FIVSmokeHoleDynamicSubject> DynamicSubjectList;
62 void Authority_CleanupExpiredHoles();
65 bool Authority_CalculatePenetrationPoints(
const FVector3f& Origin,
const FVector3f& Direction,
const float BulletThickness, FVector3f& OutEntry, FVector3f& OutExit);
68 void Authority_UpdateDynamicSubjectList();
73#pragma region Local Only
76 TObjectPtr<UTextureRenderTargetVolume> HoleTexture =
nullptr;
79 void Local_InitializeHoleTexture();
82 void Local_ClearHoleTexture();
85 void Local_RebuildHoleTexture();
94 UPROPERTY(EditAnywhere, Category =
"IVSmoke | Hole | Configuration", meta = (ClampMin =
"1", ClampMax =
"512"))
98 UPROPERTY(EditAnywhere, Category = "
IVSmoke | Hole | Configuration", meta = (ClampMin = "64", ClampMax = "128"))
99 FIntVector VoxelResolution = FIntVector(64, 64, 64);
102 UPROPERTY(EditAnywhere, Category = "
IVSmoke | Hole | Configuration",
103 meta = (ToolTip = "Select the type of obstacle that will block the penetration hole in the smoke"))
104 TArray<TEnumAsByte<EObjectTypeQuery>> ObstacleObjectTypes;
107 UPROPERTY(EditAnywhere, Category = "
IVSmoke | Hole | Configuration", meta = (ClampMin = "0", ClampMax = "4",
108 Tooltip = "samples the surrounding pixels to reduce the aliasing. Recommended value is 2."))
112 UPROPERTY(EditAnywhere, Category = "
IVSmoke | Hole | Noise")
116 UPROPERTY(EditAnywhere, Category = "
IVSmoke | Hole | Noise")
120 UPROPERTY(EditAnywhere, Category = "
IVSmoke | Hole | Noise")
124 float GetSyncedTime() const;
127 FTextureRHIRef GetHoleTextureRHI() const;
130 void SetBoxToVoxelAABB();
133 FORCEINLINE
void MarkHoleTextureDirty(const
bool bIsDirty = true) { bHoleTextureDirty = bIsDirty; }
138 UPROPERTY(Transient, Replicated, VisibleAnywhere, Category =
"IVSmoke | Hole | Debug")
142 uint8 bHoleTextureDirty : 1;