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 {
32 FString TransformSensorID = ActorID + "/transform";
33
34 FSensorSpawnParameters SpawnParams;
35 SpawnParams.Transform = GetActorTransform();
36 SpawnParams.SensorIdentifier = TransformSensorID;
37 SpawnParams.SensorName = "transform";
38 SpawnParams.SimulateSensor = true;
39 SpawnParams.Parent = this;
40
42 Params.SaveTransformDataToDisk = false;
43 Params.OwningActor = this;
44
46 }
47}
48
49void AWalker::EndPlay(const EEndPlayReason::Type EndPlayReason)
50{
51 Super::EndPlay(EndPlayReason);
52
53 if (TransformSensor)
54 {
55 TransformSensor->Destroy();
56 }
57}
58
60{
63 SetIgnoreInput(true);
65}
66
68{
70 {
72 SetIgnoreInput(false);
74 }
75}
76
77void AWalker::SetIgnoreInput(bool IgnoreInput)
78{
79 WalkerIsPaused = IgnoreInput;
80
81 AAIController* AIControllerPtr = Cast<AAIController>(GetController());
82 if (AIControllerPtr)
83 {
84 AIControllerPtr->SetIgnoreMoveInput(WalkerIsPaused);
85 }
86}
87
89{
90 WalkerParameters = InParameters;
91}
92
93FString AWalker::ExportToJsonFile(const FString& FileName)
94{
95 return USimulatorJsonExporter::ExportWalkerToJSON(FileName, this);
96}
97
99{
100#ifdef WITH_EDITOR
102 {
103 return;
104 }
105
106 TArray<FTransform>& Transforms = WalkerParameters.Points;
107
108 // Draw lines between the points
109 for (int32 i = 0; i < Transforms.Num() - 1; ++i)
110 {
111 const FVector Start = Transforms[i].GetLocation();
112 const FVector End = Transforms[i + 1].GetLocation();
113 DrawDebugLine(GetWorld(), Start, End, FColor::Green, false, LifeTime, 0, 5);
114 }
115#endif
116}
void SetWalkerParameters(const FWalkerParameters &InParameters)
Definition: Walker.cpp:88
FWalkerParameters PreviousParameters
Definition: Walker.h:180
bool WalkerIsPaused
Definition: Walker.h:175
void DebugDrawLinesBetweenPoints(float LifeTime=10.0f)
Definition: Walker.cpp:98
FWalkerParameters WalkerParameters
Definition: Walker.h:178
virtual void SetIgnoreInput(bool IgnoreInput)
Definition: Walker.cpp:77
ATransformSensor * TransformSensor
Definition: Walker.h:158
FString ActorID
Definition: Walker.h:170
virtual void ResumeWalker()
Definition: Walker.cpp:67
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
Definition: Walker.cpp:49
virtual void PauseWalker()
Definition: Walker.cpp:59
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:93
static ATransformSensor * SpawnTransformSensor(const FSensorSpawnParameters SpawnParameters, FTransformSensorParameters SensorParameters)
static FString ExportWalkerToJSON(const FString &FileName, AWalker *Walker)
EWalkerAction WalkerAction
TArray< FTransform > Points