diff --git a/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/bank/AssetDetailsTileBankCompositionFamilySupport.java b/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/bank/AssetDetailsTileBankCompositionFamilySupport.java index 08babd93..5d721215 100644 --- a/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/bank/AssetDetailsTileBankCompositionFamilySupport.java +++ b/prometeu-studio/src/main/java/p/studio/workspaces/assets/details/bank/AssetDetailsTileBankCompositionFamilySupport.java @@ -8,7 +8,9 @@ import p.studio.workspaces.assets.messages.AssetWorkspaceBankCompositionFile; import java.util.List; final class AssetDetailsTileBankCompositionFamilySupport extends AssetDetailsAbstractBankCompositionFamilySupport { - private int maxSlots = 64; + private static final int ATLAS_SIZE_PX = 256; + + private int maxSlots = slotsForTileSize(16); @Override public boolean supports(AssetFamilyCatalog assetFamily) { @@ -48,12 +50,16 @@ final class AssetDetailsTileBankCompositionFamilySupport extends AssetDetailsAbs .map(field -> field.value()) .findFirst() .orElse("16x16"); - final int tileSize = switch (tileSizeValue) { - case "8x8" -> 8; - case "32x32" -> 32; - default -> 16; + return switch (tileSizeValue) { + case "8x8" -> slotsForTileSize(8); + case "32x32" -> slotsForTileSize(32); + default -> slotsForTileSize(16); }; - return Math.max(1, (256 / tileSize) * (256 / tileSize)); + } + + private static int slotsForTileSize(int tileSize) { + final int tilesPerAxis = Math.max(1, ATLAS_SIZE_PX / tileSize); + return tilesPerAxis * tilesPerAxis; } private StudioAssetCapacitySeverity severityFor(double progress) { diff --git a/prometeu-studio/src/test/java/p/studio/workspaces/assets/details/bank/AssetDetailsBankCompositionCoordinatorTest.java b/prometeu-studio/src/test/java/p/studio/workspaces/assets/details/bank/AssetDetailsBankCompositionCoordinatorTest.java index 6084fdff..38519060 100644 --- a/prometeu-studio/src/test/java/p/studio/workspaces/assets/details/bank/AssetDetailsBankCompositionCoordinatorTest.java +++ b/prometeu-studio/src/test/java/p/studio/workspaces/assets/details/bank/AssetDetailsBankCompositionCoordinatorTest.java @@ -28,6 +28,45 @@ final class AssetDetailsBankCompositionCoordinatorTest { assertTrue(coordinator.viewModel().capacityState().blocked()); } + @Test + void tileFamilyUsesAtlasCapacityFor8x8Tiles() { + final AssetDetailsBankCompositionCoordinator coordinator = new AssetDetailsBankCompositionCoordinator(); + coordinator.replaceDetails(tileDetails("8x8", 1_100)); + coordinator.beginEdit(); + + coordinator.moveToSelected(coordinator.viewModel().availableFiles()); + + assertEquals(1_024, coordinator.viewModel().selectedFiles().size()); + assertEquals("1024 / 1024", coordinator.viewModel().capacityState().labelText()); + assertTrue(coordinator.viewModel().capacityState().blocked()); + } + + @Test + void tileFamilyUsesAtlasCapacityFor16x16Tiles() { + final AssetDetailsBankCompositionCoordinator coordinator = new AssetDetailsBankCompositionCoordinator(); + coordinator.replaceDetails(tileDetails("16x16", 300)); + coordinator.beginEdit(); + + coordinator.moveToSelected(coordinator.viewModel().availableFiles()); + + assertEquals(256, coordinator.viewModel().selectedFiles().size()); + assertEquals("256 / 256", coordinator.viewModel().capacityState().labelText()); + assertTrue(coordinator.viewModel().capacityState().blocked()); + } + + @Test + void tileFamilyUsesAtlasCapacityFor32x32Tiles() { + final AssetDetailsBankCompositionCoordinator coordinator = new AssetDetailsBankCompositionCoordinator(); + coordinator.replaceDetails(tileDetails("32x32", 100)); + coordinator.beginEdit(); + + coordinator.moveToSelected(coordinator.viewModel().availableFiles()); + + assertEquals(64, coordinator.viewModel().selectedFiles().size()); + assertEquals("64 / 64", coordinator.viewModel().capacityState().labelText()); + assertTrue(coordinator.viewModel().capacityState().blocked()); + } + @Test void soundFamilyBlocksSelectionAfterByteCapacity() { final AssetDetailsBankCompositionCoordinator coordinator = new AssetDetailsBankCompositionCoordinator();