* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
* See the License for the specific language governing permissions and\r
* limitations under the License.\r
- ******************************************************************************/
-package com.badlogic.gdx.tools.imagepacker;\r
+ ******************************************************************************/\r
\r
-import java.io.File;\r
-import java.io.FileReader;\r
-import java.util.ArrayList;\r
-import java.util.regex.Pattern;\r
+package com.badlogic.gdx.tools.imagepacker;\r
\r
import com.badlogic.gdx.tools.FileProcessor;\r
import com.badlogic.gdx.tools.imagepacker.TexturePacker2.Settings;\r
import com.badlogic.gdx.utils.JsonReader;\r
import com.badlogic.gdx.utils.ObjectMap;\r
\r
+import java.io.File;\r
+import java.io.FileReader;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
+import java.util.regex.Pattern;\r
+\r
/** @author Nathan Sweet */\r
public class TexturePackerFileProcessor extends FileProcessor {\r
private final Settings defaultSettings;\r
\r
public ArrayList<Entry> process (File inputFile, File outputRoot) throws Exception {\r
root = inputFile;\r
+\r
+ // Collect pack.json setting files.\r
+ final ArrayList<File> settingsFiles = new ArrayList();\r
+ FileProcessor settingsProcessor = new FileProcessor() {\r
+ protected void processFile (Entry inputFile) throws Exception {\r
+ settingsFiles.add(inputFile.inputFile);\r
+ }\r
+ };\r
+ settingsProcessor.addInputRegex("pack\\.json");\r
+ settingsProcessor.process(inputFile, null);\r
+ // Sort parent first.\r
+ Collections.sort(settingsFiles, new Comparator<File>() {\r
+ public int compare (File file1, File file2) {\r
+ return file1.toString().length() - file2.toString().length();\r
+ }\r
+ });\r
+ for (File settingsFile : settingsFiles) {\r
+ // Find first parent with settings, or use defaults.\r
+ Settings settings = null;\r
+ File parent = settingsFile.getParentFile();\r
+ while (true) {\r
+ if (parent.equals(root)) break;\r
+ parent = parent.getParentFile();\r
+ settings = dirToSettings.get(parent);\r
+ if (settings != null) {\r
+ settings = new Settings(settings);\r
+ break;\r
+ }\r
+ }\r
+ if (settings == null) settings = new Settings(defaultSettings);\r
+ // Merge settings from current directory.\r
+ json.readFields(settings, new JsonReader().parse(new FileReader(settingsFile)));\r
+ dirToSettings.put(settingsFile.getParentFile(), settings);\r
+ }\r
+\r
return super.process(inputFile, outputRoot);\r
}\r
\r
protected void processDir (Entry inputDir, ArrayList<Entry> files) throws Exception {\r
System.out.println(inputDir.inputFile.getName());\r
\r
- // Start with a copy of a parent dir's settings or the default settings.\r
+ // Find first parent with settings, or use defaults.\r
Settings settings = null;\r
File parent = inputDir.inputFile;\r
while (true) {\r
if (parent.equals(root)) break;\r
parent = parent.getParentFile();\r
settings = dirToSettings.get(parent);\r
- if (settings != null) {\r
- settings = new Settings(settings);\r
- break;\r
- }\r
+ if (settings != null) break;\r
}\r
- if (settings == null) settings = new Settings(defaultSettings);\r
- dirToSettings.put(inputDir.inputFile, settings);\r
-\r
- // Merge settings from pack.json file.\r
- File settingsFile = new File(inputDir.inputFile, "pack.json");\r
- if (settingsFile.exists()) json.readFields(settings, new JsonReader().parse(new FileReader(settingsFile)));\r
+ if (settings == null) settings = defaultSettings;\r
\r
// Pack.\r
TexturePacker2 packer = new TexturePacker2(root, settings);\r
packer.addImage(file.inputFile);\r
packer.pack(inputDir.outputDir, packFileName);\r
}\r
-}
\ No newline at end of file
+}\r