-
Notifications
You must be signed in to change notification settings - Fork 0
/
CustomPlayerCameraManager.cpp
50 lines (37 loc) · 1.91 KB
/
CustomPlayerCameraManager.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Fill out your copyright notice in the Description page of Project Settings.
#include "MainCharacter/CustomPlayerCameraManager.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
#include "MainCharacter/MainCharacter.h"
ACustomPlayerCameraManager::ACustomPlayerCameraManager()
{
}
// Used to fix the camera point of view smoothly when crouching/uncrouching
void ACustomPlayerCameraManager::UpdateViewTarget(FTViewTarget& OutVT, float DeltaTime)
{
Super::UpdateViewTarget(OutVT, DeltaTime);
if (TObjectPtr<AMainCharacter> MainCharacter = Cast<AMainCharacter>(GetOwningPlayerController()->GetPawn()))
{
TObjectPtr<UCustomCharacterMovementComponent> CustomCharacterMovementComponent = MainCharacter->GetCustomCharacterMovementComponent();
float CHH = CustomCharacterMovementComponent->Crouch_HalfHeight;
float SCHH = MainCharacter->GetClass()->GetDefaultObject<ACharacter>()->GetCapsuleComponent()->GetScaledCapsuleHalfHeight();
FVector TargetCrouchOffset = FVector(0,0,CHH - SCHH);
FVector Offset = FMath::Lerp(FVector::ZeroVector, TargetCrouchOffset, FMath::Clamp(CrouchBlendTime / CustomCharacterMovementComponent->Crouch_BlendSpeed, 0.0f, 1.0f));
if (CustomCharacterMovementComponent->IsCrouching())
{
CrouchBlendTime = FMath::Clamp(CrouchBlendTime + DeltaTime, 0.0f, CustomCharacterMovementComponent->Crouch_BlendSpeed);
Offset -= TargetCrouchOffset;
}
else
{
CrouchBlendTime = FMath::Clamp(CrouchBlendTime - DeltaTime, 0.0f, CustomCharacterMovementComponent->Crouch_BlendSpeed);
}
if (CustomCharacterMovementComponent->IsMovingOnGround())
{
OutVT.POV.Location += Offset;
}
// TO HANDLE THE ARMS OF THE PLAYER
const FVector ArmsOffset = MainCharacter->GetFirstPersonCameraComponent()->GetComponentTransform().InverseTransformPosition(OutVT.POV.Location);
MainCharacter->GetMesh1P()->SetRelativeLocation(FVector(-15.f, 0.f, -165.f) + ArmsOffset);
}
}