RapyutaSimulationPlugins
RRGameState.h
Go to the documentation of this file.
1 
13 #pragma once
14 
15 
16 
17 // UE
18 
19 #include "CoreMinimal.h"
20 
21 #include "GameFramework/Character.h"
22 
23 #include "GameFramework/GameState.h"
24 
25 
26 
27 // RapyutaSimulationPlugins
28 
29 #include "Core/RRActorCommon.h"
30 
31 #include "Core/RRConversionUtils.h"
32 
33 
34 
35 #include "RRGameState.generated.h"
36 
37 
38 
39 class ARRGameMode;
40 
41 class URRGameInstance;
42 
43 class ARRMeshActor;
44 
45 
46 
64 class RAPYUTASIMULATIONPLUGINS_API ARRGameState : public AGameState
65 
66 {
67 
68 public:
69 
70  ARRGameState();
71 
72 
73 
84  virtual void StartSim();
85 
86 
87 
88 
93  TObjectPtr<ARRGameMode> GameMode = nullptr;
94 
95 
96 
97 
102  int8 SCENE_INSTANCES_NUM = 1;
103 
104 
105 
106 
111  int32 OPERATION_BATCHES_NUM = 5;
112 
113 
114 
115 
120  float SCENE_INSTANCES_DISTANCE_INTERVAL = 5000.f;
121 
122 
127  int8 LastSceneInstanceId = URRActorCommon::DEFAULT_SCENE_INSTANCE_ID;
128 
129 
130 
131 
136  TArray<URRSceneInstance*> SceneInstanceList;
137 
138 
139 
154  template<typename TScenceInstanceClass>
155 
156  TScenceInstanceClass* GetSceneInstance(int8 InSceneInstanceId) const
157 
158  {
159 
160  TScenceInstanceClass* instance = SceneInstanceList.IsValidIndex(InSceneInstanceId)
161 
162  ? Cast<TScenceInstanceClass>(SceneInstanceList[InSceneInstanceId])
163 
164  : nullptr;
165 
166  ensure(instance);
167 
168  return instance;
169 
170  }
171 
172 
173 
188  bool HasSceneInstance(int8 InSceneInstanceId)
189 
190  {
191 
192  return SceneInstanceList.IsValidIndex(InSceneInstanceId) && SceneInstanceList[InSceneInstanceId];
193 
194  }
195 
196 
197 
198  virtual bool HasSceneInstanceListBeenCreated(bool bIsLogged = false) const;
199 
200  virtual bool HasInitialized(bool bIsLogged = false) const;
201 
202 
203 
204  virtual bool HaveAllSceneInstancesCompleted() const;
205 
206 
207 
208  // ENVIRONMENT
209 
210 
215  AActor* MainEnvironment = nullptr;
216 
217 
218 
219 
224  AActor* MainFloor = nullptr;
225 
226 
227 
228 
233  AActor* MainWall = nullptr;
234 
235 
236 
237 
242  TArray<ALight*> MainLights;
243 
244 
245 
246  // SIM OUTPUTS
247 
248 
253  FString SIM_OUTPUTS_BASE_FOLDER_NAME = TEXT("OutputData");
254 
255 
256 
270 
271  {
272 
273  return FPaths::IsRelative(SIM_OUTPUTS_BASE_FOLDER_NAME)
274 
275  ? FPaths::ConvertRelativePathToFull(FPaths::ProjectSavedDir() / SIM_OUTPUTS_BASE_FOLDER_NAME)
276 
277  : SIM_OUTPUTS_BASE_FOLDER_NAME;
278 
279  }
280 
281 
282 
283  // ENTITIES
284 
285  /* The vertex normals
286 
287  * INI in ROS
288 
289  7 -- 4 Z
290 
291  /| /| |
292 
293  2-1--5 6 | Y
294 
295  |/ |/ |/
296 
297  0 -- 3 -----X
298 
299 
300 
301  * UE
302 
303  4 -- 7 Z
304 
305  |\ |\ Y |
306 
307  6 5--1 2 \ |
308 
309  \| \| \|
310 
311  3 -- 0 X----
312 
313  */
314 
315  // NOTE: THESE ARE CONFIGURED BY USERS IN ROS RIGHT-HANDED COORD FOR CONVENIENCE, THUS THE INDEX ORDERING FOLLOWS CLOCK-WISE
316 
317 
322  TArray<FVector> ENTITY_BOUNDING_BOX_VERTEX_NORMALS = {
323 
324  {0.f, 0.f, 0.f}, //[0]
325 
326  {0.f, 1.f, 0.f}, //[1]
327 
328  {0.f, 0.f, 1.f}, //[2]
329 
330  {1.f, 0.f, 0.f}, //[3]
331 
332  {1.f, 1.f, 1.f}, //[4]
333 
334  {1.f, 0.f, 1.f}, //[5]
335 
336  {1.f, 1.f, 0.f}, //[6]
337 
338  {0.f, 1.f, 1.f}, //[7]
339 
340  };
341 
342 
343 
344  // UE LEFT-HANDED COUNTER-CLOCKWISE ORDERING
345 
346  FORCEINLINE FVector GetEntityBBVertexNormal(int8 InVertexIdx)
347 
348  {
349 
350  static const TArray<FVector> bbVertexNormals = {ENTITY_BOUNDING_BOX_VERTEX_NORMALS[3],
351 
352  ENTITY_BOUNDING_BOX_VERTEX_NORMALS[6],
353 
354  ENTITY_BOUNDING_BOX_VERTEX_NORMALS[5],
355 
356  ENTITY_BOUNDING_BOX_VERTEX_NORMALS[0],
357 
358  ENTITY_BOUNDING_BOX_VERTEX_NORMALS[7],
359 
360  ENTITY_BOUNDING_BOX_VERTEX_NORMALS[2],
361 
362  ENTITY_BOUNDING_BOX_VERTEX_NORMALS[1],
363 
364  ENTITY_BOUNDING_BOX_VERTEX_NORMALS[4]};
365 
366  return bbVertexNormals[InVertexIdx];
367 
368  }
369 
370 
371 
372  void SetAllEntitiesActivated(bool bIsActivated);
373 
374  ARRMeshActor* FindEntityByModel(const FString& InEntityModelName, bool bToActivate, bool bToTakeAway);
375 
376  void AddEntity(ARRMeshActor* InEntity);
377 
378 
379 
380  template<typename T>
381 
382  void AddEntities(const TArray<T*> InEntityList)
383 
384  {
385 
386  for (const auto& entity : InEntityList)
387 
388  {
389 
390  AddEntity(entity);
391 
392  }
393 
394  }
395 
396 
397 
399 
400  virtual void MoveEnvironmentToSceneInstance(int8 InSceneInstanceId);
401 
402 
403 
404 protected:
405 
420  virtual void CreateSceneInstance(int8 InSceneInstanceId);
421 
422 
423 
440  virtual void InitializeSim(int8 InSceneInstanceId);
441 
442 
443 
454  virtual void StartSubSim(int8 InSceneInstanceId);
455 
456 
457 
470  virtual void CreateServiceObjects(int8 InSceneInstanceId);
471 
472 
473 
475 
476  virtual void SetupEnvironment();
477 
478 
479 
481 
482  virtual void FetchEnvStaticActors();
483 
484 
485 
486  virtual void FinalizeSim();
487 
488  virtual void PrintSimConfig() const;
489 
490 
491 
498  virtual void BeginPlay() override;
499 
500 
501 
510  virtual void BeginSubPlay();
511 
512 
513 
528  virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
529 
530 
531 
532 protected:
533 
534 
539  TSubclassOf<URRSceneInstance> SceneInstanceClass;
540 
541 
542 
544 
545 
550  TArray<ARRMeshActor*> AllDynamicMeshEntities;
551 
552 
553 
554 private:
555 
557 
558 
563  TArray<AActor*> OrphanEntities;
564 
565 };
566 
ARRGameMode
GameMode with specific setting, asset loading and #SceneDirector. Parent class, ARRROS2GameMode,...
Definition: RRGameMode.h:79
URRActorCommon::DEFAULT_SCENE_INSTANCE_ID
static constexpr int8 DEFAULT_SCENE_INSTANCE_ID
Definition: RRActorCommon.h:1149
ARRGameState::GetSimOutputsBaseFolderPath
FString GetSimOutputsBaseFolderPath() const
Get the Sim Outputs Base Folder Path object.
Definition: RRGameState.h:269
ARRGameState::AddEntities
void AddEntities(const TArray< T * > InEntityList)
Definition: RRGameState.h:382
URRGameInstance
This is a globally accessible instanced UObject that can store run-time data to be commonly accessed ...
Definition: RRGameInstance.h:54
ARRGameState
Game state which handles multiple URRSceneInstance which spit game in scenes for data gen,...
Definition: RRGameState.h:64
ARRGameState::AllDynamicMeshEntities
TArray< ARRMeshActor * > AllDynamicMeshEntities
Pool of all entities having been spawned.
Definition: RRGameState.h:550
ARRMeshActor
Mesh actor.ARRBaseActor with list of #UMeshComponent.
Definition: RRMeshActor.h:58
ARRGameState::OrphanEntities
TArray< AActor * > OrphanEntities
To avoid early GC, this exists only to keep ones temporarily taken away from [AllDynamicMeshEntities]...
Definition: RRGameState.h:563
ARRGameState::SceneInstanceClass
TSubclassOf< URRSceneInstance > SceneInstanceClass
Definition: RRGameState.h:539
ARRGameState::GetEntityBBVertexNormal
FORCEINLINE FVector GetEntityBBVertexNormal(int8 InVertexIdx)
Definition: RRGameState.h:346
RRActorCommon.h
Asset utils.
RRConversionUtils.h
Convertions between ROS and UE, i.e.
ARRGameState::MainLights
TArray< ALight * > MainLights
Definition: RRGameState.h:242
ARRGameState::HasSceneInstance
bool HasSceneInstance(int8 InSceneInstanceId)
Check SceneInstance with given Id is exists.
Definition: RRGameState.h:188
ARRGameState::GetSceneInstance
TScenceInstanceClass * GetSceneInstance(int8 InSceneInstanceId) const
Get the Scene Instance object.
Definition: RRGameState.h:156
ARRGameState::SceneInstanceList
TArray< URRSceneInstance * > SceneInstanceList
Definition: RRGameState.h:136