diff --git a/Content/Blueprints/Character/BP_BlasterCharacter.uasset b/Content/Blueprints/Character/BP_BlasterCharacter.uasset index ea0efec..ad2d241 100644 Binary files a/Content/Blueprints/Character/BP_BlasterCharacter.uasset and b/Content/Blueprints/Character/BP_BlasterCharacter.uasset differ diff --git a/Source/Blaster/Character/BlasterCharacter.cpp b/Source/Blaster/Character/BlasterCharacter.cpp index 2151281..44c6945 100644 --- a/Source/Blaster/Character/BlasterCharacter.cpp +++ b/Source/Blaster/Character/BlasterCharacter.cpp @@ -11,6 +11,7 @@ #include "Blaster/PlayerState/BlasterPlayerState.h" #include "Blaster/Weapon/Weapon.h" #include "Camera/CameraComponent.h" +#include "Components/BoxComponent.h" #include "Components/CapsuleComponent.h" #include "Components/WidgetComponent.h" #include "GameFramework/CharacterMovementComponent.h" @@ -63,6 +64,80 @@ ABlasterCharacter::ABlasterCharacter() AttachedGrenade = CreateDefaultSubobject(TEXT("Attached Grenade")); AttachedGrenade->SetupAttachment(GetMesh(), FName("RightHandThrowableSocket")); AttachedGrenade->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + // Hit boxes for server-side rewind + + head = CreateDefaultSubobject(TEXT("head")); + head->SetupAttachment(GetMesh(), FName("head")); + head->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + pelvis = CreateDefaultSubobject(TEXT("pelvis")); + pelvis->SetupAttachment(GetMesh(), FName("pelvis")); + pelvis->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + spine_02 = CreateDefaultSubobject(TEXT("spine_02")); + spine_02->SetupAttachment(GetMesh(), FName("spine_02")); + spine_02->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + spine_03 = CreateDefaultSubobject(TEXT("spine_03")); + spine_03->SetupAttachment(GetMesh(), FName("spine_03")); + spine_03->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + upperarm_l = CreateDefaultSubobject(TEXT("upperarm_l")); + upperarm_l->SetupAttachment(GetMesh(), FName("upperarm_l")); + upperarm_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + upperarm_r = CreateDefaultSubobject(TEXT("upperarm_r")); + upperarm_r->SetupAttachment(GetMesh(), FName("upperarm_r")); + upperarm_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + lowerarm_l = CreateDefaultSubobject(TEXT("lowerarm_l")); + lowerarm_l->SetupAttachment(GetMesh(), FName("lowerarm_l")); + lowerarm_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + lowerarm_r = CreateDefaultSubobject(TEXT("lowerarm_r")); + lowerarm_r->SetupAttachment(GetMesh(), FName("lowerarm_r")); + lowerarm_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + hand_l = CreateDefaultSubobject(TEXT("hand_l")); + hand_l->SetupAttachment(GetMesh(), FName("hand_l")); + hand_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + hand_r = CreateDefaultSubobject(TEXT("hand_r")); + hand_r->SetupAttachment(GetMesh(), FName("hand_r")); + hand_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + backpack = CreateDefaultSubobject(TEXT("backpack")); + backpack->SetupAttachment(GetMesh(), FName("backpack")); + backpack->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + blanket = CreateDefaultSubobject(TEXT("blanket")); + blanket->SetupAttachment(GetMesh(), FName("backpack")); + blanket->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + thigh_l = CreateDefaultSubobject(TEXT("thigh_l")); + thigh_l->SetupAttachment(GetMesh(), FName("thigh_l")); + thigh_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + thigh_r = CreateDefaultSubobject(TEXT("thigh_r")); + thigh_r->SetupAttachment(GetMesh(), FName("thigh_r")); + thigh_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + calf_l = CreateDefaultSubobject(TEXT("calf_l")); + calf_l->SetupAttachment(GetMesh(), FName("calf_l")); + calf_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + calf_r = CreateDefaultSubobject(TEXT("calf_r")); + calf_r->SetupAttachment(GetMesh(), FName("calf_r")); + calf_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + foot_l = CreateDefaultSubobject(TEXT("foot_l")); + foot_l->SetupAttachment(GetMesh(), FName("foot_l")); + foot_l->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + foot_r = CreateDefaultSubobject(TEXT("foot_r")); + foot_r->SetupAttachment(GetMesh(), FName("foot_r")); + foot_r->SetCollisionEnabled(ECollisionEnabled::NoCollision); } void ABlasterCharacter::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const diff --git a/Source/Blaster/Character/BlasterCharacter.h b/Source/Blaster/Character/BlasterCharacter.h index 648dba9..b5baf81 100644 --- a/Source/Blaster/Character/BlasterCharacter.h +++ b/Source/Blaster/Character/BlasterCharacter.h @@ -46,6 +46,62 @@ public: void UpdateHUDAmmo(); void SpawnDefaultWeapon(); + + // Hit boxes used for server-side rewind + + UPROPERTY(EditAnywhere) + class UBoxComponent* head; + + UPROPERTY(EditAnywhere) + UBoxComponent* pelvis; + + UPROPERTY(EditAnywhere) + UBoxComponent* spine_02; + + UPROPERTY(EditAnywhere) + UBoxComponent* spine_03; + + UPROPERTY(EditAnywhere) + UBoxComponent* upperarm_l; + + UPROPERTY(EditAnywhere) + UBoxComponent* upperarm_r; + + UPROPERTY(EditAnywhere) + UBoxComponent* lowerarm_l; + + UPROPERTY(EditAnywhere) + UBoxComponent* lowerarm_r; + + UPROPERTY(EditAnywhere) + UBoxComponent* hand_l; + + UPROPERTY(EditAnywhere) + UBoxComponent* hand_r; + + UPROPERTY(EditAnywhere) + UBoxComponent* backpack; + + UPROPERTY(EditAnywhere) + UBoxComponent* blanket; + + UPROPERTY(EditAnywhere) + UBoxComponent* thigh_l; + + UPROPERTY(EditAnywhere) + UBoxComponent* thigh_r; + + UPROPERTY(EditAnywhere) + UBoxComponent* calf_l; + + UPROPERTY(EditAnywhere) + UBoxComponent* calf_r; + + UPROPERTY(EditAnywhere) + UBoxComponent* foot_l; + + UPROPERTY(EditAnywhere) + UBoxComponent* foot_r; protected: virtual void BeginPlay() override;