add respawn with health regen
This commit is contained in:
Binary file not shown.
@@ -162,6 +162,14 @@ void ACCharacter::StartDeathSequence()
|
|||||||
void ACCharacter::ReSpawn()
|
void ACCharacter::ReSpawn()
|
||||||
{
|
{
|
||||||
OnRespawn();
|
OnRespawn();
|
||||||
|
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
|
||||||
|
GetCharacterMovement()->SetMovementMode(MOVE_Walking);
|
||||||
|
GetMesh()->GetAnimInstance()->StopAllMontages(0.f);
|
||||||
|
SetStatusGaugeEnabled(true);
|
||||||
|
if (CAbilitySystemComponent)
|
||||||
|
{
|
||||||
|
CAbilitySystemComponent->ApplyFullStatEffect();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ACCharacter::OnDead()
|
void ACCharacter::OnDead()
|
||||||
|
|||||||
@@ -24,8 +24,7 @@ void UCAbilitySystemComponent::ApplyInitialEffects()
|
|||||||
* const auto Effect{EffectClass->GetDefaultObject<UGameplayEffect>()};
|
* const auto Effect{EffectClass->GetDefaultObject<UGameplayEffect>()};
|
||||||
* ApplyGameplayEffectToSelf(Effect, 0.f, MakeEffectContext());
|
* ApplyGameplayEffectToSelf(Effect, 0.f, MakeEffectContext());
|
||||||
**/
|
**/
|
||||||
auto GameplayEffectSpecHandle{MakeOutgoingSpec(EffectClass, 1, MakeEffectContext())};
|
AuthApplyGameplayEffect(EffectClass);
|
||||||
ApplyGameplayEffectSpecToSelf(*GameplayEffectSpecHandle.Data.Get());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,10 +54,23 @@ void UCAbilitySystemComponent::GiveInitialAbilities()
|
|||||||
|
|
||||||
void UCAbilitySystemComponent::HealthUpdated(const FOnAttributeChangeData& ChangeData)
|
void UCAbilitySystemComponent::HealthUpdated(const FOnAttributeChangeData& ChangeData)
|
||||||
{
|
{
|
||||||
if (!GetOwner() && !GetOwner()->HasAuthority()) return;
|
// if (!GetOwner() && !GetOwner()->HasAuthority()) return;
|
||||||
if (ChangeData.NewValue <= 0 && DeathEffectClass)
|
if (ChangeData.NewValue <= 0 && DeathEffectClass)
|
||||||
{
|
{
|
||||||
const auto GameplayEffectSpecHandle{ MakeOutgoingSpec(DeathEffectClass, 1, MakeEffectContext() )};
|
AuthApplyGameplayEffect(DeathEffectClass);
|
||||||
ApplyGameplayEffectSpecToSelf(*GameplayEffectSpecHandle.Data.Get());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UCAbilitySystemComponent::ApplyFullStatEffect()
|
||||||
|
{
|
||||||
|
if (!IsValid(FullStatEffectClass)) return;
|
||||||
|
AuthApplyGameplayEffect(FullStatEffectClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UCAbilitySystemComponent::AuthApplyGameplayEffect(const TSubclassOf<UGameplayEffect> EffectClass, const int Level)
|
||||||
|
{
|
||||||
|
if (!GetOwner() || !GetOwner()->HasAuthority()) return;
|
||||||
|
|
||||||
|
const auto FullStatEffectSpec { MakeOutgoingSpec(EffectClass, Level, MakeEffectContext())};
|
||||||
|
ApplyGameplayEffectSpecToSelf(*FullStatEffectSpec.Data.Get());
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,11 +20,16 @@ public:
|
|||||||
void ApplyInitialEffects();
|
void ApplyInitialEffects();
|
||||||
void GiveInitialAbilities();
|
void GiveInitialAbilities();
|
||||||
void HealthUpdated(const FOnAttributeChangeData& ChangeData);
|
void HealthUpdated(const FOnAttributeChangeData& ChangeData);
|
||||||
|
void ApplyFullStatEffect();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void AuthApplyGameplayEffect(TSubclassOf<UGameplayEffect> EffectClass, int Level = 1);
|
||||||
UPROPERTY(EditDefaultsOnly, Category="Gameplay Effects")
|
UPROPERTY(EditDefaultsOnly, Category="Gameplay Effects")
|
||||||
TArray<TSubclassOf<UGameplayEffect>> InitialEffects;
|
TArray<TSubclassOf<UGameplayEffect>> InitialEffects;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, Category="Gameplay Effects")
|
||||||
|
TSubclassOf<UGameplayEffect> FullStatEffectClass;
|
||||||
|
|
||||||
UPROPERTY(EditDefaultsOnly, Category="Gameplay Effects")
|
UPROPERTY(EditDefaultsOnly, Category="Gameplay Effects")
|
||||||
TSubclassOf<UGameplayEffect> DeathEffectClass;
|
TSubclassOf<UGameplayEffect> DeathEffectClass;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user