From e619252c4c7886e6ca27eb2fc070201dc1b2522a Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Sat, 28 May 2022 00:03:06 +0200 Subject: [PATCH] 197 - Hit Box Collision Type --- .../Character/BP_BlasterCharacter.uasset | Bin 121907 -> 124167 bytes Content/Maps/BlasterMap.umap | Bin 1339576 -> 1340850 bytes Source/Blaster/Blaster.h | 1 + Source/Blaster/Character/BlasterCharacter.cpp | 29 ++++------- .../Components/LagCompensationComponent.cpp | 49 +++++++++++++++--- 5 files changed, 53 insertions(+), 26 deletions(-) diff --git a/Content/Blueprints/Character/BP_BlasterCharacter.uasset b/Content/Blueprints/Character/BP_BlasterCharacter.uasset index 5f6e8cd8197ce92346ca07e0eb662b9fa18b2388..7bb574bd6adf94095c2a263e5c8696b5a0365740 100644 GIT binary patch delta 12597 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 Nv$xo#1kot@zW}awLpT5c delta 10418 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 UtR^R?c1TrORgSJvhiDi1AGMQUdjJ3c diff --git a/Content/Maps/BlasterMap.umap b/Content/Maps/BlasterMap.umap index fac04cc01c9bca29f8edba970b4e55311680ddb5..f09713c317b5d7b4fa2dc8f6b9ad5ec4eb8ad64d 100644 GIT binary patch delta 23196 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 R#~;<)*OoU{i*#pY{|n)`;iLcn delta 22841 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 diff --git a/Source/Blaster/Blaster.h b/Source/Blaster/Blaster.h index 2f59b81..8b48f21 100644 --- a/Source/Blaster/Blaster.h +++ b/Source/Blaster/Blaster.h @@ -5,4 +5,5 @@ #include "CoreMinimal.h" #define ECC_SkeletalMesh ECC_GameTraceChannel1 +#define ECC_HitBox ECC_GameTraceChannel2 diff --git a/Source/Blaster/Character/BlasterCharacter.cpp b/Source/Blaster/Character/BlasterCharacter.cpp index 061a8e4..9c48be9 100644 --- a/Source/Blaster/Character/BlasterCharacter.cpp +++ b/Source/Blaster/Character/BlasterCharacter.cpp @@ -72,93 +72,86 @@ ABlasterCharacter::ABlasterCharacter() head = CreateDefaultSubobject(TEXT("head")); head->SetupAttachment(GetMesh(), FName("head")); - head->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("head"), head); pelvis = CreateDefaultSubobject(TEXT("pelvis")); pelvis->SetupAttachment(GetMesh(), FName("pelvis")); - pelvis->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("pelvis"), pelvis); spine_02 = CreateDefaultSubobject(TEXT("spine_02")); spine_02->SetupAttachment(GetMesh(), FName("spine_02")); - spine_02->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("spine_02"), spine_02); spine_03 = CreateDefaultSubobject(TEXT("spine_03")); spine_03->SetupAttachment(GetMesh(), FName("spine_03")); - spine_03->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("spine_03"), spine_03); upperarm_l = CreateDefaultSubobject(TEXT("upperarm_l")); upperarm_l->SetupAttachment(GetMesh(), FName("upperarm_l")); - upperarm_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("upperarm_l"), upperarm_l); upperarm_r = CreateDefaultSubobject(TEXT("upperarm_r")); upperarm_r->SetupAttachment(GetMesh(), FName("upperarm_r")); - upperarm_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("upperarm_r"), upperarm_r); lowerarm_l = CreateDefaultSubobject(TEXT("lowerarm_l")); lowerarm_l->SetupAttachment(GetMesh(), FName("lowerarm_l")); - lowerarm_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("lowerarm_l"), lowerarm_l); lowerarm_r = CreateDefaultSubobject(TEXT("lowerarm_r")); lowerarm_r->SetupAttachment(GetMesh(), FName("lowerarm_r")); - lowerarm_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("lowerarm_r"), lowerarm_r); hand_l = CreateDefaultSubobject(TEXT("hand_l")); hand_l->SetupAttachment(GetMesh(), FName("hand_l")); - hand_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("hand_l"), hand_l); hand_r = CreateDefaultSubobject(TEXT("hand_r")); hand_r->SetupAttachment(GetMesh(), FName("hand_r")); - hand_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("hand_r"), hand_r); backpack = CreateDefaultSubobject(TEXT("backpack")); backpack->SetupAttachment(GetMesh(), FName("backpack")); - backpack->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("backpack"), backpack); blanket = CreateDefaultSubobject(TEXT("blanket")); blanket->SetupAttachment(GetMesh(), FName("backpack")); - blanket->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("blanket"), blanket); thigh_l = CreateDefaultSubobject(TEXT("thigh_l")); thigh_l->SetupAttachment(GetMesh(), FName("thigh_l")); - thigh_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("thigh_l"), thigh_l); thigh_r = CreateDefaultSubobject(TEXT("thigh_r")); thigh_r->SetupAttachment(GetMesh(), FName("thigh_r")); - thigh_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("thigh_r"), thigh_r); calf_l = CreateDefaultSubobject(TEXT("calf_l")); calf_l->SetupAttachment(GetMesh(), FName("calf_l")); - calf_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("calf_l"), calf_l); calf_r = CreateDefaultSubobject(TEXT("calf_r")); calf_r->SetupAttachment(GetMesh(), FName("calf_r")); - calf_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("calf_r"), calf_r); foot_l = CreateDefaultSubobject(TEXT("foot_l")); foot_l->SetupAttachment(GetMesh(), FName("foot_l")); - foot_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("foot_l"), foot_l); foot_r = CreateDefaultSubobject(TEXT("foot_r")); foot_r->SetupAttachment(GetMesh(), FName("foot_r")); - foot_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); HitCollisionBoxes.Add(FName("foot_r"), foot_r); + + for (auto Box : HitCollisionBoxes) + { + if (Box.Value) + { + Box.Value->SetCollisionObjectType(ECC_HitBox); + Box.Value->SetCollisionResponseToAllChannels(ECR_Ignore); + Box.Value->SetCollisionResponseToChannel(ECC_HitBox, ECR_Block); + Box.Value->SetCollisionEnabled(ECollisionEnabled::NoCollision); + } + } } void ABlasterCharacter::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const diff --git a/Source/Blaster/Components/LagCompensationComponent.cpp b/Source/Blaster/Components/LagCompensationComponent.cpp index 331b2ed..b5397fb 100644 --- a/Source/Blaster/Components/LagCompensationComponent.cpp +++ b/Source/Blaster/Components/LagCompensationComponent.cpp @@ -3,6 +3,7 @@ #include "LagCompensationComponent.h" +#include "Blaster/Blaster.h" #include "Blaster/Weapon/Weapon.h" #include "Components/BoxComponent.h" #include "Kismet/GameplayStatics.h" @@ -145,7 +146,7 @@ FServerSideRewindResult ULagCompensationComponent::ConfirmHit(const FFramePackag // Enable collision for the head first UBoxComponent* HeadBox = HitCharacter->HitCollisionBoxes[FName("head")]; HeadBox->SetCollisionEnabled(ECollisionEnabled::QueryOnly); - HeadBox->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block); + HeadBox->SetCollisionResponseToChannel(ECC_HitBox, ECR_Block); const FVector TraceEnd = TraceStart + (HitLocation - TraceStart) * 1.25f; UWorld* World = GetWorld(); @@ -156,11 +157,19 @@ FServerSideRewindResult ULagCompensationComponent::ConfirmHit(const FFramePackag ConfirmHitResult, TraceStart, TraceEnd, - ECC_Visibility + ECC_HitBox ); if (ConfirmHitResult.bBlockingHit) // we hit the head, return early { + if (ConfirmHitResult.Component.IsValid()) + { + UBoxComponent* Box = Cast(ConfirmHitResult.Component); + if (Box) + { + DrawDebugBox(GetWorld(), Box->GetComponentLocation(), Box->GetScaledBoxExtent(), FQuat(Box->GetComponentRotation()), FColor::Red, false, 8.f); + } + } ResetHitBoxes(HitCharacter, CurrentFrame); EnableCharacterMeshCollision(HitCharacter, ECollisionEnabled::QueryAndPhysics); return FServerSideRewindResult{ true, true }; @@ -172,7 +181,7 @@ FServerSideRewindResult ULagCompensationComponent::ConfirmHit(const FFramePackag if (HitBoxPair.Value != nullptr) { HitBoxPair.Value->SetCollisionEnabled(ECollisionEnabled::QueryOnly); - HitBoxPair.Value->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block); + HitBoxPair.Value->SetCollisionResponseToChannel(ECC_HitBox, ECR_Block); } } @@ -180,11 +189,19 @@ FServerSideRewindResult ULagCompensationComponent::ConfirmHit(const FFramePackag ConfirmHitResult, TraceStart, TraceEnd, - ECC_Visibility + ECC_HitBox ); if (ConfirmHitResult.bBlockingHit) { + if (ConfirmHitResult.Component.IsValid()) + { + UBoxComponent* Box = Cast(ConfirmHitResult.Component); + if (Box) + { + DrawDebugBox(GetWorld(), Box->GetComponentLocation(), Box->GetScaledBoxExtent(), FQuat(Box->GetComponentRotation()), FColor::Blue, false, 8.f); + } + } ResetHitBoxes(HitCharacter, CurrentFrame); EnableCharacterMeshCollision(HitCharacter, ECollisionEnabled::QueryAndPhysics); return FServerSideRewindResult{ true, false }; @@ -223,7 +240,7 @@ FShotgunServerSideRewindResult ULagCompensationComponent::ShotgunConfirmHit(cons // Enable collision for the head first UBoxComponent* HeadBox = Frame.Character->HitCollisionBoxes[FName("head")]; HeadBox->SetCollisionEnabled(ECollisionEnabled::QueryOnly); - HeadBox->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block); + HeadBox->SetCollisionResponseToChannel(ECC_HitBox, ECR_Block); } UWorld* World = GetWorld(); @@ -239,12 +256,20 @@ FShotgunServerSideRewindResult ULagCompensationComponent::ShotgunConfirmHit(cons ConfirmHitResult, TraceStart, TraceEnd, - ECC_Visibility + ECC_HitBox ); ABlasterCharacter* BlasterCharacter = Cast(ConfirmHitResult.GetActor()); if (BlasterCharacter) { + if (ConfirmHitResult.Component.IsValid()) + { + UBoxComponent* Box = Cast(ConfirmHitResult.Component); + if (Box) + { + DrawDebugBox(GetWorld(), Box->GetComponentLocation(), Box->GetScaledBoxExtent(), FQuat(Box->GetComponentRotation()), FColor::Red, false, 8.f); + } + } if (ShotgunResult.Headshots.Contains(BlasterCharacter)) { ShotgunResult.Headshots[BlasterCharacter]++; @@ -265,7 +290,7 @@ FShotgunServerSideRewindResult ULagCompensationComponent::ShotgunConfirmHit(cons if (HitBoxPair.Value != nullptr) { HitBoxPair.Value->SetCollisionEnabled(ECollisionEnabled::QueryOnly); - HitBoxPair.Value->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block); + HitBoxPair.Value->SetCollisionResponseToChannel(ECC_HitBox, ECR_Block); } } UBoxComponent* HeadBox = Frame.Character->HitCollisionBoxes[FName("head")]; @@ -283,12 +308,20 @@ FShotgunServerSideRewindResult ULagCompensationComponent::ShotgunConfirmHit(cons ConfirmHitResult, TraceStart, TraceEnd, - ECC_Visibility + ECC_HitBox ); ABlasterCharacter* BlasterCharacter = Cast(ConfirmHitResult.GetActor()); if (BlasterCharacter) { + if (ConfirmHitResult.Component.IsValid()) + { + UBoxComponent* Box = Cast(ConfirmHitResult.Component); + if (Box) + { + DrawDebugBox(GetWorld(), Box->GetComponentLocation(), Box->GetScaledBoxExtent(), FQuat(Box->GetComponentRotation()), FColor::Blue, false, 8.f); + } + } if (ShotgunResult.BodyShots.Contains(BlasterCharacter)) { ShotgunResult.BodyShots[BlasterCharacter]++;