43. Instant and Duration Application Policy
This commit is contained in:
parent
b037490ef8
commit
caae7fd758
@ -28,8 +28,90 @@ void AGasaEffectActor::ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEf
|
|||||||
|
|
||||||
void AGasaEffectActor::OnOverlap(AActor* Actor)
|
void AGasaEffectActor::OnOverlap(AActor* Actor)
|
||||||
{
|
{
|
||||||
|
UGasaAbilitySystemComp* AS = GetAbilitySystem(Actor, true);
|
||||||
|
FGameplayEffectContextHandle
|
||||||
|
Context = AS->MakeEffectContext();
|
||||||
|
Context.AddSourceObject(Actor);
|
||||||
|
|
||||||
|
if (InstantEffectClass.Get())
|
||||||
|
{
|
||||||
|
if (Bitfield_IsSet(InstantEffectUsage, (int32)EEffectUsagePolicy::ApplyOnOverlap))
|
||||||
|
{
|
||||||
|
FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( InstantEffectClass, 1.0f, Context );
|
||||||
|
AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
|
||||||
|
}
|
||||||
|
if (Bitfield_IsSet(InstantEffectUsage, (int32)EEffectUsagePolicy::RemoveOnOverlap))
|
||||||
|
{
|
||||||
|
AS->RemoveActiveGameplayEffectBySourceEffect( InstantEffectClass, AS );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (DurationEffectClass.Get())
|
||||||
|
{
|
||||||
|
if (Bitfield_IsSet(DurationEffectUsage, (int32)EEffectUsagePolicy::ApplyOnOverlap))
|
||||||
|
{
|
||||||
|
FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( InstantEffectClass, 1.0f, Context );
|
||||||
|
AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
|
||||||
|
}
|
||||||
|
if (Bitfield_IsSet(InstantEffectUsage, (int32)EEffectUsagePolicy::RemoveOnOverlap))
|
||||||
|
{
|
||||||
|
AS->RemoveActiveGameplayEffectBySourceEffect( DurationEffectClass, AS );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (InfiniteEffectClass.Get())
|
||||||
|
{
|
||||||
|
if (Bitfield_IsSet(InfiniteEffectUsage, (int32)EEffectUsagePolicy::ApplyOnOverlap))
|
||||||
|
{
|
||||||
|
FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( InstantEffectClass, 1.0f, Context );
|
||||||
|
AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
|
||||||
|
}
|
||||||
|
if (Bitfield_IsSet(InstantEffectUsage, (int32)EEffectUsagePolicy::RemoveOnOverlap))
|
||||||
|
{
|
||||||
|
AS->RemoveActiveGameplayEffectBySourceEffect( InfiniteEffectClass, AS );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AGasaEffectActor::OnEndOverlap(AActor* Actor)
|
void AGasaEffectActor::OnEndOverlap(AActor* Actor)
|
||||||
{
|
{
|
||||||
|
UGasaAbilitySystemComp* AS = GetAbilitySystem(Actor, true);
|
||||||
|
FGameplayEffectContextHandle
|
||||||
|
Context = AS->MakeEffectContext();
|
||||||
|
Context.AddSourceObject(Actor);
|
||||||
|
|
||||||
|
if (InstantEffectClass.Get())
|
||||||
|
{
|
||||||
|
if (Bitfield_IsSet(InstantEffectUsage, (int32)EEffectUsagePolicy::ApplyOnEndOverlap))
|
||||||
|
{
|
||||||
|
FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( InstantEffectClass, 1.0f, Context );
|
||||||
|
AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
|
||||||
|
}
|
||||||
|
if (Bitfield_IsSet(InstantEffectUsage, (int32)EEffectUsagePolicy::RemoveOnEndOverlap))
|
||||||
|
{
|
||||||
|
AS->RemoveActiveGameplayEffectBySourceEffect( InstantEffectClass, AS );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (DurationEffectClass.Get())
|
||||||
|
{
|
||||||
|
if (Bitfield_IsSet(DurationEffectUsage, (int32)EEffectUsagePolicy::ApplyOnEndOverlap))
|
||||||
|
{
|
||||||
|
FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( InstantEffectClass, 1.0f, Context );
|
||||||
|
AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
|
||||||
|
}
|
||||||
|
if (Bitfield_IsSet(InstantEffectUsage, (int32)EEffectUsagePolicy::RemoveOnEndOverlap))
|
||||||
|
{
|
||||||
|
AS->RemoveActiveGameplayEffectBySourceEffect( DurationEffectClass, AS );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (InfiniteEffectClass.Get())
|
||||||
|
{
|
||||||
|
if (Bitfield_IsSet(InfiniteEffectUsage, (int32)EEffectUsagePolicy::ApplyOnEndOverlap))
|
||||||
|
{
|
||||||
|
FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( InstantEffectClass, 1.0f, Context );
|
||||||
|
AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
|
||||||
|
}
|
||||||
|
if (Bitfield_IsSet(InstantEffectUsage, (int32)EEffectUsagePolicy::RemoveOnEndOverlap))
|
||||||
|
{
|
||||||
|
AS->RemoveActiveGameplayEffectBySourceEffect( InfiniteEffectClass, AS );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,13 +12,11 @@ enum class EEffectUsagePolicy : uint8
|
|||||||
None = 0 UMETA(Hidden),
|
None = 0 UMETA(Hidden),
|
||||||
ApplyOnOverlap = bit(0),
|
ApplyOnOverlap = bit(0),
|
||||||
ApplyOnEndOverlap = bit(1),
|
ApplyOnEndOverlap = bit(1),
|
||||||
DoNotApply = bit(2),
|
|
||||||
RemoveOnOverlap = bit(3),
|
RemoveOnOverlap = bit(3),
|
||||||
RemoveOnEndOverlap = bit(4),
|
RemoveOnEndOverlap = bit(4),
|
||||||
DoNotRemove = bit(5),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr int32 DefaultEffectUsagePolicy = (int32(EEffectUsagePolicy::DoNotApply) | int32(EEffectUsagePolicy::RemoveOnEndOverlap));
|
constexpr int32 DefaultEffectUsagePolicy = (int32(EEffectUsagePolicy::RemoveOnEndOverlap));
|
||||||
|
|
||||||
UCLASS()
|
UCLASS()
|
||||||
class GASA_API AGasaEffectActor : public AGasaActor
|
class GASA_API AGasaEffectActor : public AGasaActor
|
||||||
|
Loading…
Reference in New Issue
Block a user