DeskSim v2 0.1
Train simulator prototype created for Lokførerskolen
EditorHUD.h
1// Copyright 2022 Thomas Arinesalingam, John Ole Bjerke, Endre Heksum & Henrik Markengbakken Karlsen . All Rights Reserved.
2
3#pragma once
4#include "CoreMinimal.h"
5#include <DeskSimV2/Signals/BasicSignal.h>
6#include "Engine/Texture2D.h"
7#include "TopBar.h"
8#include <DeskSimV2/Editor/EditorController.h>
9#include "EditorWidget.h"
10#include "ObjectWidget.h"
11#include "MainMenuWidget.h"
12#include "ScenarioWidget.h"
13#include "PauseMenu.h"
14#include "settings.h"
15#include "TrainDMI.h"
16#include <DeskSimV2/UI/LoginWidget.h>
18#include <DeskSimV2/SaveGame/SaveManager.h>
19#include "GameFramework/HUD.h"
20#include "EditorHUD.generated.h"
21
22UENUM()
23enum class ECategoryBC
24{ // Content Browser enum
25 Train UMETA(DisplayName = "Train"),
26 Railway UMETA(DisplayName = "Railway"),
27 House UMETA(DisplayName = "House"),
28 Signal UMETA(DisplayName = "Signal"),
29 Other UMETA(DisplayName = "Other"),
30};
31
32UENUM()
33enum class ECategoryMM
34{ // Main Menu enum
35 ATC UMETA(DisplayName = "ATC"),
36 ERTMS UMETA(DisplayName = "ERTMS"),
37 INFRASTRUKTUR UMETA(DisplayName = "INFRASTRUKTUR"),
38 FEIL UMETA(DisplayName = "FEIL"),
39 SKIFTING UMETA(DisplayName = "SKIFTING"),
40 EKSTERN UMETA(DisplayName = "EKSTERN"),
41};
42
43USTRUCT(BlueprintType)
45{
46 GENERATED_BODY();
47
48 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
49 ECategoryBC Category = ECategoryBC::Train;
50 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
51 FString Name;
52 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
53 FString Description;
54 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
55 UTexture2D* Image = nullptr;
56 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
57 TSubclassOf<AActor> ActorReference;
58};
59
60USTRUCT(BlueprintType)
62{
63 GENERATED_BODY();
64
65 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
66 ECategoryMM Category = ECategoryMM::ATC;
67 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
68 FString Name;
69 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
70 FString Description;
71 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
72 FName MapName;
73};
74
75
77{
78 FString Category;
79 FString Name;
80 FString Description;
81 FString Image;
82 TSubclassOf<AActor> ActorReference;
83
84};
85
89UCLASS()
90class DESKSIMV2_API AEditorHUD : public AHUD
91{
92 GENERATED_BODY()
93
94public:
95 AEditorHUD();
96 virtual void DrawHUD() override;
97 virtual void BeginPlay() override;
98 virtual void Tick(float DeltaSeconds) override;
99
100 void SetupEditorWidget();
101 void SetupMainMenuWidget();
102 void SetupLoginMenuWidget();
103 void SetupGameWidget();
104 void SetupPauseMenu();
105
106
107 void CreateAndPopulateBrowserGrid(UEditorWidget* widget);
108 void CreateAndPopulateMainMenu(UMainMenuWidget* widget);
109
110 // The config
111 TArray<FString> ConfigTrain;
112 TArray<FObjects> TrainBrowserContent; // Allocated object information in FObject struct
113
114 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
115 TArray<FCBObjectStruct> CBObjects;
116
117 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EditorHUD")
118 TArray<FMMObjectStruct> MMObjects;
119
120 // User widgets
121
122 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Widgets")
123 TSubclassOf<class UUserWidget> EditorWidgetClass;
124
125 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Widgets")
126 TSubclassOf<class UUserWidget> ObjectWidgetClass;
127
128 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Widgets")
129 TSubclassOf<class UUserWidget> TopBarWidgetClass;
130
131 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Widgets")
132 TSubclassOf<class UUserWidget> MainMenuWidgetClass;
133
134 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Widgets")
135 TSubclassOf<class UUserWidget> LoginMenuWidgetClass;
136
137 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Widgets")
138 TSubclassOf<class UUserWidget> ScenarioWidgetClass;
139
140 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Widgets")
141 TSubclassOf<class UUserWidget> SettingsWidgetClass;
142
143 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Widgets")
144 TSubclassOf<class UUserWidget> TrainDMIWidgetClass;
145
146 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Widgets")
147 TSubclassOf<class UUserWidget> PauseMenuWidgetClass;
148
149 // PlayerControllers
150
151 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Player Controller")
152 TSubclassOf<APlayerController> MainMenuController;
153
154 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Player Controller")
155 TSubclassOf<APlayerController> EditGameController;
156
157 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Player Controller")
158 TSubclassOf<APlayerController> GameController;
159
160 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Player Actor")
161 TSubclassOf<AEditorController> EditorControllerClass;
162
163 // Savemanager
164
165 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Save Manager")
166 ASaveManager* SaveManager;
167
168 // Functions dynamics bound to buttons
169
170 UFUNCTION()
171 void UpdateTrainButtonClick();
172
173 UFUNCTION()
174 void UpdateRailwayButtonClick();
175
176 UFUNCTION()
177 void UpdateHouseButtonClick();
178
179 UFUNCTION()
180 void UpdateSignalButtonClick();
181
182 UFUNCTION()
183 void UpdateOtherButtonClick();
184
185 UFUNCTION()
186 void SaveGame();
187
188 UFUNCTION()
189 void LoadGame();
190
191 UFUNCTION()
192 void SetToolTranslation();
193
194 UFUNCTION()
195 void SetToolRotation();
196
197 UFUNCTION()
198 void DeleteObject();
199
200
201 UFUNCTION()
202 void ChangeMenuMode();
203 UFUNCTION()
204 void OpenSettings();
205
206 // Updating DMI
207 void SetTrainDMI(float Speed);
208 void HideTrainDMI();
209 void ShowTrainDMI();
210
211private:
212 APlayerController* PC;
213
214 AEditorController* EditorController;
215
216 bool bMenuMode = true;
217
218 // WIDGETS
219 UTopBar* TopBarWidget;
220 UEditorWidget* EditorWidget;
221 ULoginWidget* LoginWidget;
222 UMainMenuWidget* MainMenuWidget;
223 TArray<UScenarioWidget*> ScenarioWidgets;
224 TArray<UObjectWidget*> ObjectWidgets;
225 UTrainDMI* TrainDMIWidget;
226 Usettings* SettingsWidget;
227 UPauseMenu* PauseMenuWidget;
228
229 TArray<TSubclassOf<AActor>> ActorSources;
230 TArray<UTexture2D*> ImageSources;
231
232 EToolMode ControllerToolMode;
233
234};
Gameinstance class containing some global info.
Definition: EditorController.h:21
Definition: EditorHUD.h:91
TArray< FString > ConfigTrain
Hardcoded Object code.
Definition: EditorHUD.h:111
Definition: SaveManager.h:11
The content browser widget.
Definition: EditorWidget.h:20
Definition: LoginWidget.h:33
The main menu widget.
Definition: MainMenuWidget.h:16
The Content browser asset holding class.
Definition: ObjectWidget.h:17
Class that represents the pause menu.
Definition: PauseMenu.h:15
The class that is used to display all of the holders for each created scenario.
Definition: ScenarioWidget.h:16
Definition: TopBar.h:16
Definition: TrainDMI.h:16
The settings widget class.
Definition: settings.h:17
Definition: EditorHUD.h:45
Definition: EditorHUD.h:62
Definition: EditorHUD.h:77