Agrarsense
Walker.h
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#pragma once
7
8#include "CoreMinimal.h"
9#include "GameFramework/Character.h"
10
15#include "WalkerParameters.h"
16
17#include "Walker.generated.h"
18
20
21DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWalkerEventDelegate_ParametersChanged, FWalkerParameters, NewWalkerParameters);
22
23/*
24* Base class for all Walkers.
25* Actual movement logic is defined in BP_WalkerBase blueprint
26* and individual Walkers blueprints like BP_Reindeer.
27*/
28UCLASS()
29class AGRARSENSE_API AWalker : public ACharacter, public IInteractable, public IDestroyable, public IActorInformation
30{
31 GENERATED_BODY()
32
33public:
34
35 AWalker();
36
37 UFUNCTION(BlueprintCallable)
38 virtual void PauseWalker();
39
40 UFUNCTION(BlueprintCallable)
41 virtual void ResumeWalker();
42
43 UFUNCTION(BlueprintCallable)
44 virtual void SetIgnoreInput(bool IgnoreInput);
45
46 void SetWalkerParameters(const FWalkerParameters& InParameters);
47
53 UFUNCTION(BlueprintCallable)
54 FString ExportToJsonFile(const FString& FileName);
55
56 UFUNCTION(BlueprintCallable)
57 void ChangeWalkerParameters(const FWalkerParameters& newParameters)
58 {
59 SetWalkerParameters(newParameters);
60 OnWalkerParametersChanged.Broadcast(WalkerParameters);
61 }
62
63 UFUNCTION(BlueprintCallable)
64 void DebugDrawLinesBetweenPoints(float LifeTime = 10.0f);
65
66 UFUNCTION(BlueprintCallable)
67 virtual EWalkerType GetWalkerType() const
68 {
69 return WalkerParameters.WalkerType;
70 }
71
72 UFUNCTION(BlueprintPure)
73 FWalkerParameters GetWalkerParameters() const
74 {
75 return WalkerParameters;
76 }
77
78 UFUNCTION(BlueprintCallable)
79 FTransform GetStartTransform() const
80 {
81 if (!WalkerParameters.Points.IsEmpty())
82 {
83 return WalkerParameters.Points[0];
84 }
85
86 return FTransform::Identity;
87 }
88
89 UFUNCTION(BlueprintCallable)
90 FTransform GetEndTransform() const
91 {
92 if (!WalkerParameters.Points.IsEmpty())
93 {
94 return WalkerParameters.Points.Last();
95 }
96
97 return FTransform::Identity;
98 }
99
100 UFUNCTION(BlueprintPure)
101 bool IsWalkerPaused() const
102 {
103 return WalkerIsPaused;
104 }
105
106 virtual FText GetInteractableName_Implementation() const override
107 {
108 return InteractableName;
109 }
110
111 virtual FTransform GetInteractableWorldTransform_Implementation() const override
112 {
113 return GetActorTransform();
114 }
115
116 virtual FString GetActorID_Implementation() const override
117 {
118 return ActorID;
119 }
120
121 virtual FString GetActorName_Implementation() const override
122 {
123 return ActorName;
124 }
125
126 virtual FString GetActorInformation_Implementation() const override
127 {
128 const FString Walker = UEnumUtilities::ConvertWalkerTypeToString(WalkerParameters.WalkerType);
129 const FString ID = IActorInformation::Execute_GetActorID(this);
130 const FString Name = IActorInformation::Execute_GetActorName(this);
131 const FTransform VehicleTransform = GetActorTransform();
132 const FVector Location = VehicleTransform.GetLocation();
133 const FRotator Rotation = VehicleTransform.Rotator();
134 FString Information = FString::Printf(TEXT("Walker: %s, Name: %s, ID: %s, Location: %s, Rotation: %s"), *Walker, *Name, *ID, *Location.ToString(), *Rotation.ToString());
135
136 return Information;
137 }
138
139 virtual void SetActorName_Implementation(const FString& NewActorName) override
140 {
141 ActorName = NewActorName;
142 }
143
144 virtual void SetActorIDAndName_Implementation(const FString& NewActorName, const FString& NewID) override
145 {
146 ActorName = NewActorName;
147 ActorID = NewID;
148 SetAndValidateActorIDAndName(ActorName, ActorID, TWeakObjectPtr<AActor>(this));
149 }
150
151 UPROPERTY(BlueprintAssignable)
152 FWalkerEventDelegate_ParametersChanged OnWalkerParametersChanged;
153
154 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interactable")
155 FText InteractableName;
156
157 UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
158 ATransformSensor* TransformSensor = nullptr;
159
160protected:
161
162 virtual void BeginPlay() override;
163
164 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
165
166 UPROPERTY(VisibleAnywhere)
167 FString ActorName;
168
169 UPROPERTY(VisibleAnywhere)
170 FString ActorID;
171
172private:
173
174 UPROPERTY(VisibleAnywhere, Category = "Walker")
175 bool WalkerIsPaused = true;
176
177 UPROPERTY(VisibleAnywhere, Category = "Walker")
178 FWalkerParameters WalkerParameters;
179
180 FWalkerParameters PreviousParameters;
181
182};
EWalkerType
Definition: WalkerType.h:16
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWalkerEventDelegate_ParametersChanged, FWalkerParameters, NewWalkerParameters)
FString ExportToJsonFile(const FString &FileName)
Definition: Sensor.cpp:147
virtual void BeginPlay() override
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
Definition: Walker.h:30
virtual FString GetActorID_Implementation() const override
Definition: Walker.h:116
virtual FTransform GetInteractableWorldTransform_Implementation() const override
Definition: Walker.h:111
virtual void SetActorName_Implementation(const FString &NewActorName) override
Definition: Walker.h:139
virtual FString GetActorName_Implementation() const override
Definition: Walker.h:121
virtual void SetActorIDAndName_Implementation(const FString &NewActorName, const FString &NewID) override
Definition: Walker.h:144
virtual FString GetActorInformation_Implementation() const override
Definition: Walker.h:126
virtual FText GetInteractableName_Implementation() const override
Definition: Walker.h:106
static void SetAndValidateActorIDAndName(FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)
static FString ConvertWalkerTypeToString(EWalkerType WalkerType)
TArray< FTransform > Points