78 lines
2.0 KiB
C++
78 lines
2.0 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
#include "LagCompensationComponent.h"
|
|
|
|
#include "Components/BoxComponent.h"
|
|
|
|
ULagCompensationComponent::ULagCompensationComponent()
|
|
{
|
|
PrimaryComponentTick.bCanEverTick = true;
|
|
}
|
|
|
|
void ULagCompensationComponent::BeginPlay()
|
|
{
|
|
Super::BeginPlay();
|
|
|
|
}
|
|
|
|
void ULagCompensationComponent::SaveFramePackage(FFramePackage& Package)
|
|
{
|
|
Character = Character == nullptr ? Cast<ABlasterCharacter>(GetOwner()) : Character;
|
|
if (Character)
|
|
{
|
|
Package.Time = GetWorld()->GetTimeSeconds();
|
|
for (auto& BoxPair : Character->HitCollisionBoxes)
|
|
{
|
|
FBoxInformation BoxInformation;
|
|
BoxInformation.Location = BoxPair.Value->GetComponentLocation();
|
|
BoxInformation.Rotation = BoxPair.Value->GetComponentRotation();
|
|
BoxInformation.BoxExtend = BoxPair.Value->GetScaledBoxExtent();
|
|
|
|
Package.HitBoxInfo.Add(BoxPair.Key, BoxInformation);
|
|
}
|
|
}
|
|
}
|
|
|
|
void ULagCompensationComponent::ShowFramePackage(const FFramePackage& Package, const FColor Color)
|
|
{
|
|
for (auto& BoxInfo : Package.HitBoxInfo)
|
|
{
|
|
DrawDebugBox(
|
|
GetWorld(),
|
|
BoxInfo.Value.Location,
|
|
BoxInfo.Value.BoxExtend,
|
|
FQuat(BoxInfo.Value.Rotation),
|
|
Color,
|
|
false,
|
|
4.f
|
|
);
|
|
}
|
|
}
|
|
|
|
void ULagCompensationComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
|
|
{
|
|
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
|
|
|
|
if (FrameHistory.Num() <= 1)
|
|
{
|
|
FFramePackage ThisFrame;
|
|
SaveFramePackage(ThisFrame);
|
|
FrameHistory.AddHead(ThisFrame);
|
|
}
|
|
else
|
|
{
|
|
float HistoryLength = FrameHistory.GetHead()->GetValue().Time - FrameHistory.GetTail()->GetValue().Time;
|
|
while (HistoryLength > MaxRecordTime)
|
|
{
|
|
FrameHistory.RemoveNode(FrameHistory.GetTail());
|
|
HistoryLength = FrameHistory.GetHead()->GetValue().Time - FrameHistory.GetTail()->GetValue().Time;
|
|
}
|
|
FFramePackage ThisFrame;
|
|
SaveFramePackage(ThisFrame);
|
|
FrameHistory.AddHead(ThisFrame);
|
|
ShowFramePackage(ThisFrame, FColor::Red);
|
|
}
|
|
}
|
|
|