From e79570aeae262bc43b669e5e7dc7dd82c02b1633 Mon Sep 17 00:00:00 2001 From: Vyktori Date: Tue, 22 Apr 2025 10:14:20 -0400 Subject: [PATCH] Robot Movement WIP - Robot Movement semi functional for CombinedInput types --- .../Developers/Wdev/Robots/BP_Stretch.uasset | Bin 434945 -> 436521 bytes .../Components/Movement/LRMC_Stretch.cpp | 93 +++++++- .../Movement/LuckyRobotMovementComponent.cpp | 201 +++++++++++++++++- .../Gameplay/Robot/Data/RobotSettings.cpp | 6 +- .../Gameplay/Robot/LuckyRobotPawnBase.cpp | 20 ++ .../Robot/Components/Movement/LRMC_Stretch.h | 5 +- .../Movement/LuckyRobotMovementComponent.h | 25 ++- .../Gameplay/Robot/Data/RobotSettings.h | 3 + .../Gameplay/Robot/LuckyRobotPawnBase.h | 10 +- 9 files changed, 341 insertions(+), 22 deletions(-) diff --git a/Content/Developers/Wdev/Robots/BP_Stretch.uasset b/Content/Developers/Wdev/Robots/BP_Stretch.uasset index 9c18e16e4bc07b7ea363e0a8f3659d950a11543c..d9701222a421da10809a3bb9b3700851983e7df7 100644 GIT binary patch literal 436521 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 Y@LS4DlI3BytOnFLDKasW{Y{_$A7(F|(f|Me literal 434945 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�Zp6AWpH)!OFi!)r7#zg1h7A>!l#Sz9xo@}j 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 diff --git a/Source/LuckyWorldV2/Private/Gameplay/Robot/Components/Movement/LRMC_Stretch.cpp b/Source/LuckyWorldV2/Private/Gameplay/Robot/Components/Movement/LRMC_Stretch.cpp index 9f257305..7d050906 100644 --- a/Source/LuckyWorldV2/Private/Gameplay/Robot/Components/Movement/LRMC_Stretch.cpp +++ b/Source/LuckyWorldV2/Private/Gameplay/Robot/Components/Movement/LRMC_Stretch.cpp @@ -4,6 +4,7 @@ #include "Gameplay/Robot/Components/Movement/LRMC_Stretch.h" #include "Actors/MujocoVolumeActor.h" #include "Gameplay/Robot/LuckyRobotPawnBase.h" +#include "Kismet/KismetMathLibrary.h" void ULRMC_Stretch::PerformMovement(float DeltaTime, const ERobotInputHandlingMethod InputHandlingMethod, const ERobotInputType InputType, const FVector2D& InputValues) @@ -19,58 +20,119 @@ void ULRMC_Stretch::PerformMovement(float DeltaTime, const ERobotInputHandlingMe switch (PreviousInputType) { case ERobotInputType::None: + StopMovement(); break; case ERobotInputType::Move: if (FMath::IsNearlyZero(InputValues.X)) { PreviousInputType = ERobotInputType::None; + StopMovement(); } else { - Move(InputValues.X); + PreviousInputType = ERobotInputType::Move; + Move(DeltaTime, InputValues); } break; case ERobotInputType::Turn: if (FMath::IsNearlyZero(InputValues.Y)) { PreviousInputType = ERobotInputType::None; + StopMovement(); } else { - Turn(InputValues.Y); + PreviousInputType = ERobotInputType::Turn; + Turn(DeltaTime, InputValues.Y); } break; case ERobotInputType::Pathfinding: + if (FMath::IsNearlyZero(InputValues.X)) + { + PreviousInputType = ERobotInputType::None; + } + else + { + PreviousInputType = ERobotInputType::Move; + Move(DeltaTime, InputValues); + } break; } break; case ERobotInputType::Move: { PreviousInputType = ERobotInputType::Move; - Move(InputValues.X); + Move(DeltaTime, InputValues); } break; case ERobotInputType::Turn: { PreviousInputType = ERobotInputType::Turn; - Turn(InputValues.Y); + Turn(DeltaTime, InputValues.Y); } break; case ERobotInputType::Pathfinding: - break; + switch (PathfindingInputType) { + case ERobotInputType::None: + break; + case ERobotInputType::Move: + PreviousInputType = ERobotInputType::Move; + Move(DeltaTime, InputValues); + break; + case ERobotInputType::Turn: + PreviousInputType = ERobotInputType::Turn; + Turn(DeltaTime, InputValues.Y); + break; + case ERobotInputType::Pathfinding: + break; + } } } -void ULRMC_Stretch::Move(const float InValue) const +void ULRMC_Stretch::Move(const float DeltaTime, const FVector2D& InputValues) const { - if (GetMujocoVolumeActor()) + if (GetOwningRobot() && GetMujocoVolumeActor()) { - GetMujocoVolumeActor()->SetActuatorValueByIndex(0, InValue); - GetMujocoVolumeActor()->SetActuatorValueByIndex(1, InValue); + float Input_0 = InputValues.X; + float Input_1 = InputValues.X; + + const float TargetSpeed = GetTargetSpeed(); + + const FVector Forward = GetRobotForwardVector(); + const FVector DirectionToTarget = (PathfindingTargetLocation - GetRobotLocation()).GetSafeNormal(); + const float DirectionDot = FVector::DotProduct(Forward, DirectionToTarget); + + const bool bRight = FVector::DotProduct(DirectionToTarget, GetRobotRightVector()) >= 0.f; + const float DirectionDelta = FMath::Abs(1.f - DirectionDot); + const float DirectionOffset = FMath::Min(DirectionDelta * TargetSpeed * 10.f, TargetSpeed) * 2.f; + UE_LOG(LogTemp, Warning, TEXT("RobotMove :: DirectionOffset (%f)"), DirectionOffset); + + + if (!FMath::IsNearlyZero(DirectionOffset, 0.01f)) + { + if (bRight) + { + Input_1 -= DirectionOffset; + } + else + { + Input_0 -= DirectionOffset; + } + } + + const float TargetSpeedMod = GetTargetSpeedMod() * 0.5f; + + Input_0 = FMath::Min(Input_0, GetTargetSpeed()) * TargetSpeedMod; + Input_1 = FMath::Min(Input_1, GetTargetSpeed()) * TargetSpeedMod; + + UE_LOG(LogTemp, Warning, TEXT("RobotMove Inputs :: Left [%f] :: Right [%f]"), Input_0, Input_1); + + GetMujocoVolumeActor()->SetActuatorValueByIndex(0, Input_0); + GetMujocoVolumeActor()->SetActuatorValueByIndex(1, Input_1); } } -void ULRMC_Stretch::Turn(const float InValue) const +void ULRMC_Stretch::Turn(const float DeltaTime, const float InValue) const { if (GetMujocoVolumeActor()) { @@ -78,4 +140,13 @@ void ULRMC_Stretch::Turn(const float InValue) const GetMujocoVolumeActor()->SetActuatorValueByIndex(0, InValue * -TurnMod); GetMujocoVolumeActor()->SetActuatorValueByIndex(1, InValue * TurnMod); } -} \ No newline at end of file +} + +void ULRMC_Stretch::StopMovement() +{ + if (GetMujocoVolumeActor()) + { + GetMujocoVolumeActor()->SetActuatorValueByIndex(0, 0.f); + GetMujocoVolumeActor()->SetActuatorValueByIndex(1, 0.f); + } +} diff --git a/Source/LuckyWorldV2/Private/Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.cpp b/Source/LuckyWorldV2/Private/Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.cpp index 167997f6..b0cef232 100644 --- a/Source/LuckyWorldV2/Private/Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.cpp +++ b/Source/LuckyWorldV2/Private/Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.cpp @@ -3,6 +3,7 @@ #include "Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.h" #include "Actors/MujocoVolumeActor.h" +#include "Components/SplineComponent.h" #include "Gameplay/Robot/LuckyRobotPawnBase.h" #include "Kismet/KismetMathLibrary.h" @@ -19,13 +20,25 @@ void ULuckyRobotMovementComponent::TickComponent(float DeltaTime, enum ELevelTic if (GetOwningRobot()) { + const FVector CurrentLocation = GetRobotLocation(); + CurrentRobotSpeed = UKismetMathLibrary::SafeDivide(FVector::Distance(CurrentLocation, PreviousLocation), DeltaTime); + + if (IsPathfinding()) + { + HandlePathfindingInputs(DeltaTime); + } + InterpolateSpeedValues(DeltaTime, GetOwningRobot()->GetAccelerationRate(), GetOwningRobot()->GetDecelerationRate()); PerformMovement(DeltaTime, RobotSettings.InputHandlingMethod, GetOwningRobot()->GetCurrentInputType(), CurrentSpeedValues); + + PreviousLocation = CurrentLocation; + + UE_LOG(LogTemp, Warning, TEXT("CurrentRobotSpeed (%f)"), CurrentRobotSpeed); } } void ULuckyRobotMovementComponent::BeginPlay() -{ +{ Super::BeginPlay(); } @@ -39,6 +52,7 @@ void ULuckyRobotMovementComponent::InitializeMovementComponent(ALuckyRobotPawnBa { RobotSettings = GetOwningRobot()->RobotSettings; MujocoVolumeActor = GetOwningRobot()->GetMujocoVolumeActor(); + PreviousLocation = GetRobotLocation(); } SetComponentTickEnabled(true); @@ -85,10 +99,30 @@ FVector ULuckyRobotMovementComponent::GetRobotRightVector() const return FVector::ZeroVector; } +FRobotSplinePath ULuckyRobotMovementComponent::GetNavPath() const +{ + if (GetOwningRobot()) + { + return GetOwningRobot()->GetCurrentNavPath(); + } + + return FRobotSplinePath(); +} + +bool ULuckyRobotMovementComponent::IsPathfinding() const +{ + if (GetOwningRobot()) + { + return GetOwningRobot()->IsPathfinding(); + } + + return false; +} + void ULuckyRobotMovementComponent::PerformMovement(float DeltaTime, const ERobotInputHandlingMethod InputHandlingMethod, const ERobotInputType InputType, const FVector2D& SpeedValues) { //UE_LOG(LogTemp, Warning, TEXT("ULuckyRobotMovementComponent::PerformMovement IS NOT IMPLEMENTED")); - UE_LOG(LogTemp, Warning, TEXT("ULuckyRobotMovementComponent::PerformMovement [ DeltaTime (%f) :: InputHandlingMethod (%s) :: InputType (%s) :: InputValues (%s) ]"), DeltaTime, *UEnum::GetValueAsString(InputHandlingMethod), *UEnum::GetValueAsString(InputType), *SpeedValues.ToString()); + //UE_LOG(LogTemp, Warning, TEXT("ULuckyRobotMovementComponent::PerformMovement [ DeltaTime (%f) :: InputHandlingMethod (%s) :: InputType (%s) :: InputValues (%s) ]"), DeltaTime, *UEnum::GetValueAsString(InputHandlingMethod), *UEnum::GetValueAsString(InputType), *SpeedValues.ToString()); } void ULuckyRobotMovementComponent::InterpolateSpeedValues(const float DeltaTime, const float Acceleration, const float Deceleration) @@ -98,7 +132,9 @@ void ULuckyRobotMovementComponent::InterpolateSpeedValues(const float DeltaTime, FVector2D TargetSpeedValues = GetOwningRobot()->GetMovementInputValues() * GetOwningRobot()->GetTargetSpeed(); const FVector Current = FVector(CurrentSpeedValues.X, CurrentSpeedValues.Y, 0.f); - FVector Target = FVector(TargetSpeedValues.X, TargetSpeedValues.Y, 0.f); + const FVector RawTarget = FVector(TargetSpeedValues.X, TargetSpeedValues.Y, 0.f); + FVector Target = IsPathfinding() ? RawTarget.GetClampedToMaxSize(PathfindingTargetSpeed) : RawTarget; + UE_LOG(LogTemp, Warning, TEXT("PathfindingTargetSpeed (%f)"), PathfindingTargetSpeed); if (RobotSettings.InputHandlingMethod == ERobotInputHandlingMethod::SingleInput) { @@ -124,6 +160,161 @@ void ULuckyRobotMovementComponent::InterpolateSpeedValues(const float DeltaTime, CurrentSpeedValues = FVector2D(MoveRate, TurnRate); - UE_LOG(LogTemp, Warning, TEXT("ULuckyRobotMovementComponent::InterpolateSpeedValues (%s)"), *CurrentSpeedValues.ToString()); + UE_LOG(LogTemp, Warning, TEXT("ULuckyRobotMovementComponent::InterpolatedSpeedValues (%s)"), *CurrentSpeedValues.ToString()); } -} \ No newline at end of file +} + +void ULuckyRobotMovementComponent::HandlePathfindingInputs(const float DeltaTime) +{ + if (GetOwningRobot()) + { + if (USplineComponent* SplineComp = GetNavPath().GetSplinePath()) + { + constexpr float SplineDistanceTolerance = 15.f; + constexpr float SplineDirectionTolerance = 0.95f; + + const bool bSingleInput = GetOwningRobot()->RobotSettings.InputHandlingMethod == ERobotInputHandlingMethod::SingleInput; + const FTransform CurrentTransform = GetOwningRobot()->GetTransform(); + const float SplineDistance = SplineComp->GetDistanceAlongSplineAtLocation(CurrentTransform.GetLocation(), ESplineCoordinateSpace::World); + const FVector SplineLocation = SplineComp->GetWorldLocationAtDistanceAlongSpline(SplineDistance); + const float DistanceToSpline = FVector::Distance(CurrentTransform.GetLocation(), SplineLocation); + PathfindingTargetLocation = bSingleInput ? GetSplineTargetPointLocation(SplineDistance) : GetSplineTargetLocation(SplineDistance); + PathfindingDestination = GetOwningRobot()->GetPathfindingDestination(); + DrawDebugLine(GetWorld(), PathfindingTargetLocation, PathfindingTargetLocation + FVector(0.f, 0.f, 100.f), bSingleInput ? FColor::Purple : FColor::Yellow, false, 0.02f, 0, 3.f); + DrawDebugLine(GetWorld(), CurrentTransform.GetLocation(), CurrentTransform.GetLocation() + GetRobotForwardVector() * 100.f, FColor::Green, false, 0.02f, 0, 3.f); + DrawDebugLine(GetWorld(), CurrentTransform.GetLocation(), CurrentTransform.GetLocation() + GetRobotForwardVector() * -100.f, FColor::Blue, false, 0.02f, 0, 3.f); + + if (FVector::Distance(CurrentTransform.GetLocation(), PathfindingDestination) <= PathfindingDestinationTolerance) + { + GetOwningRobot()->PathfindingComplete(true); + return; + } + + PathfindingTargetSpeed = GetSplineSpeed(SplineDistance); + + if (DistanceToSpline > SplineDistanceTolerance) + { + if (bSingleInput) + { + const FVector DirectionToSpline = (SplineLocation - CurrentTransform.GetLocation()).GetSafeNormal(); + const float DirectionDot = FVector::DotProduct(GetRobotForwardVector(), DirectionToSpline); + if (DirectionDot >= SplineDirectionTolerance) + { + GetOwningRobot()->SetPathfindingInputValues(FVector2D(1.f, 0.f)); + PathfindingInputType = ERobotInputType::Move; + } + else + { + const bool bTurnRight = FVector::DotProduct(GetRobotRightVector(), DirectionToSpline) >= 0.f; + const float DirectionDiscrepancy = (2.f - DirectionDot + 1.f) * bTurnRight ? -1.f : 1.f; + const float TurnRate = UKismetMathLibrary::FInterpTo(1.f, DirectionDiscrepancy, DeltaTime, 1.f); + GetOwningRobot()->SetPathfindingInputValues(FVector2D(0.f, TurnRate)); + PathfindingInputType = ERobotInputType::Turn; + } + } + } + else + { + const FVector DirectionToPath = (PathfindingTargetLocation - CurrentTransform.GetLocation()).GetSafeNormal(); + const float DirectionDot = FVector::DotProduct(GetRobotForwardVector(), DirectionToPath); + UE_LOG(LogTemp, Warning, TEXT("DirectionDot :: %f"), DirectionDot); + const float TurnRate = FVector::DotProduct(GetRobotRightVector(), DirectionToPath) >= 0.f ? -1.f : 1.f; + if (DirectionDot >= SplineDirectionTolerance) + { + const float AdjustedTurnRate = TurnRate * (1.f - DirectionDot); + GetOwningRobot()->SetPathfindingInputValues(FVector2D(1.f, AdjustedTurnRate)); + PathfindingInputType = ERobotInputType::Move; + } + else + { + if (bSingleInput) + { + GetOwningRobot()->SetPathfindingInputValues(FVector2D(0.f, TurnRate)); + PathfindingInputType = ERobotInputType::Turn; + } + else + { + const float AdjustedTurnRate = TurnRate * (1.f - DirectionDot); + GetOwningRobot()->SetPathfindingInputValues(FVector2D(GetOwningRobot()->GetMovementInputValues().X, AdjustedTurnRate)); + PathfindingInputType = ERobotInputType::Move; + } + } + } + } + } +} + +FVector ULuckyRobotMovementComponent::GetSplineTargetLocation(const float CurrentDistance) const +{ + if (GetNavPath().GetSplinePath()) + { + const float ForwardPathCheck = FMath::Clamp(GetTargetSpeed() * 0.5f, 20.f, 50.f); + const float SplineCheckDistance = CurrentDistance + ForwardPathCheck; + if (SplineCheckDistance >= GetNavPath().GetSplinePath()->GetSplineLength()) + { + return PathfindingDestination; + } + + return GetNavPath().GetSplinePath()->GetWorldLocationAtDistanceAlongSpline(CurrentDistance + ForwardPathCheck); + } + + return GetRobotLocation(); +} + +FVector ULuckyRobotMovementComponent::GetSplineTargetPointLocation(const float CurrentDistance) const +{ + if (GetNavPath().GetSplinePath()) + { + const int32 SplinePoints = GetNavPath().GetSplinePath()->GetNumberOfSplinePoints(); + float NextSplinePointDistance = GetNavPath().GetSplinePath()->GetSplineLength(); + int32 NextSplinePointIndex = 0; + for (int32 x = 0; x < SplinePoints; x++) + { + const float PointDistance = GetNavPath().GetSplinePath()->GetDistanceAlongSplineAtSplinePoint(x); + if (PointDistance > CurrentDistance && PointDistance < NextSplinePointDistance) + { + NextSplinePointDistance = PointDistance; + NextSplinePointIndex = x; + } + } + + return GetNavPath().GetSplinePath()->GetWorldLocationAtSplinePoint(NextSplinePointIndex); + } + + return GetRobotLocation(); +} + +float ULuckyRobotMovementComponent::GetSplineSpeed(const float CurrentDistance) const +{ + if (GetOwningRobot()) + { + return GetOwningRobot()->GetCurrentNavPath().SplinePathSpeedModifier.EditorCurveData.Eval(CurrentDistance); + } + + return 5.f; +} + +float ULuckyRobotMovementComponent::GetSpeedLimit() const +{ + if (GetOwningRobot()) + { + return GetOwningRobot()->RobotSettings.SpeedLimit; + } + + return 5.f; +} + +void ULuckyRobotMovementComponent::StopMovement() +{ + // +} + +float ULuckyRobotMovementComponent::GetTargetSpeed() const +{ + return IsPathfinding() ? PathfindingTargetSpeed : GetSpeedLimit(); +} + +float ULuckyRobotMovementComponent::GetTargetSpeedMod() const +{ + return UKismetMathLibrary::SafeDivide(GetTargetSpeed(), CurrentRobotSpeed); +} diff --git a/Source/LuckyWorldV2/Private/Gameplay/Robot/Data/RobotSettings.cpp b/Source/LuckyWorldV2/Private/Gameplay/Robot/Data/RobotSettings.cpp index ca155dce..6b326472 100644 --- a/Source/LuckyWorldV2/Private/Gameplay/Robot/Data/RobotSettings.cpp +++ b/Source/LuckyWorldV2/Private/Gameplay/Robot/Data/RobotSettings.cpp @@ -171,14 +171,16 @@ void FRobotSplinePath::RegenerateSplinePathValues() const float PathEndMod = DistanceToPathEnd <= SplinePredictionDistance ? FMath::Max(UKismetMathLibrary::SafeDivide(DistanceToPathEnd, SplinePredictionDistance), 0.f) : 1.f; const FVector IntervalTangent = GetSplinePath()->GetTangentAtDistanceAlongSpline(SplineDistance, ESplineCoordinateSpace::Local); const float IntervalCurve = FMath::Min(IntervalTangent.Length(), TangentClamp); - const float IntervalAlpha = UKismetMathLibrary::SafeDivide(IntervalCurve, TangentClamp); + const float IntervalAlpha = FMath::Max(1.f - UKismetMathLibrary::SafeDivide(IntervalCurve, TangentClamp), 0.f); const float SpeedMod = (MaxSpeedMod - IntervalAlpha) * PathEndMod; - const float ClampedSpeed = FMath::Min(SpeedLimit * SpeedMod, SpeedLimit * MinSpeedMod); + const float ClampedSpeed = FMath::Max(SpeedLimit * SpeedMod, SpeedLimit * MinSpeedMod); SplinePathSpeedModifier.EditorCurveData.AddKey(SplineDistance, ClampedSpeed); } } } + PathfindingDestination = GetSplinePath()->GetWorldLocationAtDistanceAlongSpline(SplineLength); + // begin debug const int32 SplineIntervals = UKismetMathLibrary::SafeDivide(SplineLength, SplinePrecision); diff --git a/Source/LuckyWorldV2/Private/Gameplay/Robot/LuckyRobotPawnBase.cpp b/Source/LuckyWorldV2/Private/Gameplay/Robot/LuckyRobotPawnBase.cpp index 2c9f66de..262655ca 100644 --- a/Source/LuckyWorldV2/Private/Gameplay/Robot/LuckyRobotPawnBase.cpp +++ b/Source/LuckyWorldV2/Private/Gameplay/Robot/LuckyRobotPawnBase.cpp @@ -91,6 +91,8 @@ void ALuckyRobotPawnBase::Tick(float DeltaTime) // { // IncrementCurrentTask(); // } + + UE_LOG(LogTemp, Warning, TEXT("ROBOT TARGET SPEED %f"), TargetSpeed); } void ALuckyRobotPawnBase::NotifyControllerChanged() @@ -259,6 +261,20 @@ void ALuckyRobotPawnBase::TogglePathfinding(const FInputActionValue& Value) CurrentInputType = IsPathfinding() ? ERobotInputType::None : ERobotInputType::Pathfinding; } +void ALuckyRobotPawnBase::BeginPathfinding() +{ + PreviousInputType = ERobotInputType::None; + CurrentInputType = ERobotInputType::Pathfinding; +} + +void ALuckyRobotPawnBase::PathfindingComplete(const bool bSuccess) +{ + CurrentInputType = ERobotInputType::None; + PreviousInputType = ERobotInputType::Pathfinding; + + UE_LOG(LogTemp, Warning, TEXT("ALuckyRobotPawnBase::PathfindingComplete")); +} + void ALuckyRobotPawnBase::RemoveMujocoVolumeActor() { if (GetMujocoVolumeActor()) @@ -294,6 +310,10 @@ void ALuckyRobotPawnBase::SetRobotNavPath(const FRobotNavPath& InRobotNavPath) void ALuckyRobotPawnBase::Internal_RobotNavPathChanged(const FRobotSplinePath& NewNavPath) { + // testing + BeginPathfinding(); + // + RobotNavPathChanged(NewNavPath); } diff --git a/Source/LuckyWorldV2/Public/Gameplay/Robot/Components/Movement/LRMC_Stretch.h b/Source/LuckyWorldV2/Public/Gameplay/Robot/Components/Movement/LRMC_Stretch.h index 648cf4cc..7cbbff70 100644 --- a/Source/LuckyWorldV2/Public/Gameplay/Robot/Components/Movement/LRMC_Stretch.h +++ b/Source/LuckyWorldV2/Public/Gameplay/Robot/Components/Movement/LRMC_Stretch.h @@ -18,6 +18,7 @@ public: protected: ERobotInputType PreviousInputType = ERobotInputType::None; - void Move(const float InValue) const; - void Turn(const float InValue) const; + void Move(const float DeltaTime, const FVector2D& InputValues) const; + void Turn(const float DeltaTime, const float InValue) const; + virtual void StopMovement() override; }; diff --git a/Source/LuckyWorldV2/Public/Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.h b/Source/LuckyWorldV2/Public/Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.h index 08943bfa..13a04458 100644 --- a/Source/LuckyWorldV2/Public/Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.h +++ b/Source/LuckyWorldV2/Public/Gameplay/Robot/Components/Movement/LuckyRobotMovementComponent.h @@ -40,6 +40,21 @@ public: UFUNCTION(BlueprintPure, Category = "Robot Values") FVector GetRobotRightVector() const; + UFUNCTION(BlueprintPure, Category = "Robot Values") + FRobotSplinePath GetNavPath() const; + + bool IsPathfinding() const; + void HandlePathfindingInputs(const float DeltaTime); + + FVector GetSplineTargetLocation(const float CurrentDistance) const; + FVector GetSplineTargetPointLocation(const float CurrentDistance) const; + float GetSplineSpeed(const float CurrentDistance) const; + float GetSpeedLimit() const; + + virtual void StopMovement(); + float GetTargetSpeed() const; + float GetTargetSpeedMod() const; + protected: virtual void BeginPlay() override; @@ -48,8 +63,16 @@ protected: FRobotSettings RobotSettings = FRobotSettings(); - //virtual void EvaluateRobotPath(); + ERobotInputType PathfindingInputType = ERobotInputType::None; + virtual void InterpolateSpeedValues(const float DeltaTime, const float Acceleration, const float Deceleration); FVector2D CurrentSpeedValues = FVector2D::ZeroVector; + float PathfindingTargetSpeed = 0.f; + float PathfindingDestinationTolerance = 10.f; + FVector PathfindingTargetLocation = FVector::ZeroVector; + FVector PathfindingDestination = FVector::ZeroVector; + + float CurrentRobotSpeed = 0.f; + FVector PreviousLocation = FVector::ZeroVector; }; \ No newline at end of file diff --git a/Source/LuckyWorldV2/Public/Gameplay/Robot/Data/RobotSettings.h b/Source/LuckyWorldV2/Public/Gameplay/Robot/Data/RobotSettings.h index afe89433..02419421 100644 --- a/Source/LuckyWorldV2/Public/Gameplay/Robot/Data/RobotSettings.h +++ b/Source/LuckyWorldV2/Public/Gameplay/Robot/Data/RobotSettings.h @@ -84,6 +84,9 @@ struct FRobotSplinePath UPROPERTY(BlueprintReadOnly, Category = "Robot Spline Path") FRuntimeFloatCurve SplinePathSpeedModifier = FRuntimeFloatCurve(); + UPROPERTY(BlueprintReadOnly, Category = "Robot Spline Path") + FVector PathfindingDestination = FVector::ZeroVector; + ALuckyRobotPawnBase* GetRobot() const { return Robot.Get(); } void GenerateSplinePath(ALuckyRobotPawnBase* InRobot, const FRobotNavPath& InNavPath); void RegenerateSplinePathValues(); diff --git a/Source/LuckyWorldV2/Public/Gameplay/Robot/LuckyRobotPawnBase.h b/Source/LuckyWorldV2/Public/Gameplay/Robot/LuckyRobotPawnBase.h index 7985459d..8e754896 100644 --- a/Source/LuckyWorldV2/Public/Gameplay/Robot/LuckyRobotPawnBase.h +++ b/Source/LuckyWorldV2/Public/Gameplay/Robot/LuckyRobotPawnBase.h @@ -158,6 +158,7 @@ public: void Look(const FInputActionValue& Value); void TogglePathfinding(const FInputActionValue& Value); + void BeginPathfinding(); UFUNCTION(BlueprintPure, Category = "Lucky Robot Pawn") ERobotInputType GetCurrentInputType() const { return CurrentInputType; } @@ -186,12 +187,19 @@ public: UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input") float TurnModifier = 1.f; + UFUNCTION(BlueprintCallable, Category = "Input") + void SetPathfindingInputValues(const FVector2D InValues = FVector2D::ZeroVector) { CachedMovementInputValues = InValues; } + + bool IsPathfinding() const { return CurrentInputType == ERobotInputType::Pathfinding; } + FVector GetPathfindingDestination() const { return CurrentSplinePath.PathfindingDestination; } + + void PathfindingComplete(const bool bSuccess = false); + protected: virtual void BeginPlay() override; bool HasMovementValue() const; bool HasTurnValue() const; - bool IsPathfinding() const { return CurrentInputType == ERobotInputType::Pathfinding; } void RemoveMujocoVolumeActor();