58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Project Lab - NHTV Igad
 | 
						|
 | 
						|
#include "UnrealProject.h"
 | 
						|
#include "BombProjectile.h"
 | 
						|
#include "NetworkCharacter.h"
 | 
						|
 | 
						|
#include "Effect.h"
 | 
						|
#include "EffectFunctionLibrary.h"
 | 
						|
#include "BlueprintAbilityLibrary.h"
 | 
						|
 | 
						|
 | 
						|
ABombProjectile::ABombProjectile()
 | 
						|
{
 | 
						|
	PrimaryActorTick.bCanEverTick = true;
 | 
						|
 | 
						|
	m_progress = 0.0f;
 | 
						|
	maxDistance = 100000.0f;
 | 
						|
}
 | 
						|
 | 
						|
void ABombProjectile::BeginPlay()
 | 
						|
{
 | 
						|
	Super::BeginPlay();
 | 
						|
	travelTime = travelTime < 0.01f ? 0.01f : travelTime;
 | 
						|
 | 
						|
	float distance = FVector::Dist(source, target);
 | 
						|
}
 | 
						|
 | 
						|
void ABombProjectile::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
 | 
						|
{
 | 
						|
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);
 | 
						|
 | 
						|
	DOREPLIFETIME_CONDITION(ABombProjectile, source, COND_InitialOnly);
 | 
						|
	DOREPLIFETIME_CONDITION(ABombProjectile, target, COND_InitialOnly);
 | 
						|
	DOREPLIFETIME_CONDITION(ABombProjectile, travelTime, COND_InitialOnly);
 | 
						|
}
 | 
						|
 | 
						|
void ABombProjectile::NativeFixedProjectileTick(float DeltaTime)
 | 
						|
{
 | 
						|
	if(travelTime <= 0 || m_finished)
 | 
						|
		return;
 | 
						|
 | 
						|
	m_progress += DeltaTime;
 | 
						|
	if(m_progress >= travelTime)
 | 
						|
		m_progress = travelTime;
 | 
						|
 | 
						|
	const float lerp = m_progress / travelTime;
 | 
						|
	const float sin = FMath::Sin(lerp * PI);
 | 
						|
	FVector newLocation = FMath::Lerp(source, target, lerp) + FVector(0, 0, sin * travelHeight);
 | 
						|
	SetActorLocation(newLocation, true);
 | 
						|
 | 
						|
	float distToEnd = (target - newLocation).Size();
 | 
						|
 | 
						|
	if(lerp >= 1.0f)
 | 
						|
	{
 | 
						|
		// Server only
 | 
						|
		Finish();
 | 
						|
	}
 | 
						|
} |