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;
|
import java.util.List;
|
||||||
|
|
||||||
final class AssetDetailsTileBankCompositionFamilySupport extends AssetDetailsAbstractBankCompositionFamilySupport {
|
final class AssetDetailsTileBankCompositionFamilySupport extends AssetDetailsAbstractBankCompositionFamilySupport {
|
||||||
private int maxSlots = 64;
|
private static final int ATLAS_SIZE_PX = 256;
|
||||||
|
|
||||||
|
private int maxSlots = slotsForTileSize(16);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supports(AssetFamilyCatalog assetFamily) {
|
public boolean supports(AssetFamilyCatalog assetFamily) {
|
||||||
@ -48,12 +50,16 @@ final class AssetDetailsTileBankCompositionFamilySupport extends AssetDetailsAbs
|
|||||||
.map(field -> field.value())
|
.map(field -> field.value())
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse("16x16");
|
.orElse("16x16");
|
||||||
final int tileSize = switch (tileSizeValue) {
|
return switch (tileSizeValue) {
|
||||||
case "8x8" -> 8;
|
case "8x8" -> slotsForTileSize(8);
|
||||||
case "32x32" -> 32;
|
case "32x32" -> slotsForTileSize(32);
|
||||||
default -> 16;
|
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) {
|
private StudioAssetCapacitySeverity severityFor(double progress) {
|
||||||
|
|||||||
@ -28,6 +28,45 @@ final class AssetDetailsBankCompositionCoordinatorTest {
|
|||||||
assertTrue(coordinator.viewModel().capacityState().blocked());
|
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
|
@Test
|
||||||
void soundFamilyBlocksSelectionAfterByteCapacity() {
|
void soundFamilyBlocksSelectionAfterByteCapacity() {
|
||||||
final AssetDetailsBankCompositionCoordinator coordinator = new AssetDetailsBankCompositionCoordinator();
|
final AssetDetailsBankCompositionCoordinator coordinator = new AssetDetailsBankCompositionCoordinator();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user