From f17072a34351a41ce85301ee661d60a5a903cb34 Mon Sep 17 00:00:00 2001 From: Michael Delva Date: Wed, 12 Feb 2025 18:13:57 +0100 Subject: [PATCH] Various fixes on the camera modifier to update the Z of the camera when jumping --- .../Modifiers/GBFCameraModifierJumpZ.cpp | 32 ++++++++----------- .../Camera/Modifiers/GBFCameraModifierJumpZ.h | 1 - 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/Source/GameBaseFramework/Private/Camera/Modifiers/GBFCameraModifierJumpZ.cpp b/Source/GameBaseFramework/Private/Camera/Modifiers/GBFCameraModifierJumpZ.cpp index b410b493..836e87e9 100644 --- a/Source/GameBaseFramework/Private/Camera/Modifiers/GBFCameraModifierJumpZ.cpp +++ b/Source/GameBaseFramework/Private/Camera/Modifiers/GBFCameraModifierJumpZ.cpp @@ -3,8 +3,6 @@ #include #include #include -#include - UGBFCameraModifierJumpZ::UGBFCameraModifierJumpZ() : LandingTransitionTime( 0.5f ), LandOnSameHeightCheckTolerance( 1.0f ), @@ -17,8 +15,7 @@ UGBFCameraModifierJumpZ::UGBFCameraModifierJumpZ() : CurrentCameraZPosition( 0.0f ), LerpStartCameraZPosition( 0.0f ), LerpEndCameraZPosition( 0.0f ), - LandingTransitionRemainingTime( 0.0f ), - bShouldInterpolateWhenJumping( false ) + LandingTransitionRemainingTime( 0.0f ) { } @@ -64,29 +61,19 @@ void UGBFCameraModifierJumpZ::ModifyCamera( float delta_time, FVector view_locat { if ( cmc->MovementMode == MOVE_Walking ) { - bShouldInterpolateWhenJumping = false; CurrentState = EState::Landing; LandingTransitionRemainingTime = LandingTransitionTime; - if ( FMath::IsNearlyEqual( CurrentCharacterZPosition, LastGroundedCharacterZPosition, LandOnSameHeightCheckTolerance ) ) - { - LerpStartCameraZPosition = LastGroundedCameraZPosition; - } - else - { - LerpStartCameraZPosition = LastGroundedCameraZPosition; - } + LerpStartCameraZPosition = LastGroundedCameraZPosition; } if ( character->GetVelocity().Z <= 0.0f && CurrentCharacterZPosition < LastGroundedCharacterZPosition - DistanceFromLastGroundedPositionToResetModifier ) { CurrentState = EState::WaitingForJump; - bShouldInterpolateWhenJumping = false; return; } - const auto offset = bShouldInterpolateWhenJumping ? DeltaLastGroundedCharacterToCameraZ : 0.0f; - new_view_location.Z = FMath::FInterpTo( new_view_location.Z, LastGroundedCameraZPosition + offset, delta_time, 2.0f ); + new_view_location.Z = LastGroundedCameraZPosition; } break; case EState::Landing: @@ -95,8 +82,7 @@ void UGBFCameraModifierJumpZ::ModifyCamera( float delta_time, FVector view_locat { CurrentState = EState::Jumping; LastGroundedCharacterZPosition = CurrentCharacterZPosition; - LastGroundedCameraZPosition = view_location.Z; - bShouldInterpolateWhenJumping = true; + LastGroundedCameraZPosition = CurrentCameraZPosition; } else { @@ -109,7 +95,15 @@ void UGBFCameraModifierJumpZ::ModifyCamera( float delta_time, FVector view_locat } else { - LerpEndCameraZPosition = view_location.Z; + if ( FMath::Abs( CurrentCharacterZPosition - LastGroundedCharacterZPosition ) >= DistanceFromLastGroundedPositionToResetModifier ) + { + LerpEndCameraZPosition = view_location.Z; + } + else + { + LerpEndCameraZPosition = LastGroundedCameraZPosition; + } + new_view_location.Z = FMath::Lerp( LerpStartCameraZPosition, LerpEndCameraZPosition, 1.0f - ( LandingTransitionRemainingTime / LandingTransitionTime ) ); } } diff --git a/Source/GameBaseFramework/Public/Camera/Modifiers/GBFCameraModifierJumpZ.h b/Source/GameBaseFramework/Public/Camera/Modifiers/GBFCameraModifierJumpZ.h index 722e2b96..ec726ada 100644 --- a/Source/GameBaseFramework/Public/Camera/Modifiers/GBFCameraModifierJumpZ.h +++ b/Source/GameBaseFramework/Public/Camera/Modifiers/GBFCameraModifierJumpZ.h @@ -52,5 +52,4 @@ class GAMEBASEFRAMEWORK_API UGBFCameraModifierJumpZ final : public UGBFCameraMod float LerpStartCameraZPosition; float LerpEndCameraZPosition; float LandingTransitionRemainingTime; - bool bShouldInterpolateWhenJumping; };