Search in sources :

Example 6 with FileProcessor

use of com.badlogic.gdx.tools.FileProcessor in project skin-composer by raeleus.

the class TexturePackerFileProcessor method process.

public ArrayList<Entry> process(File inputFile, File outputRoot) throws Exception {
    root = inputFile;
    // Collect pack.json setting files.
    final ArrayList<File> settingsFiles = new ArrayList();
    FileProcessor settingsProcessor = new FileProcessor() {

        protected void processFile(Entry inputFile) throws Exception {
            settingsFiles.add(inputFile.inputFile);
        }
    };
    settingsProcessor.addInputRegex("pack\\.json");
    settingsProcessor.process(inputFile, null);
    // Sort parent first.
    Collections.sort(settingsFiles, new Comparator<File>() {

        public int compare(File file1, File file2) {
            return file1.toString().length() - file2.toString().length();
        }
    });
    for (File settingsFile : settingsFiles) {
        // Find first parent with settings, or use defaults.
        Settings settings = null;
        File parent = settingsFile.getParentFile();
        while (true) {
            if (parent.equals(root))
                break;
            parent = parent.getParentFile();
            settings = dirToSettings.get(parent);
            if (settings != null) {
                settings = new Settings(settings);
                break;
            }
        }
        if (settings == null)
            settings = new Settings(defaultSettings);
        // Merge settings from current directory.
        merge(settings, settingsFile);
        dirToSettings.put(settingsFile.getParentFile(), settings);
    }
    // Do actual processing.
    return super.process(inputFile, outputRoot);
}
Also used : FileProcessor(com.badlogic.gdx.tools.FileProcessor) ArrayList(java.util.ArrayList) File(java.io.File) Settings(com.badlogic.gdx.tools.texturepacker.TexturePacker.Settings)

Example 7 with FileProcessor

use of com.badlogic.gdx.tools.FileProcessor in project skin-composer by raeleus.

the class TexturePackerFileProcessor method process.

public ArrayList<Entry> process(File[] files, File outputRoot) throws Exception {
    // Delete pack file and images.
    if (outputRoot.exists()) {
        // Load root settings to get scale.
        File settingsFile = new File(root, "pack.json");
        Settings rootSettings = defaultSettings;
        if (settingsFile.exists()) {
            rootSettings = new Settings(rootSettings);
            merge(rootSettings, settingsFile);
        }
        String atlasExtension = rootSettings.atlasExtension == null ? "" : rootSettings.atlasExtension;
        atlasExtension = Pattern.quote(atlasExtension);
        for (int i = 0, n = rootSettings.scale.length; i < n; i++) {
            FileProcessor deleteProcessor = new FileProcessor() {

                protected void processFile(Entry inputFile) throws Exception {
                    inputFile.inputFile.delete();
                }
            };
            deleteProcessor.setRecursive(false);
            String scaledPackFileName = rootSettings.getScaledPackFileName(packFileName, i);
            File packFile = new File(scaledPackFileName);
            String prefix = packFile.getName();
            int dotIndex = prefix.lastIndexOf('.');
            if (dotIndex != -1)
                prefix = prefix.substring(0, dotIndex);
            deleteProcessor.addInputRegex("(?i)" + prefix + "\\d*\\.(png|jpg|jpeg)");
            deleteProcessor.addInputRegex("(?i)" + prefix + atlasExtension);
            String dir = packFile.getParent();
            if (dir == null)
                deleteProcessor.process(outputRoot, null);
            else if (// 
            new File(outputRoot + "/" + dir).exists())
                deleteProcessor.process(outputRoot + "/" + dir, null);
        }
    }
    return super.process(files, outputRoot);
}
Also used : FileProcessor(com.badlogic.gdx.tools.FileProcessor) File(java.io.File) Settings(com.badlogic.gdx.tools.texturepacker.TexturePacker.Settings)

Example 8 with FileProcessor

use of com.badlogic.gdx.tools.FileProcessor in project skin-composer by raeleus.

the class TexturePackerFileProcessor method processDir.

protected void processDir(Entry inputDir, ArrayList<Entry> files) throws Exception {
    if (ignoreDirs.contains(inputDir.inputFile))
        return;
    // Find first parent with settings, or use defaults.
    Settings settings = null;
    File parent = inputDir.inputFile;
    while (true) {
        settings = dirToSettings.get(parent);
        if (settings != null)
            break;
        if (parent == null || parent.equals(root))
            break;
        parent = parent.getParentFile();
    }
    if (settings == null)
        settings = defaultSettings;
    if (settings.ignore)
        return;
    if (settings.combineSubdirectories) {
        // Collect all files under subdirectories and ignore subdirectories so they won't be packed twice.
        files = new FileProcessor(this) {

            protected void processDir(Entry entryDir, ArrayList<Entry> files) {
                ignoreDirs.add(entryDir.inputFile);
            }

            protected void processFile(Entry entry) {
                addProcessedFile(entry);
            }
        }.process(inputDir.inputFile, null);
    }
    if (files.isEmpty())
        return;
    // Sort by name using numeric suffix, then alpha.
    Collections.sort(files, new Comparator<Entry>() {

        final Pattern digitSuffix = Pattern.compile("(.*?)(\\d+)$");

        public int compare(Entry entry1, Entry entry2) {
            String full1 = entry1.inputFile.getName();
            int dotIndex = full1.lastIndexOf('.');
            if (dotIndex != -1)
                full1 = full1.substring(0, dotIndex);
            String full2 = entry2.inputFile.getName();
            dotIndex = full2.lastIndexOf('.');
            if (dotIndex != -1)
                full2 = full2.substring(0, dotIndex);
            String name1 = full1, name2 = full2;
            int num1 = 0, num2 = 0;
            Matcher matcher = digitSuffix.matcher(full1);
            if (matcher.matches()) {
                try {
                    num1 = Integer.parseInt(matcher.group(2));
                    name1 = matcher.group(1);
                } catch (Exception ignored) {
                }
            }
            matcher = digitSuffix.matcher(full2);
            if (matcher.matches()) {
                try {
                    num2 = Integer.parseInt(matcher.group(2));
                    name2 = matcher.group(1);
                } catch (Exception ignored) {
                }
            }
            int compare = name1.compareTo(name2);
            if (compare != 0 || num1 == num2)
                return compare;
            return num1 - num2;
        }
    });
    // Pack.
    if (!settings.silent)
        System.out.println(inputDir.inputFile.getName());
    TexturePacker packer = new TexturePacker(root, settings);
    for (Entry file : files) packer.addImage(file.inputFile);
    packer.pack(inputDir.outputDir, packFileName);
}
Also used : FileProcessor(com.badlogic.gdx.tools.FileProcessor) Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) ArrayList(java.util.ArrayList) File(java.io.File) Settings(com.badlogic.gdx.tools.texturepacker.TexturePacker.Settings) GdxRuntimeException(com.badlogic.gdx.utils.GdxRuntimeException)

Example 9 with FileProcessor

use of com.badlogic.gdx.tools.FileProcessor in project ultimate-java by pantinor.

the class TexturePackerFileProcessor method processDir.

protected void processDir(Entry inputDir, ArrayList<Entry> files) throws Exception {
    if (ignoreDirs.contains(inputDir.inputFile)) {
        return;
    }
    // Find first parent with settings, or use defaults.
    Settings settings = null;
    File parent = inputDir.inputFile;
    while (true) {
        settings = dirToSettings.get(parent);
        if (settings != null) {
            break;
        }
        if (parent.equals(root)) {
            break;
        }
        parent = parent.getParentFile();
    }
    if (settings == null) {
        settings = defaultSettings;
    }
    if (settings.combineSubdirectories) {
        // Collect all files under subdirectories and ignore subdirectories so they won't be packed twice.
        files = new FileProcessor(this) {

            protected void processDir(Entry entryDir, ArrayList<Entry> files) {
                ignoreDirs.add(entryDir.inputFile);
            }

            protected void processFile(Entry entry) {
                addProcessedFile(entry);
            }
        }.process(inputDir.inputFile, null);
    }
    if (files.isEmpty()) {
        return;
    }
    // Sort by name using numeric suffix, then alpha.
    Collections.sort(files, new Comparator<Entry>() {

        final Pattern digitSuffix = Pattern.compile("(.*?)(\\d+)$");

        public int compare(Entry entry1, Entry entry2) {
            String full1 = entry1.inputFile.getName();
            int dotIndex = full1.lastIndexOf('.');
            if (dotIndex != -1) {
                full1 = full1.substring(0, dotIndex);
            }
            String full2 = entry2.inputFile.getName();
            dotIndex = full2.lastIndexOf('.');
            if (dotIndex != -1) {
                full2 = full2.substring(0, dotIndex);
            }
            String name1 = full1, name2 = full2;
            int num1 = 0, num2 = 0;
            Matcher matcher = digitSuffix.matcher(full1);
            if (matcher.matches()) {
                try {
                    num1 = Integer.parseInt(matcher.group(2));
                    name1 = matcher.group(1);
                } catch (Exception ignored) {
                }
            }
            matcher = digitSuffix.matcher(full2);
            if (matcher.matches()) {
                try {
                    num2 = Integer.parseInt(matcher.group(2));
                    name2 = matcher.group(1);
                } catch (Exception ignored) {
                }
            }
            int compare = name1.compareTo(name2);
            if (compare != 0 || num1 == num2) {
                return compare;
            }
            return num1 - num2;
        }
    });
    // Pack.
    System.out.println(inputDir.inputFile.getName());
    TexturePacker packer = new TexturePacker(root, settings);
    for (Entry file : files) {
        packer.addImage(file.inputFile);
    }
    packer.pack(inputDir.outputDir, packFileName);
}
Also used : FileProcessor(com.badlogic.gdx.tools.FileProcessor) Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) ArrayList(java.util.ArrayList) File(java.io.File) Settings(com.badlogic.gdx.tools.texturepacker.TexturePacker.Settings) GdxRuntimeException(com.badlogic.gdx.utils.GdxRuntimeException)

Aggregations

FileProcessor (com.badlogic.gdx.tools.FileProcessor)9 Settings (com.badlogic.gdx.tools.texturepacker.TexturePacker.Settings)9 File (java.io.File)9 ArrayList (java.util.ArrayList)6 GdxRuntimeException (com.badlogic.gdx.utils.GdxRuntimeException)3 Matcher (java.util.regex.Matcher)3 Pattern (java.util.regex.Pattern)3