fix: Aiming through cover kinda works thank god
This commit is contained in:
parent
a75cc548a7
commit
f3567a115e
Binary file not shown.
Binary file not shown.
|
|
@ -91,7 +91,7 @@ void AExoPlayerCharacter::Tick(float DeltaTime)
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
|
|
||||||
UpdateCameraHeight(DeltaTime);
|
UpdateCameraHeight(DeltaTime);
|
||||||
//ApplyCameraOffset(DeltaTime);
|
ApplyCameraOffsets(DeltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
float AExoPlayerCharacter::GetFootOffset()
|
float AExoPlayerCharacter::GetFootOffset()
|
||||||
|
|
@ -108,15 +108,17 @@ void AExoPlayerCharacter::UpdateCameraHeight(float DeltaTime)
|
||||||
|
|
||||||
const float NewHeight = FMath::Lerp(GetCurrentEyeHeight(), TargetEyeHeight, DeltaTime*5);
|
const float NewHeight = FMath::Lerp(GetCurrentEyeHeight(), TargetEyeHeight, DeltaTime*5);
|
||||||
const FVector CamRelXY = CameraComponent->GetRelativeLocation();
|
const FVector CamRelXY = CameraComponent->GetRelativeLocation();
|
||||||
CameraComponent->SetRelativeLocation(FVector(CamRelXY.X, CamRelXY.Y,
|
EyeHeight = GetFootOffset() + NewHeight;
|
||||||
GetFootOffset() + NewHeight));
|
CameraComponent->SetRelativeLocation(FVector(CamRelXY.X, CamRelXY.Y,EyeHeight));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AExoPlayerCharacter::ApplyCameraOffset(float DeltaTime)
|
void AExoPlayerCharacter::ApplyCameraOffsets(float DeltaTime)
|
||||||
{
|
{
|
||||||
bool HasChanged = false;
|
bool HasChanged = false;
|
||||||
//FVector NewOffset = EyeLocationOffset;
|
//FVector NewOffset = EyeLocationOffset;
|
||||||
|
//FVector NoOffsetCameraPosition = FVector(0, 0, EyeHeight);
|
||||||
//FVector NoOffsetCameraPosition = CameraComponent->GetRelativeLocation() - EyeLocationOffset;
|
//FVector NoOffsetCameraPosition = CameraComponent->GetRelativeLocation() - EyeLocationOffset;
|
||||||
|
//UE_LOG(LogTemp, Log, TEXT("%s"), *NoOffsetCameraPosition.ToString());
|
||||||
|
|
||||||
if (!FVector::PointsAreNear(EyeLocationOffset, TargetEyeLocationOffset, 0.01f))
|
if (!FVector::PointsAreNear(EyeLocationOffset, TargetEyeLocationOffset, 0.01f))
|
||||||
{
|
{
|
||||||
|
|
@ -128,7 +130,7 @@ void AExoPlayerCharacter::ApplyCameraOffset(float DeltaTime)
|
||||||
if (!FMath::IsNearlyEqual(EyeRoll, TargetEyeRoll, 0.01f))
|
if (!FMath::IsNearlyEqual(EyeRoll, TargetEyeRoll, 0.01f))
|
||||||
{
|
{
|
||||||
// Smoothly rotate view
|
// Smoothly rotate view
|
||||||
EyeRoll = FMath::Lerp(EyeRoll, TargetEyeRoll, DeltaTime);
|
EyeRoll = FMath::Lerp(EyeRoll, TargetEyeRoll, DeltaTime*5);
|
||||||
HasChanged = true;
|
HasChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,9 +145,11 @@ void AExoPlayerCharacter::ApplyCameraOffset(float DeltaTime)
|
||||||
//CameraComponent->SetRelativeLocation(NoOffsetCameraPosition + NewOffset);
|
//CameraComponent->SetRelativeLocation(NoOffsetCameraPosition + NewOffset);
|
||||||
//FVector CapsuleRelativeOffset = BaseLocation + EyeLocationOffset;
|
//FVector CapsuleRelativeOffset = BaseLocation + EyeLocationOffset;
|
||||||
//CapsuleRelativeOffset.Z += GetCurrentEyeHeightBase(true);
|
//CapsuleRelativeOffset.Z += GetCurrentEyeHeightBase(true);
|
||||||
CameraComponent->SetRelativeLocation(EyeLocationOffset);
|
const FVector FinalOffset = FVector(EyeLocationOffset.X, EyeLocationOffset.Y,
|
||||||
|
EyeLocationOffset.Z + TargetEyeHeight + GetFootOffset());
|
||||||
|
CameraComponent->SetRelativeLocation(FinalOffset);
|
||||||
|
|
||||||
UE_LOG(LogTemp, Log, TEXT("Camera relative: %s"), *CameraComponent->GetRelativeLocation().ToString());
|
//UE_LOG(LogTemp, Log, TEXT("Camera relative: %s"), *CameraComponent->GetRelativeLocation().ToString());
|
||||||
// Update actual camera rotation (Roll)
|
// Update actual camera rotation (Roll)
|
||||||
FRotator NewRotator = GetController()->GetControlRotation();
|
FRotator NewRotator = GetController()->GetControlRotation();
|
||||||
NewRotator.Roll = EyeRoll;
|
NewRotator.Roll = EyeRoll;
|
||||||
|
|
|
||||||
|
|
@ -370,8 +370,8 @@ float AExoPlayerController::CalculateCoverAimOffset()
|
||||||
return 0.f;
|
return 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Oblicz maksymalną wysokość na którą można wychylić się z nad osłony
|
// Oblicz maksymalną wysokość, na którą można wychylić się znad osłony
|
||||||
MaxCoverAimHeightOffset = PlayerCharacter->GetStandingEyeHeight() * CoverAimStandFactor;
|
MaxCoverAimHeight = PlayerCharacter->GetStandingEyeHeight() * CoverAimStandFactor;
|
||||||
|
|
||||||
FVector ObstacleTraceStart = GetCharacter()->GetActorLocation();
|
FVector ObstacleTraceStart = GetCharacter()->GetActorLocation();
|
||||||
ObstacleTraceStart.Z +=
|
ObstacleTraceStart.Z +=
|
||||||
|
|
@ -421,9 +421,12 @@ float AExoPlayerController::CalculateCoverAimOffset()
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
ObstacleTraceStart = PlayerCharacter->GetPlayerLocationAtFeet();
|
||||||
|
ObstacleTraceStart.Z += PlayerCharacter->CrouchedEyeHeight;
|
||||||
|
ObstacleTraceEnd = ObstacleTraceStart + PlayerCameraManager->GetCameraRotation().Vector() * CoverAimFreeDistance;
|
||||||
|
|
||||||
float SafeCoverAimZOffset = 0.f;
|
float SafeCoverAimZOffset = 0.f;
|
||||||
while (SafeCoverAimZOffset < MaxCoverAimHeightOffset)
|
while (SafeCoverAimZOffset < MaxCoverAimHeight)
|
||||||
{
|
{
|
||||||
ObstacleTraceStart.Z += SafeCoverAimZOffset;
|
ObstacleTraceStart.Z += SafeCoverAimZOffset;
|
||||||
ObstacleTraceEnd.Z += SafeCoverAimZOffset;
|
ObstacleTraceEnd.Z += SafeCoverAimZOffset;
|
||||||
|
|
@ -450,8 +453,9 @@ float AExoPlayerController::CalculateCoverAimOffset()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const float FinalHitHeight = Hit.TraceStart.Z - PlayerCharacter->GetPlayerLocationAtFeet().Z;
|
||||||
// If this is true that means that free space was found
|
// If this is true that means that free space was found
|
||||||
if (SafeCoverAimZOffset <= MaxCoverAimHeightOffset)
|
if (FinalHitHeight <= MaxCoverAimHeight)
|
||||||
{
|
{
|
||||||
//// DEBUG ////
|
//// DEBUG ////
|
||||||
if (bShowCoverSystemDebug)
|
if (bShowCoverSystemDebug)
|
||||||
|
|
@ -460,7 +464,7 @@ float AExoPlayerController::CalculateCoverAimOffset()
|
||||||
}
|
}
|
||||||
//////////////
|
//////////////
|
||||||
|
|
||||||
return SafeCoverAimZOffset;// +
|
return FinalHitHeight - PlayerCharacter->CrouchedEyeHeight;// +
|
||||||
//PlayerCharacter->CrouchedEyeHeight - PlayerCharacter->GetCurrentEyeHeight();
|
//PlayerCharacter->CrouchedEyeHeight - PlayerCharacter->GetCurrentEyeHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -156,7 +156,8 @@ private:
|
||||||
float EyeRoll;
|
float EyeRoll;
|
||||||
|
|
||||||
float TargetEyeHeight;
|
float TargetEyeHeight;
|
||||||
|
float EyeHeight;
|
||||||
|
|
||||||
void UpdateCameraHeight(float DeltaTime);
|
void UpdateCameraHeight(float DeltaTime);
|
||||||
void ApplyCameraOffset(float DeltaTime);
|
void ApplyCameraOffsets(float DeltaTime);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -238,7 +238,7 @@ private:
|
||||||
|
|
||||||
float CoverStandAlpha = 0.0f; // deprecated
|
float CoverStandAlpha = 0.0f; // deprecated
|
||||||
FTimerHandle CoverCheckTimer;
|
FTimerHandle CoverCheckTimer;
|
||||||
float MaxCoverAimHeightOffset;
|
float MaxCoverAimHeight;
|
||||||
float CoverAimHeightOffset;
|
float CoverAimHeightOffset;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user