13 #include "DomainRandomizationDNNPCH.h"
14 #include "DRUtils.generated.h"
16 DECLARE_LOG_CATEGORY_EXTERN(LogNVDRUtils, Log, All)
18 USTRUCT(BlueprintType)
24 FRandomRotationData();
27 FRotator GetRandomRotation()
const;
30 FRotator GetRandomRotationRelative(
const FRotator& BaseRotation)
const;
32 bool ShouldRandomized()
const
34 return bRandomizeRotationInACone || bRandomizePitch || bRandomizeRoll || bRandomizeYaw;
39 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
40 bool bRandomizeRotationInACone;
43 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeRotationInACone))
44 float RandomConeHalfAngle;
46 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
50 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizePitch))
51 FFloatInterval PitchRange;
53 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
57 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeRoll))
58 FFloatInterval RollRange;
60 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
64 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeYaw))
65 FFloatInterval YawRange;
68 USTRUCT(BlueprintType)
73 FRandomLocationData();
76 FVector GetRandomLocation()
const;
79 FVector GetRandomLocationRelative(
const FVector& BaseLocation)
const;
82 FVector GetRandomLocationInLocalSpace(
const FTransform& ObjectTransform)
const;
84 bool ShouldRandomized()
const
86 return bRandomizeXAxis || bRandomizeYAxis || bRandomizeZAxis;
91 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
95 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeXAxis))
96 FFloatInterval XAxisRange;
99 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
100 bool bRandomizeYAxis;
103 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeYAxis))
104 FFloatInterval YAxisRange;
107 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
108 bool bRandomizeZAxis;
111 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeZAxis))
112 FFloatInterval ZAxisRange;
115 USTRUCT(BlueprintType)
121 FRandomScale3DData();
124 FVector GetRandomScale3D()
const;
126 bool ShouldRandomized()
const
128 return bUniformScale || bRandomizeXAxis || bRandomizeYAxis || bRandomizeZAxis;
135 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
138 UPROPERTY(EditAnywhere, meta = (EditCondition = bUniformScale))
139 FFloatInterval UniformScaleRange;
142 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
143 bool bRandomizeXAxis;
147 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeXAxis))
148 FFloatInterval XAxisRange;
151 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
152 bool bRandomizeYAxis;
156 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeYAxis))
157 FFloatInterval YAxisRange;
160 UPROPERTY(EditAnywhere, meta = (PinHiddenByDefault, InlineEditConditionToggle))
161 bool bRandomizeZAxis;
165 UPROPERTY(EditAnywhere, meta = (EditCondition = bRandomizeZAxis))
166 FFloatInterval ZAxisRange;
170 enum class ERandomColorType : uint8
172 RandomizeAllColor = 0,
173 RandomizeBetweenTwoColors,
174 RandomizeAroundAColor,
175 RandomColorType_MAX UMETA(Hidden)
178 USTRUCT(BlueprintType)
186 #if WITH_EDITORONLY_DATA
187 void PostEditChangeProperty(
struct FPropertyChangedEvent& PropertyChangedEvent);
188 #endif //WITH_EDITORONLY_DATA
190 FLinearColor GetRandomColor()
const;
192 static FLinearColor GetRandomAnyColor();
193 static FLinearColor GetRandomColorInRange(
const FLinearColor& Color1,
const FLinearColor& Color2,
const bool& bRandomizeInHSV);
194 static FLinearColor GetRandomColorAround(
const FLinearColor& BaseColor,
const float& HueDelta,
const float& SaturationDelta,
const float& ValueDelta);
197 UPROPERTY(BlueprintReadWrite, EditAnywhere)
198 ERandomColorType RandomizationType;
200 UPROPERTY(EditAnywhere, Category = Randomization, meta = (PinHiddenByDefault, InlineEditConditionToggle))
201 bool bRandomizeBetweenTwoColors;
203 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bRandomizeBetweenTwoColors"))
204 FLinearColor FirstColor;
206 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bRandomizeBetweenTwoColors"))
207 FLinearColor SecondColor;
210 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bRandomizeBetweenTwoColors"))
211 bool bRandomizeInHSV;
213 UPROPERTY(EditAnywhere, Category = Randomization, meta = (PinHiddenByDefault, InlineEditConditionToggle))
214 bool bRandomizeAroundAColor;
216 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bRandomizeAroundAColor"))
217 FLinearColor MainColor;
219 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bRandomizeAroundAColor"))
222 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bRandomizeAroundAColor"))
223 float MaxSaturationChange;
225 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bRandomizeAroundAColor"))
226 float MaxValueChange;
230 enum class EMaterialSelectionType : uint8
233 ModifyAllMaterials = 0,
236 ModifyMaterialsInIndexesList,
239 ModifyMaterialInSlotNamesList,
241 MaterialSelectionType_MAX UMETA(Hidden)
245 USTRUCT(BlueprintType)
251 FRandomMaterialSelection();
253 #if WITH_EDITORONLY_DATA
254 void PostEditChangeProperty(
struct FPropertyChangedEvent& PropertyChangedEvent);
255 #endif //WITH_EDITORONLY_DATA
258 TArray<int32> GetAffectMaterialIndexes(
const class UMeshComponent* MeshComp)
const;
262 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization)
263 EMaterialSelectionType MaterialSelectionType;
265 UPROPERTY(EditAnywhere, Category = Randomization, meta = (PinHiddenByDefault, InlineEditConditionToggle))
266 bool bSelectMaterialByIndexes;
268 UPROPERTY(EditAnywhere, Category = Randomization, meta = (PinHiddenByDefault, InlineEditConditionToggle))
269 bool bSelectMaterialBySlotNames;
272 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bSelectMaterialByIndexes"))
273 TArray<int32> MaterialIndexes;
276 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Randomization, meta = (EditCondition =
"bSelectMaterialBySlotNames"))
277 TArray<FName> MaterialSlotNames;
280 USTRUCT(BlueprintType)
286 static float RandGaussian(
const float mean,
const float variance);
287 static FVector2D RandGaussian2D(
const float mean,
const float variance);
295 extern UMeshComponent* GetFirstValidMeshComponent(AActor* OwnerActor);
298 extern TArray<UMeshComponent*> GetValidChildMeshComponents(AActor* OwnerActor);
302 USTRUCT(BlueprintType)
308 FRandomAssetStreamer();
309 FRandomAssetStreamer(
const FRandomAssetStreamer& OtherStreamer);
310 ~FRandomAssetStreamer();
312 FRandomAssetStreamer& operator= (
const FRandomAssetStreamer& OtherStreamer);
314 void Init(
const TArray<FDirectoryPath>& InAssetDirectories, UClass* InAssetClass);
317 bool HasAssets()
const;
318 FSoftObjectPath GetNextAssetReference();
320 template <
typename AssetClassType>
321 AssetClassType* GetNextAsset()
323 FSoftObjectPath NextAssetRef = GetNextAssetReference();
324 return (NextAssetRef.IsValid()
325 ? Cast<AssetClassType>(NextAssetRef.ResolveObject())
329 bool IsLoadingAssets()
const;
332 void LoadNextBatch(
bool bAsyncLoad =
true);
333 void OnAssetBatchLoaded();
337 struct FRandomAssetStreamerCallback
340 FRandomAssetStreamer* AssetStreamer;
346 AssetStreamer->OnAssetBatchLoaded();
354 TArray<FDirectoryPath> AssetDirectories;
358 UClass* ManagedAssetClass;
362 TArray<FSoftObjectPath> AllAssetReferences;
366 TArray<FSoftObjectPath> LoadedAssetReferences;
370 TArray<FSoftObjectPath> LoadingAssetReferences;
373 int32 LastLoadedAssetIndex;
376 int32 LastUsedAssetIndex;
379 int32 UnusedAssetCount;
381 FStreamableManager AssetStreamer;
383 TSharedPtr<FStreamableHandle> StreamableHandlePtr;
384 TSharedPtr<FRandomAssetStreamerCallback> StreamerCallbackPtr;
389 enum class EAffectedMaterialOwnerComponentType : uint8
391 OnlyAffectMeshComponents = 0,
392 OnlyAffectDecalComponents,
393 AffectBothMeshAndDecalComponents,
394 AffectedMaterialOwnerComponentType_MAX UMETA(Hidden)