You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.8 KiB
82 lines
1.8 KiB
#include "Trooper.h"
|
|
#include <Kismet/GameplayStatics.h>
|
|
#include "MyPlayerController.h"
|
|
#include "Net/UnrealNetwork.h"
|
|
|
|
// Sets default values
|
|
ATrooper::ATrooper()
|
|
{
|
|
bReplicates = true;
|
|
|
|
PrimaryActorTick.bCanEverTick = true;
|
|
Tags.Add(FName("Trooper"));
|
|
MyStaticMesh = CreateDefaultSubobject<UStaticMeshComponent>("Mesh");
|
|
RootComponent = MyStaticMesh;
|
|
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshToUse(TEXT(
|
|
"StaticMesh'/Game/StarterContent/Props/SM_Chair.SM_Chair'"
|
|
));
|
|
if (MeshToUse.Object)
|
|
{
|
|
MyStaticMesh->SetStaticMesh(MeshToUse.Object);
|
|
}
|
|
}
|
|
|
|
// Called when the game starts or when spawned
|
|
void ATrooper::BeginPlay()
|
|
{
|
|
Super::BeginPlay();
|
|
}
|
|
|
|
void ATrooper::Initialize(uint8 const NewPlayerIndex, FVector const SpawnLocation, uint8 const NewId)
|
|
{
|
|
PlayerIndex = NewPlayerIndex;
|
|
bIsMoving = false;
|
|
CurrentLocation = SpawnLocation;
|
|
Id = NewId;
|
|
}
|
|
|
|
void ATrooper::Tick(float const DeltaTime)
|
|
{
|
|
if (!bIsMoving)
|
|
return;
|
|
FVector PositionVector = (TargetLocation - CurrentLocation);
|
|
PositionVector.Normalize();
|
|
PositionVector *= (Speed * DeltaTime);
|
|
if (PositionVector.Size() >= (TargetLocation - CurrentLocation).Size())
|
|
{
|
|
CurrentLocation = TargetLocation;
|
|
bIsMoving = false;
|
|
}
|
|
else
|
|
{
|
|
CurrentLocation += PositionVector;
|
|
}
|
|
SetActorLocation(CurrentLocation);
|
|
}
|
|
|
|
void ATrooper::MoveTrooper(FVector const NewPos)
|
|
{
|
|
TargetLocation = NewPos;
|
|
bIsMoving = true;
|
|
}
|
|
|
|
uint8 ATrooper::GetId() const
|
|
{
|
|
return Id;
|
|
}
|
|
|
|
|
|
void ATrooper::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
|
|
{
|
|
DOREPLIFETIME(ATrooper, PlayerIndex);
|
|
DOREPLIFETIME(ATrooper, CurrentLocation);
|
|
DOREPLIFETIME(ATrooper, TargetLocation);
|
|
DOREPLIFETIME(ATrooper, bIsMoving);
|
|
DOREPLIFETIME(ATrooper, Id);
|
|
}
|
|
|
|
uint8 ATrooper::GetPlayerIndex() const
|
|
{
|
|
return PlayerIndex;
|
|
}
|