dragonbones-tools
Version:
Dragonbones tools.
308 lines (307 loc) • 14.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var fs = require("fs-extra");
var path = require("path");
var commander = require("commander");
var object = require("./common/object");
var nodeUtils = require("./common/nodeUtils");
var dbft = require("./format/dragonBonesFormat");
var spft = require("./format/spineFormat");
var dbUtils = require("./format/utils");
var toFormat_1 = require("./action/toFormat");
var toNew_1 = require("./action/toNew");
var toBinary_1 = require("./action/toBinary");
var toWeb_1 = require("./action/toWeb");
var toSpine_1 = require("./action/toSpine");
var formatFormat_1 = require("./action/formatFormat");
function execute() {
var commands = commander
.version("0.1.0")
.option("-i, --input [path]", "Input path")
.option("-o, --output [path]", "Output path")
.option("-t, --type [type]", "Convert to type [binary, new, v45, player, viewer, spine]", /^(binary|new|v45|player|viewer|spine|none)$/i, "none")
.option("-f, --filter [keyword]", "Filter")
.option("-d, --delete", "Delete raw files after convert complete")
.option("-p, --parameter [parameter]", "Parameter")
.parse(process.argv);
var input = path.resolve(path.normalize(commands["input"] || process.cwd()));
var output = "output" in commands ? path.resolve(path.normalize(commands["output"])) : input;
var type = commands["type"] || "";
var filter = commands["filter"] || "";
var deleteRaw = commands["delete"] || false;
var parameter = commands["parameter"] || "";
var loadTextureAtlasToData = false;
var megreTextureAtlasToData = false;
switch (type) {
case "binary":
break;
case "new":
break;
case "v45":
break;
case "player":
case "viewer":
loadTextureAtlasToData = true;
megreTextureAtlasToData = true;
break;
case "spine":
loadTextureAtlasToData = true;
megreTextureAtlasToData = true;
break;
default:
console.log("Unknown type: " + type);
return;
}
var files = nodeUtils.filterFileList(input, /\.(json)$/i);
var _loop_1 = function (file) {
if (filter && file.indexOf(filter) < 0) {
return "continue";
}
var dirURL = path.dirname(file);
var fileName = path.basename(file, ".json");
var fileString = fs.readFileSync(file, "utf-8");
var textureAtlasFiles = null;
var textureAtlasImages = null;
var textureAtlases = null;
var dragonBonesData = toFormat_1.default(fileString, function () {
textureAtlasFiles = dbUtils.getTextureAtlases(file);
textureAtlases = textureAtlasFiles.map(function (v) {
return getTextureAtlas(v);
});
return textureAtlases;
});
if (!dragonBonesData) {
return "continue";
}
if (dragonBonesData.textureAtlas.length > 0) {
textureAtlasFiles = null;
textureAtlasImages = dragonBonesData.textureAtlas.map(function (v) {
return v.imagePath;
});
textureAtlases = dragonBonesData.textureAtlas;
}
else {
if (!textureAtlasFiles) {
textureAtlasFiles = dbUtils.getTextureAtlases(file);
}
textureAtlasImages = textureAtlasFiles.map(function (v) {
return v.replace(".json", ".png");
});
if (loadTextureAtlasToData && textureAtlasFiles.length > 0) {
textureAtlases = textureAtlasFiles.map(function (v) {
return getTextureAtlas(v);
});
}
}
if (megreTextureAtlasToData && textureAtlases && dragonBonesData.textureAtlas.length === 0) {
for (var _i = 0, textureAtlases_1 = textureAtlases; _i < textureAtlases_1.length; _i++) {
var textureAtals = textureAtlases_1[_i];
dragonBonesData.textureAtlas.push(textureAtals);
}
textureAtlases = dragonBonesData.textureAtlas;
}
switch (type) {
case "binary": {
toNew_1.default(dragonBonesData, true);
formatFormat_1.default(dragonBonesData);
var outputDirURL = dirURL.replace(input, output);
var outputURL = path.join(outputDirURL, fileName + ".dbbin");
var result = toBinary_1.default(dragonBonesData);
if (!fs.existsSync(outputDirURL)) {
fs.mkdirsSync(outputDirURL);
}
fs.writeFileSync(outputURL, new Buffer(result));
console.log(outputURL);
if (deleteRaw) {
fs.unlinkSync(file);
}
if (outputDirURL !== dirURL) {
if (textureAtlasFiles && !megreTextureAtlasToData) {
for (var _a = 0, textureAtlasFiles_1 = textureAtlasFiles; _a < textureAtlasFiles_1.length; _a++) {
var textureAtlasFile = textureAtlasFiles_1[_a];
var outputURL_1 = textureAtlasFile.replace(input, output);
if (deleteRaw) {
fs.moveSync(textureAtlasFile, outputURL_1);
}
else {
fs.copySync(textureAtlasFile, outputURL_1);
}
console.log(outputURL_1);
}
}
for (var _b = 0, textureAtlasImages_1 = textureAtlasImages; _b < textureAtlasImages_1.length; _b++) {
var textureAtlasImage = textureAtlasImages_1[_b];
var outputURL_2 = textureAtlasImage.replace(input, output);
if (deleteRaw) {
fs.moveSync(textureAtlasImage, outputURL_2);
}
else {
fs.copySync(textureAtlasImage, outputURL_2);
}
console.log(outputURL_2);
}
}
else if (textureAtlasFiles && megreTextureAtlasToData) {
for (var _c = 0, textureAtlasFiles_2 = textureAtlasFiles; _c < textureAtlasFiles_2.length; _c++) {
var textureAtlasFile = textureAtlasFiles_2[_c];
fs.removeSync(textureAtlasFile);
}
}
break;
}
case "new": {
toNew_1.default(dragonBonesData, false);
formatFormat_1.default(dragonBonesData);
object.compress(dragonBonesData, dbft.compressConfig);
var outputDirURL = dirURL.replace(input, output);
var outputURL = path.join(outputDirURL, fileName + ".json");
var result = JSON.stringify(dragonBonesData);
if (!fs.existsSync(outputDirURL)) {
fs.mkdirsSync(outputDirURL);
}
fs.writeFileSync(outputURL, new Buffer(result));
console.log(outputURL);
if (outputDirURL !== dirURL) {
if (deleteRaw) {
fs.unlinkSync(file);
}
if (textureAtlasFiles && !megreTextureAtlasToData) {
for (var _d = 0, textureAtlasFiles_3 = textureAtlasFiles; _d < textureAtlasFiles_3.length; _d++) {
var textureAtlasFile = textureAtlasFiles_3[_d];
var outputURL_3 = textureAtlasFile.replace(input, output);
if (deleteRaw) {
fs.moveSync(textureAtlasFile, outputURL_3);
}
else {
fs.copySync(textureAtlasFile, outputURL_3);
}
console.log(outputURL_3);
}
}
for (var _e = 0, textureAtlasImages_2 = textureAtlasImages; _e < textureAtlasImages_2.length; _e++) {
var textureAtlasImage = textureAtlasImages_2[_e];
var outputURL_4 = textureAtlasImage.replace(input, output);
if (deleteRaw) {
fs.moveSync(textureAtlasImage, outputURL_4);
}
else {
fs.copySync(textureAtlasImage, outputURL_4);
}
console.log(outputURL_4);
}
}
else if (textureAtlasFiles && megreTextureAtlasToData) {
for (var _f = 0, textureAtlasFiles_4 = textureAtlasFiles; _f < textureAtlasFiles_4.length; _f++) {
var textureAtlasFile = textureAtlasFiles_4[_f];
fs.removeSync(textureAtlasFile);
}
}
break;
}
case "player":
case "viewer": {
toNew_1.default(dragonBonesData, true);
formatFormat_1.default(dragonBonesData);
var outputDirURL = dirURL.replace(input, output);
var outputURL = path.join(outputDirURL, fileName + ".html");
var result = toWeb_1.default({
data: new Buffer(toBinary_1.default(dragonBonesData)),
textureAtlases: textureAtlasImages.map(function (v) {
var imagePath = path.join(dirURL, v);
if (fs.existsSync(imagePath)) {
return fs.readFileSync(imagePath);
}
return null;
}),
config: {
isLocal: parameter !== "alone",
isAlone: parameter === "alone",
}
}, type === "player");
if (!fs.existsSync(outputDirURL)) {
fs.mkdirsSync(outputDirURL);
}
fs.writeFileSync(outputURL, new Buffer(result));
console.log(outputURL);
if (deleteRaw) {
fs.unlinkSync(file);
if (textureAtlasFiles) {
for (var _g = 0, textureAtlasFiles_5 = textureAtlasFiles; _g < textureAtlasFiles_5.length; _g++) {
var textureAtlasFile = textureAtlasFiles_5[_g];
fs.unlinkSync(textureAtlasFile);
}
}
for (var _h = 0, textureAtlasImages_3 = textureAtlasImages; _h < textureAtlasImages_3.length; _h++) {
var textureAtlasImage = textureAtlasImages_3[_h];
fs.unlinkSync(textureAtlasImage);
}
}
break;
}
case "spine": {
toNew_1.default(dragonBonesData, true);
formatFormat_1.default(dragonBonesData);
var outputDirURL = dirURL.replace(input, output);
var result = toSpine_1.default(dragonBonesData, "3.6.0", !output);
var suffix = outputDirURL === dirURL ? "_spine" : "";
dragonBonesData.name = fileName.replace("_ske", "");
console.log(dragonBonesData.name);
if (!fs.existsSync(outputDirURL)) {
fs.mkdirsSync(outputDirURL);
}
for (var _j = 0, _k = result.spines; _j < _k.length; _j++) {
var spine = _k[_j];
object.compress(spine, spft.compressConfig);
var outputURL_5 = path.join(outputDirURL, (result.spines.length > 1 ? dragonBonesData.name + "_" + spine.skeleton.name : dragonBonesData.name) + suffix + ".json");
delete spine.skeleton.name; // Delete keep name.
fs.writeFileSync(outputURL_5, JSON.stringify(spine));
console.log(outputURL_5);
}
var outputURL = path.join(outputDirURL, dragonBonesData.name + suffix + ".atlas");
fs.writeFileSync(outputURL, result.textureAtlas);
console.log(outputURL);
if (deleteRaw) {
fs.unlinkSync(file);
if (textureAtlasFiles) {
for (var _l = 0, textureAtlasFiles_6 = textureAtlasFiles; _l < textureAtlasFiles_6.length; _l++) {
var textureAtlasFile = textureAtlasFiles_6[_l];
fs.unlinkSync(textureAtlasFile);
}
}
}
if (outputDirURL !== dirURL) {
var index = 0;
for (var _m = 0, textureAtlasImages_4 = textureAtlasImages; _m < textureAtlasImages_4.length; _m++) {
var textureAtlasImage = textureAtlasImages_4[_m];
var outputURL_6 = path.join(path.dirname(textureAtlasImage.replace(input, output)), dragonBonesData.name + suffix + (textureAtlasImages.length > 1 ? "_" + index : "") + ".png");
if (fs.existsSync(textureAtlasImage)) {
if (deleteRaw) {
fs.moveSync(textureAtlasImage, outputURL_6);
}
else {
fs.copySync(textureAtlasImage, outputURL_6);
}
}
console.log(outputURL_6);
index++;
}
}
break;
}
default:
break;
}
};
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
var file = files_1[_i];
_loop_1(file);
}
console.log("Convert complete.");
}
function getTextureAtlas(textureAtlasFile) {
var textureAtlas = new dbft.TextureAtlas();
object.copyObjectFrom(JSON.parse(fs.readFileSync(textureAtlasFile, "utf-8")), textureAtlas, dbft.copyConfig);
return textureAtlas;
}
execute();