CogSample: Better placement of the damage vfx for the poison ability

This commit is contained in:
Arnaud Jamin
2023-10-19 22:51:19 -04:00
parent 93196728b0
commit 518d741b6e
7 changed files with 33 additions and 22 deletions
+1
View File
@@ -11,4 +11,5 @@ NetIndexFirstBitSegment=16
+GameplayTagList=(Tag="GameplayCue.Ability.Hero1.Poison",DevComment="") +GameplayTagList=(Tag="GameplayCue.Ability.Hero1.Poison",DevComment="")
+GameplayTagList=(Tag="GameplayCue.Ability.Hero1.PuhBack",DevComment="") +GameplayTagList=(Tag="GameplayCue.Ability.Hero1.PuhBack",DevComment="")
+GameplayTagList=(Tag="GameplayCue.Ability.Hero1.Shield",DevComment="") +GameplayTagList=(Tag="GameplayCue.Ability.Hero1.Shield",DevComment="")
+GameplayTagList=(Tag="GameplayCue.DamageReceived.Effect",DevComment="Gameplay cue of a damage received when the damage is trigerred by an effect on the target (such as a dot effect)")
@@ -122,17 +122,26 @@ void UCogSampleExecCalculation_Damage::Execute_Implementation(const FGameplayEff
} }
} }
UCogSampleFunctionLibrary_Damage::ExecuteDamageGameplayCue(TargetAbilitySystem, HitResult, MitigatedDamage, EffectContext, false); UCogSampleFunctionLibrary_Damage::ExecuteDamageGameplayCue(TargetAbilitySystem, EffectSpec, HitResult, MitigatedDamage, EffectContext, false);
} }
//-------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------
void UCogSampleFunctionLibrary_Damage::ExecuteDamageGameplayCue( void UCogSampleFunctionLibrary_Damage::ExecuteDamageGameplayCue(
UCogSampleAbilitySystemComponent* TargetAbilitySystem, UCogSampleAbilitySystemComponent* TargetAbilitySystem,
const FGameplayEffectSpec& EffectSpec,
const FHitResult& HitResult, const FHitResult& HitResult,
float Damage, float Damage,
const FGameplayEffectContextHandle& EffectContext, const FGameplayEffectContextHandle& EffectContext,
bool IsPredicted) bool IsPredicted)
{ {
//-----------------------------------------------------------------------------------------------------
// We check for >= 1 instead of >= 0 because we can use damage values between 0 and 1.
//-----------------------------------------------------------------------------------------------------
if (Damage == 0.0f)
{
return;
}
ensure(TargetAbilitySystem); ensure(TargetAbilitySystem);
if (TargetAbilitySystem == nullptr) if (TargetAbilitySystem == nullptr)
{ {
@@ -154,27 +163,27 @@ void UCogSampleFunctionLibrary_Damage::ExecuteDamageGameplayCue(
TypedContext->bGameplayCueIsPredicted = IsPredicted; TypedContext->bGameplayCueIsPredicted = IsPredicted;
//----------------------------------------------------------------------------------------------------- FGameplayCueParameters GameplayCueParameters;
// We check for >= 1 instead of >= 0 because we can use damage values between 0 and 1. GameplayCueParameters.RawMagnitude = Damage;
//----------------------------------------------------------------------------------------------------- GameplayCueParameters.EffectContext = EffectContext;
if (Damage > 0.0f) GameplayCueParameters.Instigator = TypedContext->GetInstigator();
{ GameplayCueParameters.EffectCauser = TypedContext->GetEffectCauser();
FGameplayCueParameters GameplayCueParameters; GameplayCueParameters.PhysicalMaterial = HitResult.PhysMaterial;
GameplayCueParameters.RawMagnitude = Damage; GameplayCueParameters.Location = HitResult.Location;
GameplayCueParameters.EffectContext = EffectContext; GameplayCueParameters.Normal = HitResult.ImpactNormal;
GameplayCueParameters.Instigator = TypedContext->GetInstigator();
GameplayCueParameters.EffectCauser = TypedContext->GetEffectCauser();
GameplayCueParameters.PhysicalMaterial = HitResult.PhysMaterial;
GameplayCueParameters.Location = HitResult.Location;
GameplayCueParameters.Normal = HitResult.ImpactNormal;
if (IsPredicted) TArray<FGameplayTag> Tags;
{ SpecAssetTags.GetGameplayTagArray(Tags);
TargetAbilitySystem->ExecuteGameplayCueLocal(Tag_GameplayCue_DamageReceived, GameplayCueParameters);
} FGameplayTag* FoundTag = Tags.FindByPredicate([](const FGameplayTag& Tag) { return Tag.MatchesTag(Tag_GameplayCue_DamageReceived); });
else FGameplayTag DamageTag = FoundTag != nullptr ? *FoundTag : Tag_GameplayCue_DamageReceived;
{
TargetAbilitySystem->ExecuteGameplayCue(Tag_GameplayCue_DamageReceived, GameplayCueParameters); if (IsPredicted)
} {
TargetAbilitySystem->ExecuteGameplayCueLocal(DamageTag, GameplayCueParameters);
}
else
{
TargetAbilitySystem->ExecuteGameplayCue(DamageTag, GameplayCueParameters);
} }
} }
@@ -30,6 +30,7 @@ public:
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
static void ExecuteDamageGameplayCue( static void ExecuteDamageGameplayCue(
UCogSampleAbilitySystemComponent* TargetAbilitySystem, UCogSampleAbilitySystemComponent* TargetAbilitySystem,
const FGameplayEffectSpec& EffectSpec,
const FHitResult& HitResult, const FHitResult& HitResult,
float HealthDamage, float HealthDamage,
const FGameplayEffectContextHandle& EffectContext, const FGameplayEffectContextHandle& EffectContext,