fix tile bank capacity meter atlas sizing
This commit is contained in:
parent
2fa604e308
commit
a7710be847
@ -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) {
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user