24UCLASS(Blueprintable, BlueprintType, EditInlineNew, DefaultToInstanced, meta = (ShowWorldContextPin))
30 UFUNCTION(BlueprintCallable, Category =
"Despawn")
33 bool StartEnemyDespawnFlow(
AEnemyCharacterBase* InEnemyCharacter, TFunction<
void()>&& InOnFlowFinished);
35 UFUNCTION(BlueprintPure, Category =
"Material")
38 return DespawnMaterialTransition;
42 virtual void HandleFlowStarted(UObject* InFlowOwner)
override;
43 virtual void HandleFlowFinished()
override;
44 virtual void HandleFlowReset()
override;
48 UFUNCTION(BlueprintNativeEvent, Category =
"Despawn")
54 void ActivateDespawnNiagara();
55 void CompleteMaterialTransition();
57 void ScheduleCopyPoseProxyCleanup();
58 void DestroyCopyPoseProxy();
59 void UpdateMaterialTransition();
60 void ClearMaterialTransitionTimer();
61 void RestoreMaterialSlots();
64 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Niagara")
65 TObjectPtr<UNiagaraSystem> DespawnNiagaraSystem;
67 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Niagara")
68 FName SkeletalMeshUserParameterName = TEXT("User.SkeletalMesh");
70 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Niagara", meta = (ClampMin = "0.0", UIMin = "0.0"))
71 float DespawnNiagaraPlayTime = 2.0f;
73 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Material")
81 TWeakObjectPtr<UWorld> ActiveWorld;
84 TArray<int32> ActiveMaterialSlotIndices;
87 TArray<TObjectPtr<UMaterialInterface>> OriginalMaterials;
90 TArray<TObjectPtr<UMaterialInstanceDynamic>> DynamicMaterials;
93 TObjectPtr<AActor> ActiveCopyPoseProxyActor;
96 TObjectPtr<USkeletalMeshComponent> ActiveCopyPoseProxyMesh;
99 TWeakObjectPtr<UWorld> ActiveCopyPoseProxyWorld;
102 FTimerHandle MaterialTransitionTimerHandle;
103 FTimerHandle CopyPoseProxyCleanupTimerHandle;
104 float MaterialTransitionStartTime = 0.0f;
105 float ActiveTransitionDurationSeconds = 0.0f;
106 float ActiveTransitionStartOpacity = 1.0f;
107 float ActiveTransitionEndOpacity = 0.0f;
108 FName ActiveOpacityParameterName = TEXT("Opacity");
109 TFunction<
void()> OnDespawnFlowFinished;