Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
EnemyDespawnDefinition.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
7#include "TimerManager.h"
8#include "Templates/Function.h"
9#include "EnemyDespawnDefinition.generated.h"
10
11
13class AActor;
14class UNiagaraSystem;
15class UMaterialInterface;
16class UMaterialInstanceDynamic;
17class USkeletalMeshComponent;
18class UWorld;
19
20
24UCLASS(Blueprintable, BlueprintType, EditInlineNew, DefaultToInstanced, meta = (ShowWorldContextPin))
26{
27 GENERATED_BODY()
28
29public:
30 UFUNCTION(BlueprintCallable, Category = "Despawn")
31 bool StartEnemyDespawnFlow(AEnemyCharacterBase* InEnemyCharacter);
32
33 bool StartEnemyDespawnFlow(AEnemyCharacterBase* InEnemyCharacter, TFunction<void()>&& InOnFlowFinished);
34
35 UFUNCTION(BlueprintPure, Category = "Material")
36 FORCEINLINE FMaterialOpacityTransition GetDespawnMaterialTransition() const
37 {
38 return DespawnMaterialTransition;
39 }
40
41protected:
42 virtual void HandleFlowStarted(UObject* InFlowOwner) override;
43 virtual void HandleFlowFinished() override;
44 virtual void HandleFlowReset() override;
45 virtual void PlayDespawnFlow_Implementation(AEnemyCharacterBase* InEnemyCharacter);
46
47protected:
48 UFUNCTION(BlueprintNativeEvent, Category = "Despawn")
49 void PlayDespawnFlow(AEnemyCharacterBase* InEnemyCharacter);
50
51private:
52 void ApplyMaterialTransition(AEnemyCharacterBase* InEnemyCharacter, const FMaterialOpacityTransition& InTransition);
53 void PrepareDespawnNiagara(AEnemyCharacterBase* InEnemyCharacter);
54 void ActivateDespawnNiagara();
55 void CompleteMaterialTransition();
56 USkeletalMeshComponent* CreateCopyPoseProxyMesh(AEnemyCharacterBase* InEnemyCharacter);
57 void ScheduleCopyPoseProxyCleanup();
58 void DestroyCopyPoseProxy();
59 void UpdateMaterialTransition();
60 void ClearMaterialTransitionTimer();
61 void RestoreMaterialSlots();
62
63protected:
64 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Niagara")
65 TObjectPtr<UNiagaraSystem> DespawnNiagaraSystem;
66
67 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Niagara")
68 FName SkeletalMeshUserParameterName = TEXT("User.SkeletalMesh");
69
70 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Niagara", meta = (ClampMin = "0.0", UIMin = "0.0"))
71 float DespawnNiagaraPlayTime = 2.0f;
72
73 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Material")
74 FMaterialOpacityTransition DespawnMaterialTransition = FMaterialOpacityTransition(1.0f, 0.0f);
75
76private:
77 UPROPERTY(Transient)
78 TWeakObjectPtr<AEnemyCharacterBase> ActiveEnemyCharacter;
79
80 UPROPERTY(Transient)
81 TWeakObjectPtr<UWorld> ActiveWorld;
82
83 UPROPERTY(Transient)
84 TArray<int32> ActiveMaterialSlotIndices;
85
86 UPROPERTY(Transient)
87 TArray<TObjectPtr<UMaterialInterface>> OriginalMaterials;
88
89 UPROPERTY(Transient)
90 TArray<TObjectPtr<UMaterialInstanceDynamic>> DynamicMaterials;
91
92 UPROPERTY(Transient)
93 TObjectPtr<AActor> ActiveCopyPoseProxyActor;
94
95 UPROPERTY(Transient)
96 TObjectPtr<USkeletalMeshComponent> ActiveCopyPoseProxyMesh;
97
98 UPROPERTY(Transient)
99 TWeakObjectPtr<UWorld> ActiveCopyPoseProxyWorld;
100
101private:
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;
110};
Definition EnemyCharacterBase.h:49
Definition EnemyDespawnDefinition.h:26
Definition FlowDefinitionBase.h:12
Definition MaterialTransitionDefinition.h:43