65 lines
2.0 KiB
C++
65 lines
2.0 KiB
C++
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||
|
|
||
|
#include "LyraGameplayAbility_Jump.h"
|
||
|
#include "Character/LyraCharacter.h"
|
||
|
|
||
|
|
||
|
ULyraGameplayAbility_Jump::ULyraGameplayAbility_Jump(const FObjectInitializer& ObjectInitializer)
|
||
|
: Super(ObjectInitializer)
|
||
|
{
|
||
|
InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor;
|
||
|
NetExecutionPolicy = EGameplayAbilityNetExecutionPolicy::LocalPredicted;
|
||
|
}
|
||
|
|
||
|
bool ULyraGameplayAbility_Jump::CanActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayTagContainer* SourceTags, const FGameplayTagContainer* TargetTags, FGameplayTagContainer* OptionalRelevantTags) const
|
||
|
{
|
||
|
if (!ActorInfo || !ActorInfo->AvatarActor.IsValid())
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
const ALyraCharacter* LyraCharacter = Cast<ALyraCharacter>(ActorInfo->AvatarActor.Get());
|
||
|
if (!LyraCharacter || !LyraCharacter->CanJump())
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if (!Super::CanActivateAbility(Handle, ActorInfo, SourceTags, TargetTags, OptionalRelevantTags))
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void ULyraGameplayAbility_Jump::EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled)
|
||
|
{
|
||
|
// Stop jumping in case the ability blueprint doesn't call it.
|
||
|
CharacterJumpStop();
|
||
|
|
||
|
Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);
|
||
|
}
|
||
|
|
||
|
void ULyraGameplayAbility_Jump::CharacterJumpStart()
|
||
|
{
|
||
|
if (ALyraCharacter* LyraCharacter = GetLyraCharacterFromActorInfo())
|
||
|
{
|
||
|
if (LyraCharacter->IsLocallyControlled() && !LyraCharacter->bPressedJump)
|
||
|
{
|
||
|
LyraCharacter->UnCrouch();
|
||
|
LyraCharacter->Jump();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ULyraGameplayAbility_Jump::CharacterJumpStop()
|
||
|
{
|
||
|
if (ALyraCharacter* LyraCharacter = GetLyraCharacterFromActorInfo())
|
||
|
{
|
||
|
if (LyraCharacter->IsLocallyControlled() && LyraCharacter->bPressedJump)
|
||
|
{
|
||
|
LyraCharacter->StopJumping();
|
||
|
}
|
||
|
}
|
||
|
}
|