UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

76 lines (74 loc) 4.59 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", { value: true }); exports.GeometryInfoGeneratorTest = void 0; const ProjectInfoItem_1 = require("./ProjectInfoItem"); const IProjectItemData_1 = require("../app/IProjectItemData"); const IInfoItemData_1 = require("./IInfoItemData"); const ProjectInfoUtilities_1 = require("./ProjectInfoUtilities"); const ModelGeometryDefinition_1 = require("../minecraft/ModelGeometryDefinition"); var GeometryInfoGeneratorTest; (function (GeometryInfoGeneratorTest) { GeometryInfoGeneratorTest[GeometryInfoGeneratorTest["blockGeometry"] = 1] = "blockGeometry"; GeometryInfoGeneratorTest[GeometryInfoGeneratorTest["entityGeometry"] = 2] = "entityGeometry"; GeometryInfoGeneratorTest[GeometryInfoGeneratorTest["itemGeometry"] = 3] = "itemGeometry"; GeometryInfoGeneratorTest[GeometryInfoGeneratorTest["overlyComplexBlockGeometry"] = 501] = "overlyComplexBlockGeometry"; })(GeometryInfoGeneratorTest = exports.GeometryInfoGeneratorTest || (exports.GeometryInfoGeneratorTest = {})); class GeometryInfoGenerator { constructor() { this.id = "GEOMETRY"; this.title = "Model Geometry Validation"; } getTopicData(topicId) { return { title: ProjectInfoUtilities_1.default.getTitleFromEnum(GeometryInfoGeneratorTest, topicId), }; } summarize(info, infoSet) { } async generate(project, contentIndex) { const itemsCopy = project.getItemsCopy(); const blockGeometryPi = new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.featureAggregate, this.id, GeometryInfoGeneratorTest.blockGeometry, "Block Geometry"); const entityGeometryPi = new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.featureAggregate, this.id, GeometryInfoGeneratorTest.entityGeometry, "Entity Geometry"); const itemGeometryPi = new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.featureAggregate, this.id, GeometryInfoGeneratorTest.itemGeometry, "Items Geometry"); const items = [blockGeometryPi, entityGeometryPi, itemGeometryPi]; for (const projectItem of itemsCopy) { if (projectItem.itemType === IProjectItemData_1.ProjectItemType.modelGeometryJson) { await projectItem.ensureFileStorage(); if (projectItem.file) { const srPath = projectItem.file.storageRelativePath.toLowerCase(); const modGeo = await ModelGeometryDefinition_1.default.ensureOnFile(projectItem.file); if (modGeo && modGeo.definitions) { for (const geoDef of modGeo.definitions) { if (geoDef.bones) { let totalCubes = 0; for (const bone of geoDef.bones) { if (bone.cubes) { totalCubes += bone.cubes.length; } } if (srPath.indexOf("/blocks/") >= 0) { blockGeometryPi.spectrumIntFeature("Cubes", totalCubes); const blockCubeBudget = 50; if (totalCubes > blockCubeBudget) { items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.warning, this.id, GeometryInfoGeneratorTest.overlyComplexBlockGeometry, `More than ${blockCubeBudget} cubes in custom blocks may lead to degraded performance. Cubes used`, projectItem, totalCubes)); } } else if (srPath.indexOf("/items/") >= 0 || srPath.indexOf("/attachable") >= 0) { // note that sometimes this is in /entity, e.g., /entity/attachables, so this check needs to be first itemGeometryPi.spectrumIntFeature("Cubes", totalCubes); } else if (srPath.indexOf("/entity/") >= 0) { entityGeometryPi.spectrumIntFeature("Cubes", totalCubes); } } } } } } } return items; } } exports.default = GeometryInfoGenerator; //# sourceMappingURL=../maps/info/GeometryInfoGenerator.js.map