USTRUCT() struct FMapRow { GENERATED_BODY() UPROPERTY() TArray<int8> Columns; FORCEINLINE int8& operator[] (int32 j) { return Columns[j]; } void SetGridBase(int8 Block, int32 y) { Columns[y] = Block; } void AddNewColumn() { Columns.Add(0); } FMapRow() { } }; USTRUCT() struct FMapLayer { GENERATED_BODY() UPROPERTY() TArray<FMapRow> Rows; FORCEINLINE FMapRow& operator[] (int32 i) { return Rows[i]; } void AddNewRow() { Rows.Add(FMapRow()); } void AddUninitialized(const int32 RowCount, const int32 ColCount) { Clear(); //Add Rows for (int32 v = 0; v < RowCount; v++) { AddNewRow(); } //Add Columns for (int32 v = 0; v < RowCount; v++) { for (int32 b = 0; b < ColCount; b++) { Rows[v].AddNewColumn(); } } } void Clear() { if (Rows.Num() <= 0) return; //~~~~~~~~~~~~~~~ //Destroy any Actors const int32 RowTotal = Rows.Num(); const int32 ColTotal = Rows[0].Columns.Num(); //Empty for (int32 v = 0; v < Rows.Num(); v++) { Rows[v].Columns.Empty(); } Rows.Empty(); } TTuple<int32, int32> NumLayerDimensions() { return TTuple<int32, int32>(Rows.Num(), Rows[0].Columns.Num()); } //default properties FMapLayer() { } FMapLayer(int32 Rows, int32 Cols) { AddUninitialized(Rows, Cols); } }; USTRUCT() struct FMapSector { GENERATED_BODY() UPROPERTY() TArray<FMapLayer> Layers; FORCEINLINE FMapLayer& operator[] (int32 i) { return Layers[i]; } void AddNewLayer() { Layers.Add(FMapLayer()); } void AddUnitialized(int32 LayerCount, int32 RowCount, int32 ColCount) { Clear(); // Add Layers for (int32 l = 0; l < LayerCount; l++) { AddNewLayer(); } // Add Rows for (int32 l = 0; l < LayerCount; l++) { for (int32 r = 0; r < RowCount; r++) { Layers[l].AddNewRow(); } } // Add Rows for (int32 l = 0; l < LayerCount; l++) { for (int32 r = 0; r < RowCount; r++) { for (int32 c = 0; c < ColCount; c++) { Layers[l].Rows[r].AddNewColumn(); } } } } void Clear() { if (Layers.Num() <= 0) return; //~~~~~~~~~~~~~~~ //Destroy any Actors const int32 LayerTotal = Layers.Num(); const int32 RowTotal = Layers[0].Rows.Num(); const int32 ColTotal = Layers[0].Rows[0].Columns.Num(); //Empty for (int32 l = 0; l < LayerTotal; l++) { for (int32 r = 0; r < RowTotal; r++) { Layers[l].Rows[r].Columns.Empty(); } } for (int32 l = 0; l < LayerTotal; l++) { Layers[l].Rows.Empty(); } Layers.Empty(); } FMapSector() { AddUnitialized(3, 3, 3); } FMapSector(int32 size) { AddUnitialized(size, size, size); } FMapSector(int32 Layers, int32 Rows, int32 Cols) { AddUnitialized(Layers, Rows, Cols); } };
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter