42. Infinite Gameplay Effects
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								Project/Binaries/Win64/UnrealEditor-GasaEditor.dll
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Binaries/Win64/UnrealEditor-GasaEditor.dll
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -8,6 +8,10 @@ AGasaEffectActor::AGasaEffectActor() | |||||||
| 	PrimaryActorTick.bCanEverTick = false; | 	PrimaryActorTick.bCanEverTick = false; | ||||||
|  |  | ||||||
| 	RootComponent = CreateDefaultSubobject<USceneComponent>("Root"); | 	RootComponent = CreateDefaultSubobject<USceneComponent>("Root"); | ||||||
|  |  | ||||||
|  | 	InstantEffectUsage  = DefaultEffectUsagePolicy; | ||||||
|  | 	DurationEffectUsage = DefaultEffectUsagePolicy; | ||||||
|  | 	InfiniteEffectUsage = DefaultEffectUsagePolicy; | ||||||
| } | } | ||||||
|  |  | ||||||
| void AGasaEffectActor::ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEffect> EffectClass) | void AGasaEffectActor::ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEffect> EffectClass) | ||||||
| @@ -21,3 +25,11 @@ void AGasaEffectActor::ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEf | |||||||
| 	FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( EffectClass, 1.0f, Context ); | 	FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( EffectClass, 1.0f, Context ); | ||||||
| 	AS->ApplyGameplayEffectSpecToSelf( * Spec.Data ); | 	AS->ApplyGameplayEffectSpecToSelf( * Spec.Data ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void AGasaEffectActor::OnOverlap(AActor* Actor) | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void AGasaEffectActor::OnEndOverlap(AActor* Actor) | ||||||
|  | { | ||||||
|  | } | ||||||
|   | |||||||
| @@ -6,6 +6,20 @@ | |||||||
|  |  | ||||||
| #include "GasaEffectActor.generated.h" | #include "GasaEffectActor.generated.h" | ||||||
|  |  | ||||||
|  | UENUM(BlueprintType) | ||||||
|  | enum class EEffectUsagePolicy : uint8 | ||||||
|  | { | ||||||
|  | 	None               = 0 UMETA(Hidden), | ||||||
|  | 	ApplyOnOverlap     = bit(0), | ||||||
|  | 	ApplyOnEndOverlap  = bit(1), | ||||||
|  | 	DoNotApply         = bit(2), | ||||||
|  | 	RemoveOnOverlap    = bit(3), | ||||||
|  | 	RemoveOnEndOverlap = bit(4), | ||||||
|  | 	DoNotRemove        = bit(5), | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | constexpr int32 DefaultEffectUsagePolicy = (int32(EEffectUsagePolicy::DoNotApply) | int32(EEffectUsagePolicy::RemoveOnEndOverlap)); | ||||||
|  |  | ||||||
| UCLASS() | UCLASS() | ||||||
| class GASA_API AGasaEffectActor : public AGasaActor | class GASA_API AGasaEffectActor : public AGasaActor | ||||||
| { | { | ||||||
| @@ -14,13 +28,34 @@ public: | |||||||
|  |  | ||||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects") | 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects") | ||||||
| 	TSubclassOf<UGameplayEffect> InstantEffectClass; | 	TSubclassOf<UGameplayEffect> InstantEffectClass; | ||||||
|  |  | ||||||
|  | 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects", meta=(Bitmask, BitmaskEnum = EEffectUsagePolicy)) | ||||||
|  | 	int32 InstantEffectUsage; | ||||||
| 	 | 	 | ||||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects") | 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects") | ||||||
| 	TSubclassOf<UGameplayEffect> DurationEffectClass; | 	TSubclassOf<UGameplayEffect> DurationEffectClass; | ||||||
| 	 | 	 | ||||||
|  | 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects", meta=(Bitmask, BitmaskEnum = EEffectUsagePolicy)) | ||||||
|  | 	int32 DurationEffectUsage; | ||||||
|  | 	 | ||||||
|  | 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects") | ||||||
|  | 	TSubclassOf<UGameplayEffect> InfiniteEffectClass; | ||||||
|  | 	 | ||||||
|  | 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects", meta=(Bitmask, BitmaskEnum = EEffectUsagePolicy)) | ||||||
|  | 	int32 InfiniteEffectUsage; | ||||||
|  |  | ||||||
|  | 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects") | ||||||
|  | 	bool bDestroyOnEffectRemoval = false; | ||||||
|  | 	 | ||||||
| 	AGasaEffectActor(); | 	AGasaEffectActor(); | ||||||
|  |  | ||||||
| 	UFUNCTION(BlueprintCallable, Category = "Gameplay Effects") | 	UFUNCTION(BlueprintCallable, Category = "Gameplay Effects") | ||||||
| 	void ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEffect> EffectClass ); | 	void ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEffect> EffectClass ); | ||||||
|  |  | ||||||
|  | 	UFUNCTION(BlueprintCallable) | ||||||
|  | 	void OnOverlap(AActor* Actor); | ||||||
|  |  | ||||||
|  | 	UFUNCTION(BlueprintCallable) | ||||||
|  | 	void OnEndOverlap(AActor* Actor); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,6 +13,8 @@ | |||||||
| #define rcast( Type, Value ) reinterpret_cast<Type>( Value ) | #define rcast( Type, Value ) reinterpret_cast<Type>( Value ) | ||||||
| #define scast( Type, Value ) static_cast<Type>( Value ) | #define scast( Type, Value ) static_cast<Type>( Value ) | ||||||
|  |  | ||||||
|  | #define bit(position) (1 << position) | ||||||
|  |  | ||||||
| #pragma region Math | #pragma region Math | ||||||
| #define m_pow2( value ) (value * value) | #define m_pow2( value ) (value * value) | ||||||
| #pragma endregion Math | #pragma endregion Math | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user