void STileLayerList::MergeLayerDown() { if (UPaperTileMap* TileMap = TileMapPtr.Get()) { const int32 SourceIndex = GetSelectionIndex(); const int32 TargetIndex = SourceIndex + 1; if ((SourceIndex != INDEX_NONE) && (TargetIndex != INDEX_NONE)) { const FScopedTransaction Transaction(LOCTEXT("TileMapMergeLayerDown", "Merge Layer Down")); TileMap->SetFlags(RF_Transactional); TileMap->Modify(); UPaperTileLayer* SourceLayer = TileMap->TileLayers[SourceIndex]; UPaperTileLayer* TargetLayer = TileMap->TileLayers[TargetIndex]; TargetLayer->SetFlags(RF_Transactional); TargetLayer->Modify(); // Copy the non-empty tiles from the source to the target layer for (int32 Y = 0; Y < SourceLayer->LayerWidth; ++Y) { for (int32 X = 0; X < SourceLayer->LayerWidth; ++X) { FPaperTileInfo TileInfo = SourceLayer->GetCell(X, Y); if (TileInfo.IsValid()) { TargetLayer->SetCell(X, Y, TileInfo); } } } // Remove the source layer TileMap->TileLayers.RemoveAt(SourceIndex); // Update viewers PostEditNotfications(); } } }
void UPaperTileMapComponent::GetUsedTextures(TArray<UTexture*>& OutTextures, EMaterialQualityLevel::Type QualityLevel) { // Get the texture referenced by the tile maps if (TileMap != nullptr) { for (UPaperTileLayer* Layer : TileMap->TileLayers) { for (int32 Y = 0; Y < TileMap->MapHeight; ++Y) { for (int32 X = 0; X < TileMap->MapWidth; ++X) { FPaperTileInfo TileInfo = Layer->GetCell(X, Y); if (TileInfo.IsValid() && (TileInfo.TileSet != nullptr) && (TileInfo.TileSet->TileSheet != nullptr)) { OutTextures.AddUnique(TileInfo.TileSet->TileSheet); } } } } } // Get any textures referenced by our materials Super::GetUsedTextures(OutTextures, QualityLevel); }