/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.pipeline; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.utils.GdxNativesLoader; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.happydroids.droidtowers.utils.PNG; import com.happydroids.error.ErrorUtil; import java.io.IOException; public class GenerateAssetManagerFileList { private static FileHandle assetsDir = new FileHandle("assets/"); private static AssetList managedFiles = new AssetList(); public static void main(String[] args) { GdxNativesLoader.load(); preloadDirectory("swatches/", ".png", Texture.class); preloadFile(assetsDir.child("backgrounds/splash1.txt"), TextureAtlas.class); preloadFile(assetsDir.child("backgrounds/splash2.txt"), TextureAtlas.class); preloadFile(assetsDir.child("backgrounds/cityscape-middle.png"), Texture.class); preloadFile(assetsDir.child("happydroid.txt"), TextureAtlas.class); preloadFile(assetsDir.child("droid-santa-hat.png"), Texture.class); preloadFile(assetsDir.child("default-skin.json"), Skin.class); preloadFile(assetsDir.child("backgrounds/clouds.txt"), TextureAtlas.class); preloadFile(assetsDir.child("hud/skin.txt"), TextureAtlas.class); preloadFile(assetsDir.child("hud/menus.txt"), TextureAtlas.class); preloadFile(assetsDir.child("hud/buttons.txt"), TextureAtlas.class); preloadFile(assetsDir.child("hud/heyzap-checkin.txt"), TextureAtlas.class); preloadFile(assetsDir.child("hud/window-bg.png"), Texture.class); preloadFile(assetsDir.child("hud/dialog-bg.png"), Texture.class); addDirectoryToAssetManager("backgrounds/", ".txt", TextureAtlas.class); addDirectoryToAssetManager("designer/housing/", ".txt", TextureAtlas.class); addDirectoryToAssetManager("movies/", ".txt", TextureAtlas.class); addDirectoryToAssetManager("backgrounds/", ".png", Texture.class); addDirectoryToAssetManager("hud/rating-bars/", ".png", Texture.class); addDirectoryToAssetManager("hud/", ".txt", TextureAtlas.class); addDirectoryToAssetManager("rooms/", ".txt", TextureAtlas.class); addFileEntry(assetsDir.child("characters.txt"), TextureAtlas.class); addFileEntry(assetsDir.child("transport.txt"), TextureAtlas.class); addFileEntry(assetsDir.child("rain-drop.png"), Texture.class); addFileEntry(assetsDir.child("snow.png"), Texture.class); addFileEntry(assetsDir.child("decals.png"), Texture.class); addFileEntry(assetsDir.child("tower-sign.png"), Texture.class); addFileEntry(assetsDir.child("tower-sign-poll.png"), Texture.class); for (FileHandle file : assetsDir.child("sound/").child("music/").list()) { managedFiles.addMusic(cleanFilename(file.path())); } try { ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); new FileHandle("assets/assets.json").writeString(mapper.writeValueAsString(managedFiles), false); } catch (IOException e) { e.printStackTrace(); } } private static void makeSwatch(FileHandle swatchesDir, String swatchFilename, Color color) { FileHandle swatchFile = swatchesDir.child(swatchFilename); if (swatchFile.exists()) { return; } try { Pixmap pixmap = new Pixmap(2, 2, Pixmap.Format.RGB888); pixmap.setColor(color); pixmap.fill(); byte[] bytes = PNG.toPNG(pixmap); swatchFile.writeBytes(bytes, false); } catch (IOException e) { ErrorUtil.rethrowError(e); } } private static void preloadDirectory(String folder, String suffix, Class clazz) { for (FileHandle child : assetsDir.child(folder).list(suffix)) { preloadFile(child, clazz); } } private static void preloadFile(FileHandle child, Class clazz) { if (!verifyFile(child)) { managedFiles.preload(cleanFilename(child.path()), checkForHDVersion(child), clazz); } } private static void addDirectoryToAssetManager(String folder, String suffix, Class clazz) { for (FileHandle child : assetsDir.child(folder).list(suffix)) { addFileEntry(child, clazz); } } private static void addFileEntry(FileHandle child, Class clazz) { if (!verifyFile(child)) { managedFiles.normal(cleanFilename(child.path()), checkForHDVersion(child), clazz); } } private static boolean verifyFile(FileHandle child) { if (!child.exists()) { throw new RuntimeException("File not found: " + child.path()); } else if (child.name().contains("-hd")) { System.out.println("Skipping HD asset: " + child.path()); return true; } return false; } public static String checkForHDVersion(FileHandle fileHandle) { String hdpiFileName = fileHandle.parent() + "/" + fileHandle.nameWithoutExtension() + "-hd." + fileHandle.extension(); if (hdpiFileName.startsWith("/")) { hdpiFileName = hdpiFileName.substring(1); } if (new FileHandle(hdpiFileName).exists()) { return cleanFilename(hdpiFileName); } return null; } private static String cleanFilename(String fileName) { return fileName.replace("assets/", ""); } }