RoveSoSimulator
Loading...
Searching...
No Matches
RoveSoSimulatorInputManager.h
1#pragma once
2
3#include "UObject/Class.h"
4#include "UObject/ObjectMacros.h"
5#include "Containers/Map.h"
6#include "RoveSoSimulatorInputManager.generated.h"
7
8class UInputAction;
9class UInputMappingContext;
10struct FInputActionInstance;
11class UEnhancedInputComponent;
12class ARoveSoSimulatorPlayerController;
13
14//#region InputActions
15USTRUCT(BlueprintType)
17{
18 GENERATED_BODY()
19
20 // --- INPUT AXES - UNIVERSAL ---
21 UPROPERTY(EditDefaultsOnly, Category="Input - Universal", meta=(Dispatch="Float"))
22 class UInputAction* Translation;
23 UPROPERTY(EditDefaultsOnly, Category="Input - Universal", meta=(Dispatch="Float"))
24 class UInputAction* Rotation;
25 UPROPERTY(EditDefaultsOnly, Category="Input - Universal", meta=(Dispatch="Float"))
26 class UInputAction* Zoom;
27 UPROPERTY(EditDefaultsOnly, Category="Input - Universal", meta=(Dispatch="Cycle"))
28 class UInputAction* ControlModeCycle;
29 UPROPERTY(EditDefaultsOnly, Category="Input - Universal", meta=(Dispatch="Cycle"))
30 class UInputAction* CameraCycle;
31 // --- INPUT ACTIONS - UNIVERSAL ---
32 UPROPERTY(EditDefaultsOnly, Category="Input - Universal", meta=(Dispatch="Void"))
33 class UInputAction* Exit;
34};
35
36USTRUCT(BlueprintType)
38{
39 GENERATED_BODY()
40
41 // --- INPUT AXES - ROVER DRIVE ---
42 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Float"))
43 class UInputAction* LeftThrottle;
44 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Float"))
45 class UInputAction* RightThrottle;
46 // --- INPUT ACTIONS - ROVER DRIVE---
47 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Void"))
48 class UInputAction* SetSpawnPoint;
49 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Void"))
50 class UInputAction* GotoSpawnPoint;
51 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Void"))
52 class UInputAction* ResetSpline;
53 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Void"))
54 class UInputAction* ToggleSpline;
55 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Void"))
56 class UInputAction* TogglePointcloud;
57 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Void"))
58 class UInputAction* ResetRover;
59 UPROPERTY(EditDefaultsOnly, Category="Input - Rover Drive", meta=(Dispatch="Void"))
60 class UInputAction* FlipRover;
61};
62
63USTRUCT(BlueprintType)
65{
66 GENERATED_BODY()
67
68 // --- INPUT AXES - ARM ---
69 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Float"))
70 // X-Axis
71 class UInputAction* J1;
72 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Float"))
73 // Shoulder-bicep
74 class UInputAction* J2;
75 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Float"))
76 // Bicep-forearm
77 class UInputAction* J3;
78 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Float"))
79 // Forearm Roll
80 class UInputAction* J4;
81 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Float"))
82 // Wrist up/down
83 class UInputAction* J5;
84 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Float"))
85 // Gripper Roll
86 class UInputAction* J6;
87 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Float"))
88 // Gripper Open / Close
89 class UInputAction* GripperOpenClose;
90 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Float"))
91 // Solenoid In / Out
92 class UInputAction* SolenoidExtension;
93 // --- INPUT ACTIONS - ARM---
94 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Void"))
95 class UInputAction* LaserOn;
96 UPROPERTY(EditDefaultsOnly, Category="Input - Arm", meta=(Dispatch="Void"))
97 class UInputAction* LaserOff;
98};
99
100USTRUCT(BlueprintType)
102{
103 GENERATED_BODY()
104
105 UPROPERTY(EditDefaultsOnly)
106 FInputActionsUniversal Universal;
107 UPROPERTY(EditDefaultsOnly)
108 FInputActionsRoverDrive RoverDrive;
109 UPROPERTY(EditDefaultsOnly)
111};
112
113USTRUCT(BlueprintType)
115{
116 GENERATED_BODY()
117
118 UPROPERTY(EditDefaultsOnly)
119 UInputMappingContext* Universal;
120 UPROPERTY(EditDefaultsOnly)
121 UInputMappingContext* RoverDrive;
122 UPROPERTY(EditDefaultsOnly)
123 UInputMappingContext* Arm;
124};
125//#endregion
126
127/**
128 * @brief Manager class which collects all input callbacks into one location and allows any piece of code to attach a handler.
129 */
130UCLASS(Abstract, Blueprintable, BlueprintType)
131class URoveSoSimulatorInputManager : public UObject
132{
133 GENERATED_BODY()
134
135public:
136 UFUNCTION()
137 void SetPlayerController(ARoveSoSimulatorPlayerController* newPlayerController) { PlayerController = newPlayerController; }
138 UFUNCTION()
139 void SetupInputBindings(UEnhancedInputComponent* EI);
140 void SetupBindings(UEnhancedInputComponent* EI, const UStruct* structType, void* structData);
141
142 using FVoidCallback = TFunction<void()>;
143 using FBoolCallback = TFunction<void(const bool)>;
144 using FIntCallback = TFunction<void(const int)>;
145 using FFloatCallback = TFunction<void(const float)>;
146 TMap<const UInputAction*, FVoidCallback> VoidDispatch;
147 TMap<const UInputAction*, FBoolCallback> BoolDispatch;
148 TMap<const UInputAction*, FBoolCallback> CycleDispatch; // The passed bool will be true if cycling forward or false if cycling backwards
149 TMap<const UInputAction*, FIntCallback> IntDispatch;
150 TMap<const UInputAction*, FFloatCallback> FloatDispatch;
151
152 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
153 FActions Actions;
154 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
155 FInputMappingContexts Mappings;
156
157private:
158 URoveSoSimulatorInputManager();
159 UPROPERTY()
160 ARoveSoSimulatorPlayerController* PlayerController;
161
162 UFUNCTION()
163 void OnVoidInput(const FInputActionInstance& Instance);
164 UFUNCTION()
165 void OnBoolInput(const FInputActionInstance& Instance);
166 UFUNCTION()
167 void OnCycleInput(const FInputActionInstance& Instance);
168 UFUNCTION()
169 void OnIntInput(const FInputActionInstance& Instance);
170 UFUNCTION()
171 void OnFloatInput(const FInputActionInstance& Instance);
172};
Definition RoveSoSimulatorInputManager.h:102
Definition RoveSoSimulatorInputManager.h:65
Definition RoveSoSimulatorInputManager.h:38
Definition RoveSoSimulatorInputManager.h:17
Definition RoveSoSimulatorInputManager.h:115