93 lines
2.4 KiB
C++
93 lines
2.4 KiB
C++
// Project Lab - NHTV Igad
|
|
|
|
#include "UnrealProject.h"
|
|
#include "TrailTrigger.h"
|
|
#include "Networkcharacter.h"
|
|
#include "TrailActor.h"
|
|
#include "Effect.h"
|
|
#include "EffectFunctionLibrary.h"
|
|
|
|
ATrailTrigger::ATrailTrigger()
|
|
{
|
|
}
|
|
|
|
void ATrailTrigger::BeginPlay()
|
|
{
|
|
Super::BeginPlay();
|
|
if (Role == ROLE_Authority)
|
|
{
|
|
if (character == NULL)
|
|
{
|
|
FERROR("m_character is NULL");
|
|
Destroy();
|
|
return;
|
|
}
|
|
m_lastPos = character->GetActorLocation();
|
|
SpawnTrail(FVector(0, 0, 0), true);
|
|
}
|
|
}
|
|
|
|
void ATrailTrigger::SpawnTrail(FVector offset, bool first)
|
|
{
|
|
|
|
m_lastPos += offset;
|
|
UCapsuleComponent* newobject = NewObject<UCapsuleComponent>(this);
|
|
newobject->SetCollisionProfileName(TEXT("Triggers"));
|
|
newobject->SetCapsuleRadius(colliderRadius, false);
|
|
newobject->SetCapsuleHalfHeight(500, false);
|
|
newobject->SetWorldLocation(m_lastPos);
|
|
newobject->OnComponentBeginOverlap.AddDynamic(this, &AAbilityTriggerBase::OnOverlapBegin);
|
|
newobject->OnComponentEndOverlap.AddDynamic(this, &AAbilityTriggerBase::OnOverlapEnd);
|
|
newobject->RegisterComponent();
|
|
if(first)
|
|
RootComponent = newobject;
|
|
|
|
FTransform effectTransform;
|
|
effectTransform.SetTranslation(m_lastPos);
|
|
effectTransform.SetRotation(character->GetActorRotation().Quaternion());
|
|
UEffectFunctionLibrary::CreateEffectAt(this, trailEffectClass, effectTransform,0.0f,lifeTime);
|
|
|
|
//ATrailActor* newTrailActor = GetWorld()->SpawnActor<ATrailActor>(trailActors);
|
|
//if (newTrailActor == nullptr)
|
|
// return;6
|
|
//newTrailActor->SetActorLocation(m_lastPos);
|
|
//newTrailActor->SetOwner(this);
|
|
//newTrailActor->DynamicAdd();
|
|
}
|
|
|
|
void ATrailTrigger::Tick(float DeltaTime)
|
|
{
|
|
Super::Tick(DeltaTime);
|
|
if (Role != ROLE_Authority || !IsValid(this))
|
|
return;
|
|
if (colliderSpawnDistance == 0)
|
|
{
|
|
FERROR("colliderSpawnDistance == 0");
|
|
return;
|
|
}
|
|
//m_timer += DeltaTime;
|
|
if ( !character ) return;
|
|
FVector distvec = character->GetActorLocation() - m_lastPos;
|
|
distvec.Z = 0;
|
|
float dist = distvec.Size();
|
|
m_totalTimer += DeltaTime;
|
|
lifeTime -= DeltaTime;
|
|
if (lifeTime < 0)
|
|
{
|
|
Destroy();
|
|
return;
|
|
}
|
|
if (m_totalTimer > totalSpawnTime)
|
|
{
|
|
return;
|
|
}
|
|
while (dist > colliderSpawnDistance)
|
|
{
|
|
UCapsuleComponent* newobject = NewObject<UCapsuleComponent>(this);
|
|
distvec.Normalize();
|
|
dist -= colliderSpawnDistance;
|
|
|
|
SpawnTrail(distvec *colliderSpawnDistance);
|
|
}
|
|
|
|
} |