packer (WIP)
This commit is contained in:
parent
96643282af
commit
7558128215
@ -14,6 +14,7 @@ public record PackerAssetDetailsDTO(
|
||||
List<OutputCodecCatalog> availableOutputCodecs,
|
||||
Map<OutputCodecCatalog, List<PackerCodecConfigurationFieldDTO>> codecConfigurationFieldsByCodec,
|
||||
List<PackerCodecConfigurationFieldDTO> metadataFields,
|
||||
Map<String, Object> outputPipeline,
|
||||
PackerBankCompositionDetailsDTO bankComposition,
|
||||
List<Map<String, Object>> pipelinePalettes,
|
||||
List<PackerDiagnosticDTO> diagnostics) {
|
||||
@ -25,6 +26,7 @@ public record PackerAssetDetailsDTO(
|
||||
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
||||
codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec"));
|
||||
metadataFields = List.copyOf(Objects.requireNonNull(metadataFields, "metadataFields"));
|
||||
outputPipeline = Map.copyOf(Objects.requireNonNull(outputPipeline, "outputPipeline"));
|
||||
bankComposition = Objects.requireNonNull(bankComposition, "bankComposition");
|
||||
pipelinePalettes = List.copyOf(Objects.requireNonNull(pipelinePalettes, "pipelinePalettes"));
|
||||
diagnostics = List.copyOf(Objects.requireNonNull(diagnostics, "diagnostics"));
|
||||
|
||||
@ -1,32 +1,35 @@
|
||||
package p.packer.dtos;
|
||||
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.packer.messages.assets.OutputFormatCatalog;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public record PackerPackSummaryAssetDTO(
|
||||
int assetId,
|
||||
String assetName,
|
||||
AssetFamilyCatalog assetFamily,
|
||||
int minArtifactCount,
|
||||
int maxArtifactCount,
|
||||
int artifactCount,
|
||||
OutputFormatCatalog outputFormat,
|
||||
Map<String, String> outputMetadata,
|
||||
Map<String, Object> outputPipeline,
|
||||
long lastModified) {
|
||||
|
||||
public PackerPackSummaryAssetDTO {
|
||||
if (assetId < 0) {
|
||||
throw new IllegalArgumentException("assetId must not be negative");
|
||||
}
|
||||
assetName = java.util.Objects.requireNonNull(assetName, "assetName").trim();
|
||||
assetFamily = java.util.Objects.requireNonNullElse(assetFamily, AssetFamilyCatalog.UNKNOWN);
|
||||
assetName = Objects.requireNonNull(assetName, "assetName").trim();
|
||||
assetFamily = Objects.requireNonNullElse(assetFamily, AssetFamilyCatalog.UNKNOWN);
|
||||
outputFormat = Objects.requireNonNullElse(outputFormat, OutputFormatCatalog.UNKNOWN);
|
||||
outputMetadata = Map.copyOf(Objects.requireNonNull(outputMetadata, "outputMetadata"));
|
||||
outputPipeline = Map.copyOf(Objects.requireNonNull(outputPipeline, "outputPipeline"));
|
||||
if (assetName.isBlank()) {
|
||||
throw new IllegalArgumentException("assetName must not be blank");
|
||||
}
|
||||
if (minArtifactCount < 0) {
|
||||
throw new IllegalArgumentException("minArtifactCount must not be negative");
|
||||
}
|
||||
if (maxArtifactCount < 0) {
|
||||
throw new IllegalArgumentException("maxArtifactCount must not be negative");
|
||||
}
|
||||
if (minArtifactCount > maxArtifactCount) {
|
||||
throw new IllegalArgumentException("minArtifactCount must not be greater than maxArtifactCount");
|
||||
if (artifactCount < 0) {
|
||||
throw new IllegalArgumentException("artifactCount must not be negative");
|
||||
}
|
||||
if (lastModified < 0L) {
|
||||
throw new IllegalArgumentException("lastModified must not be negative");
|
||||
|
||||
@ -14,6 +14,7 @@ public record PackerAssetDetails(
|
||||
List<OutputCodecCatalog> availableOutputCodecs,
|
||||
Map<OutputCodecCatalog, List<PackerCodecConfigurationField>> codecConfigurationFieldsByCodec,
|
||||
List<PackerCodecConfigurationField> metadataFields,
|
||||
Map<String, Object> outputPipeline,
|
||||
PackerBankCompositionDetails bankComposition,
|
||||
List<Map<String, Object>> pipelinePalettes,
|
||||
List<PackerDiagnostic> diagnostics) {
|
||||
@ -25,6 +26,7 @@ public record PackerAssetDetails(
|
||||
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
||||
codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec"));
|
||||
metadataFields = List.copyOf(Objects.requireNonNull(metadataFields, "metadataFields"));
|
||||
outputPipeline = Map.copyOf(Objects.requireNonNull(outputPipeline, "outputPipeline"));
|
||||
bankComposition = Objects.requireNonNull(bankComposition, "bankComposition");
|
||||
pipelinePalettes = List.copyOf(Objects.requireNonNull(pipelinePalettes, "pipelinePalettes"));
|
||||
diagnostics = List.copyOf(Objects.requireNonNull(diagnostics, "diagnostics"));
|
||||
|
||||
@ -681,14 +681,14 @@ public final class FileSystemPackerWorkspaceService implements PackerWorkspaceSe
|
||||
final AssetFamilyCatalog assetFamily = declaration != null
|
||||
? declaration.assetFamily()
|
||||
: AssetFamilyCatalog.UNKNOWN;
|
||||
final int minArtifactCount = declaration != null ? declaration.artifacts().size() : 0;
|
||||
final int maxArtifactCount = runtimeAsset.walkProjection().buildCandidateFiles().size();
|
||||
return new PackerPackSummaryAssetDTO(
|
||||
registryEntry.assetId(),
|
||||
assetName,
|
||||
assetFamily,
|
||||
minArtifactCount,
|
||||
maxArtifactCount,
|
||||
declaration != null ? declaration.artifacts().size() : 0,
|
||||
declaration != null ? declaration.outputFormat() : OutputFormatCatalog.UNKNOWN,
|
||||
declaration != null ? declaration.outputMetadata() : Map.of(),
|
||||
declaration != null ? PackerReadMessageMapper.normalizeMetadata(declaration.outputPipelineMetadata()) : Map.of(),
|
||||
0L);
|
||||
}
|
||||
|
||||
|
||||
@ -82,6 +82,7 @@ public final class PackerAssetDetailsService {
|
||||
outputContract.availableCodecs(),
|
||||
outputContract.codecConfigurationFieldsByCodec(),
|
||||
metadataFields(outputContract.metadataFields(), declaration.outputMetadata()),
|
||||
PackerReadMessageMapper.normalizeMetadata(declaration.outputPipelineMetadata()),
|
||||
resolveBankCompositionDetails(snapshot, runtimeAsset, declaration),
|
||||
resolvePipelinePalettes(declaration),
|
||||
diagnostics);
|
||||
@ -122,6 +123,7 @@ public final class PackerAssetDetailsService {
|
||||
List.of(OutputCodecCatalog.NONE),
|
||||
Map.of(OutputCodecCatalog.NONE, List.of()),
|
||||
List.of(),
|
||||
Map.of(),
|
||||
PackerBankCompositionDetails.EMPTY,
|
||||
List.of(),
|
||||
diagnostics);
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package p.packer.services;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import p.packer.dtos.*;
|
||||
import p.packer.messages.assets.OutputCodecCatalog;
|
||||
import p.packer.models.*;
|
||||
@ -31,11 +32,20 @@ public final class PackerReadMessageMapper {
|
||||
details.availableOutputCodecs(),
|
||||
toCodecConfigurationFieldsByCodecDTO(details.codecConfigurationFieldsByCodec()),
|
||||
toCodecConfigurationFieldDTOs(details.metadataFields()),
|
||||
normalizeMetadata(details.outputPipeline()),
|
||||
toBankCompositionDetailsDTO(details.bankComposition()),
|
||||
details.pipelinePalettes().stream().map(PackerReadMessageMapper::normalizeMetadata).toList(),
|
||||
toDiagnosticDTOs(details.diagnostics()));
|
||||
}
|
||||
|
||||
public static Map<String, Object> normalizeMetadata(Map<String, ?> metadata) {
|
||||
return metadata.entrySet().stream().collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
entry -> normalizeMetadataValue(entry.getValue()),
|
||||
(left, right) -> left,
|
||||
java.util.LinkedHashMap::new));
|
||||
}
|
||||
|
||||
private static PackerBankCompositionDetailsDTO toBankCompositionDetailsDTO(PackerBankCompositionDetails details) {
|
||||
return new PackerBankCompositionDetailsDTO(
|
||||
details.availableFiles().stream().map(PackerReadMessageMapper::toBankCompositionFileDTO).toList(),
|
||||
@ -53,14 +63,6 @@ public final class PackerReadMessageMapper {
|
||||
normalizeMetadata(file.metadata()));
|
||||
}
|
||||
|
||||
private static Map<String, Object> normalizeMetadata(Map<String, Object> metadata) {
|
||||
return metadata.entrySet().stream().collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
entry -> normalizeMetadataValue(entry.getValue()),
|
||||
(left, right) -> left,
|
||||
java.util.LinkedHashMap::new));
|
||||
}
|
||||
|
||||
private static Object normalizeMetadataValue(Object value) {
|
||||
if (value == null
|
||||
|| value instanceof String
|
||||
@ -68,6 +70,34 @@ public final class PackerReadMessageMapper {
|
||||
|| value instanceof Boolean) {
|
||||
return value;
|
||||
}
|
||||
if (value instanceof JsonNode jsonNode) {
|
||||
if (jsonNode.isObject()) {
|
||||
final java.util.LinkedHashMap<String, Object> normalized = new java.util.LinkedHashMap<>();
|
||||
jsonNode.fields().forEachRemaining(entry -> normalized.put(entry.getKey(), normalizeMetadataValue(entry.getValue())));
|
||||
return Map.copyOf(normalized);
|
||||
}
|
||||
if (jsonNode.isArray()) {
|
||||
final java.util.List<Object> normalized = new java.util.ArrayList<>();
|
||||
jsonNode.forEach(item -> normalized.add(normalizeMetadataValue(item)));
|
||||
return List.copyOf(normalized);
|
||||
}
|
||||
if (jsonNode.isTextual()) {
|
||||
return jsonNode.asText();
|
||||
}
|
||||
if (jsonNode.isIntegralNumber()) {
|
||||
return jsonNode.longValue();
|
||||
}
|
||||
if (jsonNode.isFloatingPointNumber()) {
|
||||
return jsonNode.doubleValue();
|
||||
}
|
||||
if (jsonNode.isBoolean()) {
|
||||
return jsonNode.booleanValue();
|
||||
}
|
||||
if (jsonNode.isNull()) {
|
||||
return null;
|
||||
}
|
||||
return jsonNode.toString();
|
||||
}
|
||||
if (value instanceof PackerTileIndexedV1 tile) {
|
||||
final List<Integer> paletteIndices = new java.util.ArrayList<>(tile.paletteIndices().length);
|
||||
for (byte paletteIndex : tile.paletteIndices()) {
|
||||
|
||||
@ -118,25 +118,28 @@ final class FileSystemPackerWorkspaceServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void packSummaryProjectsMinAndMaxArtifactCounts() throws Exception {
|
||||
void packSummaryProjectsArtifactCountAndOutputMetadata() throws Exception {
|
||||
final Path projectRoot = copyFixture("workspaces/managed-basic", tempDir.resolve("pack-summary-artifacts"));
|
||||
final Path assetRoot = projectRoot.resolve("assets/ui/atlas");
|
||||
writeTilePng(assetRoot.resolve("confirm.png"), 16);
|
||||
writeTilePng(assetRoot.resolve("cancel.png"), 16);
|
||||
final Path manifestPath = assetRoot.resolve("asset.json");
|
||||
final ObjectNode manifest = (ObjectNode) MAPPER.readTree(manifestPath.toFile());
|
||||
final var artifacts = manifest.putArray("artifacts");
|
||||
artifacts.addObject().put("file", "confirm.png").put("index", 0);
|
||||
final ObjectNode output = (ObjectNode) manifest.path("output");
|
||||
final ObjectNode metadata = output.putObject("metadata");
|
||||
metadata.put("tile_size", "16x16");
|
||||
output.putObject("pipeline").putObject("samples").putObject("1").put("offset", 0).put("length", 64);
|
||||
MAPPER.writerWithDefaultPrettyPrinter().writeValue(manifestPath.toFile(), manifest);
|
||||
final FileSystemPackerWorkspaceService service = service();
|
||||
|
||||
service.listAssets(new ListAssetsRequest(project(projectRoot), true));
|
||||
final var result = service.getPackWorkspaceSummary(new PackWorkspaceSummaryRequest(project(projectRoot)));
|
||||
|
||||
assertEquals(PackerOperationStatus.SUCCESS, result.status());
|
||||
assertEquals(1, result.packSummary().assets().size());
|
||||
assertEquals(1, result.packSummary().assets().getFirst().minArtifactCount());
|
||||
assertEquals(2, result.packSummary().assets().getFirst().maxArtifactCount());
|
||||
assertEquals(1, result.packSummary().assets().getFirst().artifactCount());
|
||||
assertEquals(OutputFormatCatalog.TILES_INDEXED_V1, result.packSummary().assets().getFirst().outputFormat());
|
||||
assertEquals("16x16", result.packSummary().assets().getFirst().outputMetadata().get("tile_size"));
|
||||
assertEquals(64L, ((Map<?, ?>) ((Map<?, ?>) result.packSummary().assets().getFirst().outputPipeline().get("samples")).get("1")).get("length"));
|
||||
assertEquals(0L, result.packSummary().assets().getFirst().lastModified());
|
||||
}
|
||||
|
||||
|
||||
@ -555,6 +555,7 @@ public final class AssetDetailsControl extends VBox implements StudioEventAware
|
||||
details.availableOutputCodecs(),
|
||||
details.codecConfigurationFieldsByCodec(),
|
||||
details.metadataFields(),
|
||||
details.outputPipeline(),
|
||||
mapBankComposition(details.bankComposition()),
|
||||
details.pipelinePalettes(),
|
||||
mergedDiagnostics);
|
||||
|
||||
@ -0,0 +1,116 @@
|
||||
package p.studio.workspaces.assets.details.bank;
|
||||
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.studio.controls.banks.StudioAssetCapacitySeverity;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public final class AssetBankCapacityService {
|
||||
private static final int TILE_ATLAS_SIZE_PX = 256;
|
||||
private static final long SOUND_BANK_MAX_BYTES = 1024L * 1024L;
|
||||
|
||||
public AssetDetailsBankCompositionCapacityState evaluate(
|
||||
AssetFamilyCatalog assetFamily,
|
||||
int artifactCount,
|
||||
Map<String, String> outputMetadata,
|
||||
Map<String, Object> outputPipeline,
|
||||
long usedBytes) {
|
||||
final AssetFamilyCatalog safeFamily = Objects.requireNonNullElse(assetFamily, AssetFamilyCatalog.UNKNOWN);
|
||||
final Map<String, String> safeMetadata = Map.copyOf(Objects.requireNonNull(outputMetadata, "outputMetadata"));
|
||||
final Map<String, Object> safePipeline = Map.copyOf(Objects.requireNonNull(outputPipeline, "outputPipeline"));
|
||||
return switch (safeFamily) {
|
||||
case TILE_BANK -> evaluateTileBank(artifactCount, safeMetadata);
|
||||
case SOUND_BANK -> evaluateSoundBank(resolveSoundBankUsedBytes(safePipeline, usedBytes));
|
||||
case UNKNOWN -> new AssetDetailsBankCompositionCapacityState(
|
||||
0.0d,
|
||||
StudioAssetCapacitySeverity.GREEN,
|
||||
false,
|
||||
artifactCount + " selected",
|
||||
"");
|
||||
};
|
||||
}
|
||||
|
||||
public int maxArtifactsForTileBank(Map<String, String> outputMetadata) {
|
||||
final String tileSizeValue = Objects.requireNonNull(outputMetadata, "outputMetadata")
|
||||
.getOrDefault("tile_size", "16x16");
|
||||
return switch (tileSizeValue) {
|
||||
case "8x8" -> slotsForTileSize(8);
|
||||
case "32x32" -> slotsForTileSize(32);
|
||||
default -> slotsForTileSize(16);
|
||||
};
|
||||
}
|
||||
|
||||
private AssetDetailsBankCompositionCapacityState evaluateTileBank(
|
||||
int artifactCount,
|
||||
Map<String, String> outputMetadata) {
|
||||
final int maxSlots = maxArtifactsForTileBank(outputMetadata);
|
||||
final int safeArtifactCount = Math.max(0, artifactCount);
|
||||
final double progress = maxSlots <= 0 ? 0.0d : (double) safeArtifactCount / (double) maxSlots;
|
||||
final boolean blocked = safeArtifactCount >= maxSlots;
|
||||
return new AssetDetailsBankCompositionCapacityState(
|
||||
progress,
|
||||
severityFor(progress),
|
||||
blocked,
|
||||
safeArtifactCount + " / " + maxSlots,
|
||||
blocked ? "Tile bank slot capacity reached." : "");
|
||||
}
|
||||
|
||||
private AssetDetailsBankCompositionCapacityState evaluateSoundBank(long usedBytes) {
|
||||
final long safeUsedBytes = Math.max(0L, usedBytes);
|
||||
final double progress = (double) safeUsedBytes / (double) SOUND_BANK_MAX_BYTES;
|
||||
final boolean blocked = safeUsedBytes >= SOUND_BANK_MAX_BYTES;
|
||||
return new AssetDetailsBankCompositionCapacityState(
|
||||
progress,
|
||||
severityFor(progress),
|
||||
blocked,
|
||||
safeUsedBytes + " / " + SOUND_BANK_MAX_BYTES + " bytes",
|
||||
blocked ? "Sound bank byte capacity reached." : "");
|
||||
}
|
||||
|
||||
private long resolveSoundBankUsedBytes(Map<String, Object> outputPipeline, long fallbackUsedBytes) {
|
||||
final Object samplesNode = outputPipeline.get("samples");
|
||||
if (!(samplesNode instanceof Map<?, ?> samples)) {
|
||||
return Math.max(0L, fallbackUsedBytes);
|
||||
}
|
||||
long maxEndExclusive = 0L;
|
||||
for (Object sampleValue : samples.values()) {
|
||||
if (!(sampleValue instanceof Map<?, ?> sampleMetadata)) {
|
||||
continue;
|
||||
}
|
||||
final long offset = longValue(sampleMetadata.get("offset"));
|
||||
final long length = Math.max(longValue(sampleMetadata.get("len")), longValue(sampleMetadata.get("length")));
|
||||
maxEndExclusive = Math.max(maxEndExclusive, Math.max(0L, offset) + Math.max(0L, length));
|
||||
}
|
||||
return Math.max(maxEndExclusive, Math.max(0L, fallbackUsedBytes));
|
||||
}
|
||||
|
||||
private long longValue(Object value) {
|
||||
if (value instanceof Number number) {
|
||||
return number.longValue();
|
||||
}
|
||||
if (value instanceof String text) {
|
||||
try {
|
||||
return Long.parseLong(text.trim());
|
||||
} catch (NumberFormatException ignored) {
|
||||
return 0L;
|
||||
}
|
||||
}
|
||||
return 0L;
|
||||
}
|
||||
|
||||
private static int slotsForTileSize(int tileSize) {
|
||||
final int tilesPerAxis = Math.max(1, TILE_ATLAS_SIZE_PX / tileSize);
|
||||
return tilesPerAxis * tilesPerAxis;
|
||||
}
|
||||
|
||||
private StudioAssetCapacitySeverity severityFor(double progress) {
|
||||
if (progress >= 0.95d) {
|
||||
return StudioAssetCapacitySeverity.RED;
|
||||
}
|
||||
if (progress >= 0.65d) {
|
||||
return StudioAssetCapacitySeverity.ORANGE;
|
||||
}
|
||||
return StudioAssetCapacitySeverity.GREEN;
|
||||
}
|
||||
}
|
||||
@ -1,12 +1,14 @@
|
||||
package p.studio.workspaces.assets.details.bank;
|
||||
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.studio.controls.banks.StudioAssetCapacitySeverity;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceBankCompositionFile;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
final class AssetDetailsFallbackBankCompositionFamilySupport extends AssetDetailsAbstractBankCompositionFamilySupport {
|
||||
private final AssetBankCapacityService capacityService = new AssetBankCapacityService();
|
||||
|
||||
@Override
|
||||
public boolean supports(AssetFamilyCatalog assetFamily) {
|
||||
return true;
|
||||
@ -22,11 +24,11 @@ final class AssetDetailsFallbackBankCompositionFamilySupport extends AssetDetail
|
||||
|
||||
@Override
|
||||
public AssetDetailsBankCompositionCapacityState evaluate(AssetDetailsBankCompositionDraft draft) {
|
||||
return new AssetDetailsBankCompositionCapacityState(
|
||||
0.0d,
|
||||
StudioAssetCapacitySeverity.GREEN,
|
||||
false,
|
||||
draft.selectedFiles().size() + " selected",
|
||||
"");
|
||||
return capacityService.evaluate(
|
||||
AssetFamilyCatalog.UNKNOWN,
|
||||
draft.selectedFiles().size(),
|
||||
Map.of(),
|
||||
Map.of(),
|
||||
0L);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +1,23 @@
|
||||
package p.studio.workspaces.assets.details.bank;
|
||||
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.studio.controls.banks.StudioAssetCapacitySeverity;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceBankCompositionFile;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
final class AssetDetailsSoundBankCompositionFamilySupport extends AssetDetailsAbstractBankCompositionFamilySupport {
|
||||
private static final long MAX_BYTES = 1024L * 1024L;
|
||||
|
||||
private final AssetBankCapacityService capacityService = new AssetBankCapacityService();
|
||||
private Map<String, Object> outputPipeline = Map.of();
|
||||
|
||||
@Override
|
||||
public AssetDetailsBankCompositionDraft createDraft(p.studio.workspaces.assets.messages.AssetWorkspaceAssetDetails details) {
|
||||
outputPipeline = details.outputPipeline();
|
||||
return super.createDraft(details);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supports(AssetFamilyCatalog assetFamily) {
|
||||
return assetFamily == AssetFamilyCatalog.SOUND_BANK;
|
||||
@ -25,28 +34,15 @@ final class AssetDetailsSoundBankCompositionFamilySupport extends AssetDetailsAb
|
||||
|
||||
@Override
|
||||
public AssetDetailsBankCompositionCapacityState evaluate(AssetDetailsBankCompositionDraft draft) {
|
||||
final long usedBytes = selectedBytes(draft.selectedFiles());
|
||||
final double progress = (double) usedBytes / (double) MAX_BYTES;
|
||||
final boolean blocked = usedBytes >= MAX_BYTES;
|
||||
return new AssetDetailsBankCompositionCapacityState(
|
||||
progress,
|
||||
severityFor(progress),
|
||||
blocked,
|
||||
usedBytes + " / " + MAX_BYTES + " bytes",
|
||||
blocked ? "Sound bank byte capacity reached." : "");
|
||||
return capacityService.evaluate(
|
||||
AssetFamilyCatalog.SOUND_BANK,
|
||||
draft.selectedFiles().size(),
|
||||
Map.of(),
|
||||
outputPipeline,
|
||||
selectedBytes(draft.selectedFiles()));
|
||||
}
|
||||
|
||||
private long selectedBytes(List<AssetWorkspaceBankCompositionFile> files) {
|
||||
return files.stream().mapToLong(AssetWorkspaceBankCompositionFile::size).sum();
|
||||
}
|
||||
|
||||
private StudioAssetCapacitySeverity severityFor(double progress) {
|
||||
if (progress >= 0.95d) {
|
||||
return StudioAssetCapacitySeverity.RED;
|
||||
}
|
||||
if (progress >= 0.65d) {
|
||||
return StudioAssetCapacitySeverity.ORANGE;
|
||||
}
|
||||
return StudioAssetCapacitySeverity.GREEN;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +1,17 @@
|
||||
package p.studio.workspaces.assets.details.bank;
|
||||
|
||||
import p.packer.messages.assets.AssetFamilyCatalog;
|
||||
import p.studio.controls.banks.StudioAssetCapacitySeverity;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceAssetDetails;
|
||||
import p.studio.workspaces.assets.messages.AssetWorkspaceBankCompositionFile;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
final class AssetDetailsTileBankCompositionFamilySupport extends AssetDetailsAbstractBankCompositionFamilySupport {
|
||||
private static final int ATLAS_SIZE_PX = 256;
|
||||
private final AssetBankCapacityService capacityService = new AssetBankCapacityService();
|
||||
|
||||
private int maxSlots = slotsForTileSize(16);
|
||||
private int maxSlots = capacityService.maxArtifactsForTileBank(Map.of());
|
||||
private Map<String, String> outputMetadata = Map.of();
|
||||
|
||||
@Override
|
||||
public boolean supports(AssetFamilyCatalog assetFamily) {
|
||||
@ -19,7 +20,8 @@ final class AssetDetailsTileBankCompositionFamilySupport extends AssetDetailsAbs
|
||||
|
||||
@Override
|
||||
public AssetDetailsBankCompositionDraft createDraft(AssetWorkspaceAssetDetails details) {
|
||||
maxSlots = computeMaxSlots(details);
|
||||
outputMetadata = metadataMap(details);
|
||||
maxSlots = capacityService.maxArtifactsForTileBank(outputMetadata);
|
||||
return super.createDraft(details);
|
||||
}
|
||||
|
||||
@ -33,42 +35,20 @@ final class AssetDetailsTileBankCompositionFamilySupport extends AssetDetailsAbs
|
||||
|
||||
@Override
|
||||
public AssetDetailsBankCompositionCapacityState evaluate(AssetDetailsBankCompositionDraft draft) {
|
||||
final int used = draft.selectedFiles().size();
|
||||
final double progress = maxSlots <= 0 ? 0.0d : (double) used / (double) maxSlots;
|
||||
final boolean blocked = used >= maxSlots;
|
||||
return new AssetDetailsBankCompositionCapacityState(
|
||||
progress,
|
||||
severityFor(progress),
|
||||
blocked,
|
||||
used + " / " + maxSlots,
|
||||
blocked ? "Tile bank slot capacity reached." : "");
|
||||
return capacityService.evaluate(
|
||||
AssetFamilyCatalog.TILE_BANK,
|
||||
draft.selectedFiles().size(),
|
||||
outputMetadata,
|
||||
Map.of(),
|
||||
0L);
|
||||
}
|
||||
|
||||
private int computeMaxSlots(AssetWorkspaceAssetDetails details) {
|
||||
final String tileSizeValue = details.metadataFields().stream()
|
||||
private Map<String, String> metadataMap(AssetWorkspaceAssetDetails details) {
|
||||
final String tileSize = details.metadataFields().stream()
|
||||
.filter(field -> field.key().equals("tile_size"))
|
||||
.map(field -> field.value())
|
||||
.findFirst()
|
||||
.orElse("16x16");
|
||||
return switch (tileSizeValue) {
|
||||
case "8x8" -> slotsForTileSize(8);
|
||||
case "32x32" -> slotsForTileSize(32);
|
||||
default -> slotsForTileSize(16);
|
||||
};
|
||||
}
|
||||
|
||||
private static int slotsForTileSize(int tileSize) {
|
||||
final int tilesPerAxis = Math.max(1, ATLAS_SIZE_PX / tileSize);
|
||||
return tilesPerAxis * tilesPerAxis;
|
||||
}
|
||||
|
||||
private StudioAssetCapacitySeverity severityFor(double progress) {
|
||||
if (progress >= 0.95d) {
|
||||
return StudioAssetCapacitySeverity.RED;
|
||||
}
|
||||
if (progress >= 0.65d) {
|
||||
return StudioAssetCapacitySeverity.ORANGE;
|
||||
}
|
||||
return StudioAssetCapacitySeverity.GREEN;
|
||||
return Map.of("tile_size", tileSize);
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ public record AssetWorkspaceAssetDetails(
|
||||
List<OutputCodecCatalog> availableOutputCodecs,
|
||||
Map<OutputCodecCatalog, List<PackerCodecConfigurationFieldDTO>> codecConfigurationFieldsByCodec,
|
||||
List<PackerCodecConfigurationFieldDTO> metadataFields,
|
||||
Map<String, Object> outputPipeline,
|
||||
AssetWorkspaceBankCompositionDetails bankComposition,
|
||||
List<Map<String, Object>> pipelinePalettes,
|
||||
List<PackerDiagnosticDTO> diagnostics) {
|
||||
@ -29,6 +30,7 @@ public record AssetWorkspaceAssetDetails(
|
||||
availableOutputCodecs = List.copyOf(Objects.requireNonNull(availableOutputCodecs, "availableOutputCodecs"));
|
||||
codecConfigurationFieldsByCodec = Map.copyOf(Objects.requireNonNull(codecConfigurationFieldsByCodec, "codecConfigurationFieldsByCodec"));
|
||||
metadataFields = List.copyOf(Objects.requireNonNull(metadataFields, "metadataFields"));
|
||||
outputPipeline = Map.copyOf(Objects.requireNonNull(outputPipeline, "outputPipeline"));
|
||||
bankComposition = Objects.requireNonNull(bankComposition, "bankComposition");
|
||||
pipelinePalettes = List.copyOf(Objects.requireNonNull(pipelinePalettes, "pipelinePalettes"));
|
||||
diagnostics = List.copyOf(Objects.requireNonNull(diagnostics, "diagnostics"));
|
||||
|
||||
@ -6,6 +6,9 @@ import javafx.geometry.Pos;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.control.OverrunStyle;
|
||||
import javafx.scene.layout.ColumnConstraints;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
@ -28,6 +31,8 @@ import p.studio.Container;
|
||||
import p.studio.projects.ProjectReference;
|
||||
import p.studio.utilities.i18n.I18n;
|
||||
import p.studio.workspaces.assets.details.AssetDetailsUiSupport;
|
||||
import p.studio.workspaces.assets.details.bank.AssetBankCapacityService;
|
||||
import p.studio.workspaces.assets.details.bank.AssetDetailsBankCompositionCapacityState;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@ -53,6 +58,7 @@ public final class PackWorkspaceWizard {
|
||||
private final Button packButton = new Button();
|
||||
private final Button closeButton = new Button();
|
||||
private final Button copyFailuresButton = new Button();
|
||||
private final AssetBankCapacityService bankCapacityService = new AssetBankCapacityService();
|
||||
|
||||
private Phase phase = Phase.DEEP_SYNC_INTRO;
|
||||
private boolean deepSyncRunning;
|
||||
@ -208,38 +214,86 @@ public final class PackWorkspaceWizard {
|
||||
return AssetDetailsUiSupport.createSectionMessage(
|
||||
Container.i18n().text(I18n.ASSETS_PACK_WIZARD_VALIDATION_EMPTY));
|
||||
}
|
||||
final Accordion accordion = new Accordion();
|
||||
final VBox assets = new VBox(10);
|
||||
for (PackerPackSummaryAssetDTO asset : summaryResult.packSummary().assets()) {
|
||||
accordion.getPanes().add(createSummaryPane(asset));
|
||||
assets.getChildren().add(createSummaryRow(asset));
|
||||
}
|
||||
VBox.setVgrow(accordion, Priority.ALWAYS);
|
||||
return accordion;
|
||||
final ScrollPane scrollPane = new ScrollPane(assets);
|
||||
scrollPane.setFitToWidth(true);
|
||||
scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
|
||||
VBox.setVgrow(scrollPane, Priority.ALWAYS);
|
||||
return scrollPane;
|
||||
}
|
||||
|
||||
private TitledPane createSummaryPane(PackerPackSummaryAssetDTO asset) {
|
||||
final VBox content = new VBox(8);
|
||||
content.getChildren().addAll(
|
||||
AssetDetailsUiSupport.createKeyValueRow(
|
||||
Container.i18n().text(I18n.ASSETS_LABEL_ASSET_ID),
|
||||
Integer.toString(asset.assetId())),
|
||||
AssetDetailsUiSupport.createKeyValueRow(
|
||||
Container.i18n().text(I18n.ASSETS_LABEL_NAME),
|
||||
asset.assetName()),
|
||||
AssetDetailsUiSupport.createKeyValueRow(
|
||||
Container.i18n().text(I18n.ASSETS_LABEL_TYPE),
|
||||
AssetDetailsUiSupport.typeLabel(asset.assetFamily())),
|
||||
AssetDetailsUiSupport.createKeyValueRow(
|
||||
Container.i18n().text(I18n.ASSETS_PACK_WIZARD_LABEL_MIN_ARTIFACTS),
|
||||
Integer.toString(asset.minArtifactCount())),
|
||||
AssetDetailsUiSupport.createKeyValueRow(
|
||||
Container.i18n().text(I18n.ASSETS_PACK_WIZARD_LABEL_MAX_ARTIFACTS),
|
||||
Integer.toString(asset.maxArtifactCount())),
|
||||
AssetDetailsUiSupport.createKeyValueRow(
|
||||
Container.i18n().text(I18n.ASSETS_PACK_WIZARD_LABEL_LAST_MODIFIED),
|
||||
Long.toString(asset.lastModified())));
|
||||
final TitledPane pane = new TitledPane(asset.assetName(), content);
|
||||
pane.setExpanded(false);
|
||||
return pane;
|
||||
private Node createSummaryRow(PackerPackSummaryAssetDTO asset) {
|
||||
final Label assetName = new Label(truncate(asset.assetName(), 50));
|
||||
assetName.getStyleClass().add("assets-details-value");
|
||||
assetName.setTextOverrun(OverrunStyle.ELLIPSIS);
|
||||
assetName.setMaxWidth(Double.MAX_VALUE);
|
||||
|
||||
final Label assetIdChip = AssetDetailsUiSupport.createChip(
|
||||
"assets-details-chip-generic",
|
||||
"#" + asset.assetId());
|
||||
final Label familyChip = AssetDetailsUiSupport.createChip(
|
||||
AssetDetailsUiSupport.typeChipTone(asset.assetFamily()),
|
||||
AssetDetailsUiSupport.typeLabel(asset.assetFamily()));
|
||||
final AssetDetailsBankCompositionCapacityState capacityState = summaryCapacityState(asset);
|
||||
final ProgressBar capacityBar = new ProgressBar(capacityState.progress());
|
||||
capacityBar.setMaxWidth(Double.MAX_VALUE);
|
||||
applyCapacityTone(capacityBar, capacityState);
|
||||
|
||||
final GridPane row = new GridPane();
|
||||
row.setHgap(12);
|
||||
row.setVgap(0);
|
||||
row.setAlignment(Pos.CENTER_LEFT);
|
||||
row.getStyleClass().add("studio-card");
|
||||
row.setMaxWidth(Double.MAX_VALUE);
|
||||
|
||||
final ColumnConstraints idColumn = new ColumnConstraints();
|
||||
idColumn.setPercentWidth(12);
|
||||
final ColumnConstraints nameColumn = new ColumnConstraints();
|
||||
nameColumn.setPercentWidth(38);
|
||||
final ColumnConstraints familyColumn = new ColumnConstraints();
|
||||
familyColumn.setPercentWidth(15);
|
||||
final ColumnConstraints barColumn = new ColumnConstraints();
|
||||
barColumn.setPercentWidth(35);
|
||||
barColumn.setHgrow(Priority.ALWAYS);
|
||||
row.getColumnConstraints().setAll(idColumn, nameColumn, familyColumn, barColumn);
|
||||
|
||||
row.add(assetIdChip, 0, 0);
|
||||
row.add(assetName, 1, 0);
|
||||
row.add(familyChip, 2, 0);
|
||||
row.add(capacityBar, 3, 0);
|
||||
GridPane.setHgrow(assetName, Priority.ALWAYS);
|
||||
GridPane.setHgrow(capacityBar, Priority.ALWAYS);
|
||||
return row;
|
||||
}
|
||||
|
||||
private AssetDetailsBankCompositionCapacityState summaryCapacityState(PackerPackSummaryAssetDTO asset) {
|
||||
return bankCapacityService.evaluate(
|
||||
asset.assetFamily(),
|
||||
asset.artifactCount(),
|
||||
asset.outputMetadata(),
|
||||
asset.outputPipeline(),
|
||||
0L);
|
||||
}
|
||||
|
||||
private void applyCapacityTone(ProgressBar capacityBar, AssetDetailsBankCompositionCapacityState state) {
|
||||
capacityBar.setStyle(switch (state.severity()) {
|
||||
case GREEN -> "-fx-accent: #2f9e44;";
|
||||
case ORANGE -> "-fx-accent: #f08c00;";
|
||||
case RED -> "-fx-accent: #e03131;";
|
||||
});
|
||||
}
|
||||
|
||||
private String truncate(String value, int maxChars) {
|
||||
if (value == null || value.length() <= maxChars) {
|
||||
return value;
|
||||
}
|
||||
if (maxChars <= 1) {
|
||||
return value.substring(0, Math.max(0, maxChars));
|
||||
}
|
||||
return value.substring(0, Math.max(0, maxChars - 3)) + "...";
|
||||
}
|
||||
|
||||
private void renderValidationPhase() {
|
||||
|
||||
@ -108,6 +108,7 @@ final class AssetDetailsBankCompositionCoordinatorTest {
|
||||
List.of(OutputCodecCatalog.NONE),
|
||||
Map.of(OutputCodecCatalog.NONE, List.of()),
|
||||
List.of(new PackerCodecConfigurationFieldDTO("tile_size", "Tile Size", PackerCodecConfigurationFieldType.TEXT, tileSize, true, List.of())),
|
||||
Map.of(),
|
||||
new AssetWorkspaceBankCompositionDetails(
|
||||
files("tile", fileCount, 1024L),
|
||||
List.of(),
|
||||
@ -125,6 +126,9 @@ final class AssetDetailsBankCompositionCoordinatorTest {
|
||||
List.of(OutputCodecCatalog.NONE),
|
||||
Map.of(OutputCodecCatalog.NONE, List.of()),
|
||||
List.of(),
|
||||
Map.of("samples", Map.of(
|
||||
"1", Map.of("offset", 0L, "length", firstSize),
|
||||
"2", Map.of("offset", firstSize, "length", secondSize))),
|
||||
new AssetWorkspaceBankCompositionDetails(
|
||||
List.of(
|
||||
new AssetWorkspaceBankCompositionFile("a.wav", "a.wav", firstSize, 1L, null, Map.of()),
|
||||
|
||||
@ -90,6 +90,7 @@ final class AssetDetailsPaletteOverhaulingCoordinatorTest {
|
||||
List.of(OutputCodecCatalog.NONE),
|
||||
Map.of(OutputCodecCatalog.NONE, List.of()),
|
||||
List.of(),
|
||||
Map.of(),
|
||||
new AssetWorkspaceBankCompositionDetails(availableFiles, selectedFiles, 0L),
|
||||
selectedFiles.stream().map(file -> (Map<String, Object>) file.metadata().get("palette")).toList(),
|
||||
List.of());
|
||||
|
||||
@ -1,4 +1,459 @@
|
||||
[ {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Included asset in build: ui/sound",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
@ -2043,459 +2498,4 @@
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Excluded asset in build: recovered/one-more-atlas",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bla",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: one-more-atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: bbb2",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: ui_atlas",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Discovered asset: Bigode",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan started",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Excluded asset in build: recovered/bbb2",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "7 assets loaded",
|
||||
"severity" : "SUCCESS",
|
||||
"sticky" : false
|
||||
}, {
|
||||
"source" : "Assets",
|
||||
"message" : "Asset scan diagnostics updated.",
|
||||
"severity" : "INFO",
|
||||
"sticky" : false
|
||||
} ]
|
||||
File diff suppressed because it is too large
Load Diff
@ -15,7 +15,7 @@
|
||||
"asset_id" : 8,
|
||||
"asset_uuid" : "9a7386e7-6f0e-4e4c-9919-0de71e0b7031",
|
||||
"root" : "ui/sound",
|
||||
"included_in_build" : false
|
||||
"included_in_build" : true
|
||||
}, {
|
||||
"asset_id" : 11,
|
||||
"asset_uuid" : "64147d33-e8bf-4272-bb5c-b4c07c0276b3",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user