69 lines
1.5 KiB
C++
69 lines
1.5 KiB
C++
// Project Lab - NHTV Igad
|
|
|
|
#include "UnrealProject.h"
|
|
#include "AbilityInfo.h"
|
|
#include "NetworkCharacter.h"
|
|
#include "PreCastAbilityEventGroup.h"
|
|
|
|
|
|
|
|
|
|
|
|
void APreCastAbilityEventGroup::BeginPlay()
|
|
{
|
|
check(Role == ROLE_Authority);
|
|
Super::BeginPlay();
|
|
|
|
if (!character || character->IsActorBeingDestroyed())
|
|
{
|
|
Destroy();
|
|
}
|
|
else
|
|
{
|
|
// Handle the destruction of the caster
|
|
character->OnDestroyed.AddDynamic(this, &APreCastAbilityEventGroup::m_OnCharacterDestroyed);
|
|
}
|
|
}
|
|
void APreCastAbilityEventGroup::EndPlay(const EEndPlayReason::Type EndPlayReason)
|
|
{
|
|
check(Role == ROLE_Authority);
|
|
if (EndPlayReason == EEndPlayReason::Destroyed)
|
|
{
|
|
Super::EndPlay(EndPlayReason);
|
|
StartAbility();
|
|
}
|
|
}
|
|
void APreCastAbilityEventGroup::Tick(float DeltaTime)
|
|
{
|
|
Super::Tick(DeltaTime);
|
|
|
|
if (IsPendingKill())
|
|
return;
|
|
}
|
|
|
|
void APreCastAbilityEventGroup::m_OnCharacterDestroyed()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
void APreCastAbilityEventGroup::StartAbility()
|
|
{
|
|
character->m_CastAbility_Server(abilityInfo);
|
|
Destroy();
|
|
}
|
|
|
|
|
|
APreCastAbilityEventGroup* APreCastAbilityEventGroup::InitPreCast(UAbilityInfo* info, ANetworkCharacter* character)
|
|
{
|
|
UWorld* world = character->GetWorld();
|
|
check(world);
|
|
|
|
APreCastAbilityEventGroup* group = world->SpawnActorDeferred<APreCastAbilityEventGroup>(info->precastEvent, FTransform::Identity);
|
|
|
|
group->character = character;
|
|
//group->abilityState = character->GetAbilityState(info);
|
|
group->abilityInfo = info;
|
|
|
|
UGameplayStatics::FinishSpawningActor(group, FTransform::Identity);
|
|
return group;
|
|
} |