Agrarsense
Walker.cpp
Go to the documentation of this file.
1// Copyright (c) 2023 FrostBit Software Lab at the Lapland University of Applied Sciences
2//
3// This work is licensed under the terms of the MIT license.
4// For a copy, see <https://opensource.org/licenses/MIT>.
5
6#include "Walker.h"
7
8#include "NavigationSystem.h"
9#include "Kismet/KismetMathLibrary.h"
10#include "AIController.h"
11#include "Navigation/PathFollowingComponent.h"
15
16#ifdef WITH_EDITOR
17#include "DrawDebugHelpers.h"
18#endif
19
21{
22 PrimaryActorTick.bCanEverTick = false;
23 InteractableName = NSLOCTEXT("Agrarsense", "WalkerInteractableName", "Walker");
24}
25
27{
28 Super::BeginPlay();
29
31 {
33 Params.SaveTransformDataToDisk = false;
34 Params.OwningActor = this;
35
36 FString TransformSensorID = ActorID + "/transform";
37 TransformSensor = USensorFactory::SpawnTransformSensor(GetActorTransform(), Params, TransformSensorID, "transform", true, this);
38 }
39}
40
41void AWalker::EndPlay(const EEndPlayReason::Type EndPlayReason)
42{
43 Super::EndPlay(EndPlayReason);
44
45 if (TransformSensor)
46 {
47 TransformSensor->Destroy();
48 }
49}
50
52{
55 SetIgnoreInput(true);
57}
58
60{
62 {
64 SetIgnoreInput(false);
66 }
67}
68
69void AWalker::SetIgnoreInput(bool IgnoreInput)
70{
71 WalkerIsPaused = IgnoreInput;
72
73 AAIController* AIControllerPtr = Cast<AAIController>(GetController());
74 if (AIControllerPtr)
75 {
76 AIControllerPtr->SetIgnoreMoveInput(WalkerIsPaused);
77 }
78}
79
81{
82 WalkerParameters = InParameters;
83}
84
85FString AWalker::ExportToJsonFile(const FString& FileName)
86{
87 return USimulatorJsonExporter::ExportWalkerToJSON(FileName, this);
88}
89
91{
92#ifdef WITH_EDITOR
94 {
95 return;
96 }
97
98 TArray<FTransform>& Transforms = WalkerParameters.Points;
99
100 // Draw lines between the points
101 for (int32 i = 0; i < Transforms.Num() - 1; ++i)
102 {
103 const FVector Start = Transforms[i].GetLocation();
104 const FVector End = Transforms[i + 1].GetLocation();
105 DrawDebugLine(GetWorld(), Start, End, FColor::Green, false, LifeTime, 0, 5);
106 }
107#endif
108}
void SetWalkerParameters(const FWalkerParameters &InParameters)
Definition: Walker.cpp:80
FWalkerParameters PreviousParameters
Definition: Walker.h:180
bool WalkerIsPaused
Definition: Walker.h:175
void DebugDrawLinesBetweenPoints(float LifeTime=10.0f)
Definition: Walker.cpp:90
FWalkerParameters WalkerParameters
Definition: Walker.h:178
virtual void SetIgnoreInput(bool IgnoreInput)
Definition: Walker.cpp:69
ATransformSensor * TransformSensor
Definition: Walker.h:158
FString ActorID
Definition: Walker.h:170
virtual void ResumeWalker()
Definition: Walker.cpp:59
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
Definition: Walker.cpp:41
virtual void PauseWalker()
Definition: Walker.cpp:51
virtual void BeginPlay() override
Definition: Walker.cpp:26
void ChangeWalkerParameters(const FWalkerParameters &newParameters)
Definition: Walker.h:57
AWalker()
Definition: Walker.cpp:20
FText InteractableName
Definition: Walker.h:155
FString ExportToJsonFile(const FString &FileName)
Definition: Walker.cpp:85
static ATransformSensor * SpawnTransformSensor(const FTransform &transform, FTransformSensorParameters Parameters, const FString sensorIdentifier, const FString sensorName, bool SimulateSensor=true, AActor *Parent=nullptr)
static FString ExportWalkerToJSON(const FString &FileName, AWalker *Walker)
EWalkerAction WalkerAction
TArray< FTransform > Points