38 UFUNCTION(BlueprintCallable, Category=
"Procedural Building")
39 UHierarchicalInstancedStaticMeshComponent* GetHISMComp(
const UStaticMesh* SM);
41 UFUNCTION(BlueprintCallable, CallInEditor, Category=
"Procedural Building")
42 void ConvertOldBP_ToNativeCodeObject(
AActor* BP_Building);
44 UFUNCTION(BlueprintCallable, CallInEditor, Category=
"Procedural Building")
45 void HideAllChildren();
47 UFUNCTION(BlueprintCallable, Category=
"Procedural Building|Conversion")
48 void SetBaseParameters(
49 const TSet<int>& InDoorsIndexPosition,
50 const TArray<bool>& InUseWallMesh,
55 bool InUseFullBlocks);
57 UFUNCTION(BlueprintCallable, Category=
"Procedural Building|Conversion")
58 void SetVisibilityParameters(
59 const TArray<bool>& InSideVisibility,
60 const TArray<bool>& InCornerVisibility,
61 bool InRoofVisibility);
63 UFUNCTION(BlueprintCallable, Category=
"Procedural Building|Conversion")
65 const TArray<UStaticMesh*>& InBaseMeshes,
66 const TArray<TSubclassOf<AActor>>& InBaseBPs,
67 const TArray<UStaticMesh*>& InCornerBaseMeshes,
68 const TArray<TSubclassOf<AActor>>& InCornerBaseBPs,
69 const TArray<UStaticMesh*>& InDoorMeshes,
70 const TArray<TSubclassOf<AActor>>& InDoorBPs);
72 UFUNCTION(BlueprintCallable, Category=
"Procedural Building|Conversion")
74 const TArray<UStaticMesh*>& InBodyMeshes,
75 const TArray<TSubclassOf<AActor>>& InBodyBPs,
76 const TArray<UStaticMesh*>& InCornerBodyMeshes,
77 const TArray<TSubclassOf<AActor>>& InCornerBodyBPs,
78 const TArray<UStaticMesh*>& InWallMeshes,
79 const TArray<TSubclassOf<AActor>>& InWallBPs);
81 UFUNCTION(BlueprintCallable, Category=
"Procedural Building|Conversion")
83 const TArray<UStaticMesh*>& InTopMeshes,
84 const TArray<TSubclassOf<AActor>>& InTopBPs,
85 const TArray<UStaticMesh*>& InCornerTopMeshes,
86 const TArray<TSubclassOf<AActor>>& InCornerTopBPs,
87 const TArray<UStaticMesh*>& InRoofMeshes,
88 const TArray<TSubclassOf<AActor>>& InRoofBPs);
92 UFUNCTION(BlueprintCallable, CallInEditor, Category=
"Procedural Building")
93 void CreateBuilding();
95 UFUNCTION(BlueprintCallable, CallInEditor, Category=
"Procedural Building")
98 UFUNCTION(BlueprintCallable, CallInEditor, Category=
"Procedural Building")
103 UPROPERTY(BlueprintReadOnly, EditAnywhere, Category=
"Procedural Building|Debug")
104 TMap<FString, TObjectPtr<UHierarchicalInstancedStaticMeshComponent>> HISMComps;
107 UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="Procedural
Building|Debug")
108 TArray<TObjectPtr<UChildActorComponent>> ChildActorComps;
110 UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="Procedural
Building")
111 TObjectPtr<UStaticMeshComponent> RootSMComp =
nullptr;
118 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters", meta=(ToolTip="Index to indicate where the door is placed"))
119 TSet<
int> DoorsIndexPosition;
122 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters", meta=(ToolTip="True to use wall-mesh instead of body-mesh"))
123 TArray<
bool> UseWallMesh;
126 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters", meta=(ClampMin="0", UIMin="0", ToolTip="Number of floors for the building, base and roof not included"))
130 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters")
134 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters")
138 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters")
139 bool Corners = false;
142 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters")
143 bool UseFullBlocks = false;
150 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters|Visibility")
151 TArray<
bool> SideVisibility;
154 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters|Visibility")
155 TArray<
bool> CornerVisibility;
158 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Base Parameters|Visibility")
159 bool RoofVisibility = true;
171 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Base")
172 TArray<UStaticMesh*> BaseMeshes;
175 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Base")
179 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Base")
180 TArray<UStaticMesh*> DoorMeshes;
183 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Base")
187 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Base")
188 TArray<UStaticMesh*> CornerBaseMeshes;
191 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Base")
192 TArray<TSubclassOf<
AActor>> CornerBaseBPs;
199 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Body")
200 TArray<UStaticMesh*> BodyMeshes;
203 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Body")
207 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Body")
208 TArray<UStaticMesh*> WallMeshes;
211 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Body")
215 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Body")
216 TArray<UStaticMesh*> CornerBodyMeshes;
219 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Body")
220 TArray<TSubclassOf<
AActor>> CornerBodyBPs;
227 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Top")
228 TArray<UStaticMesh*> TopMeshes;
231 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Top")
235 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Top")
236 TArray<UStaticMesh*> CornerTopMeshes;
239 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Top")
240 TArray<TSubclassOf<
AActor>> CornerTopBPs;
243 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Top")
244 TArray<UStaticMesh*> RoofMeshes;
247 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="Procedural
Building|Meshes|Top")
254 void CreateFloor(const
FloorMeshCollection& MeshCollection,
bool IncludeDoors,
bool IncludeWalls);
261 const TSet<
int>& AuxiliarPositions,
264 bool CornerVisbility);
266 void CalculateSidesLength();
270 TSet<
int> CalculateDoorsIndexInSide(
int StartIndex,
int Length);
273 TSet<
int> GenerateWallsIndexPositions(
int Length);
276 void CalculateSideVisibilities(
int SideIndex,
bool& MainVisibility,
bool& CornerVisbility);
279 void ChooseGeometryToSpawn(
280 const TArray<UStaticMesh*>& InMeshes,
281 const TArray<TSubclassOf<
AActor>>& InMainBPs,
282 UStaticMesh** OutMesh,
283 TSubclassOf<
AActor>* OutBP);
287 const UStaticMesh* SelectedMesh,
288 const TSubclassOf<
AActor> SelectedBP,
290 FBox& OutSelectedMeshBounds);
293 void AddMeshToBuilding(const UStaticMesh* SM);
296 FVector GetMeshSize(const UStaticMesh* SM);
298 void UpdateTransformPositionToNextChunk(const FVector& Box);
300 void UpdateTransformPositionToNextSide(const FBox& Box);
304 TArray<
int> SidesLength;
307 FTransform CurrentTransform = FTransform::Identity;
309 FBox LastSelectedMeshBounds;