Merge
This commit is contained in:
@@ -303,19 +303,6 @@ task pack(dependsOn: classes){
|
||||
workingDir = genFolder
|
||||
}
|
||||
|
||||
//upscale icon sprites using different method, which requires an OpenGL context
|
||||
javaexec{
|
||||
if(System.getProperty("os.name").toLowerCase().contains("mac")){
|
||||
jvmArgs "-XstartOnFirstThread"
|
||||
}
|
||||
|
||||
jvmArgs("-Djava.awt.headless=true")
|
||||
main = "mindustry.tools.Upscaler"
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
standardInput = System.in
|
||||
workingDir = "../core/assets-raw/sprites_out/ui/icons"
|
||||
}
|
||||
|
||||
copy{
|
||||
from "../core/assets-raw/sprites_out/ui/icons"
|
||||
into "../core/assets-raw/sprites_out/ui/"
|
||||
@@ -366,3 +353,10 @@ task updateBundles(dependsOn: classes, type: JavaExec){
|
||||
standardInput = System.in
|
||||
workingDir = "../core/assets/bundles/"
|
||||
}
|
||||
|
||||
task fontgen(dependsOn: classes, type: JavaExec){
|
||||
main = "mindustry.tools.FontGenerator"
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
standardInput = System.in
|
||||
workingDir = "../"
|
||||
}
|
||||
|
||||
53
tools/src/mindustry/tools/FontGenerator.java
Normal file
53
tools/src/mindustry/tools/FontGenerator.java
Normal file
@@ -0,0 +1,53 @@
|
||||
package mindustry.tools;
|
||||
|
||||
import arc.*;
|
||||
import arc.files.*;
|
||||
import arc.util.*;
|
||||
import arc.util.io.*;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
/* icon font pipeline:
|
||||
1. take set of pre-defined icons and SVGs
|
||||
2. use Fontello API to get a font with these
|
||||
3. combine fontello font and standard font, get output font
|
||||
4. use apache ttf API to generate a file with constants for every icon size+type (during annotation processing)
|
||||
*/
|
||||
public class FontGenerator{
|
||||
|
||||
//E000 to F8FF
|
||||
public static void main(String[] args){
|
||||
Net net = Core.net = new Net();
|
||||
net.setBlock(true);
|
||||
Fi folder = Fi.get("core/assets-raw/fontgen/out/");
|
||||
folder.mkdirs();
|
||||
|
||||
Log.info("Session...");
|
||||
|
||||
OS.exec("curl", "--fail", "--output", "core/assets-raw/fontgen/out/session", "--form", "config=@core/assets-raw/fontgen/config.json", "http://fontello.com");
|
||||
|
||||
Log.info("Zip...");
|
||||
|
||||
String session = folder.child("session").readString();
|
||||
net.httpGet("http://fontello.com/" + session + "/get", result -> {
|
||||
try{
|
||||
Streams.copyStream(result.getResultAsStream(), folder.child("font.zip").write());
|
||||
}catch(IOException e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}, Log::err);
|
||||
|
||||
Log.info("Icon font...");
|
||||
|
||||
ZipFi zip = new ZipFi(folder.child("font.zip"));
|
||||
Fi dest = folder.child("font.ttf");
|
||||
zip.list()[0].child("font").child("fontello.ttf").copyTo(dest);
|
||||
dest.copyTo(Fi.get("core/assets/fonts/icon.ttf"));
|
||||
|
||||
Log.info("Merge...");
|
||||
|
||||
OS.exec("fontforge", "-script", "core/assets-raw/fontgen/merge.pe");
|
||||
|
||||
Log.info("Done.");
|
||||
}
|
||||
}
|
||||
@@ -176,6 +176,10 @@ public class Generators{
|
||||
Image image = new Image(icon.size, icon.size);
|
||||
image.drawScaled(base);
|
||||
image.save(item.getContentType().name() + "-" + item.name + "-" + icon.name(), false);
|
||||
|
||||
if(icon == Cicon.medium){
|
||||
image.save("../ui/" + item.getContentType() + "-" + item.name + "-icon");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -254,12 +258,11 @@ public class Generators{
|
||||
image.save("../blocks/environment/ore-" + item.name + (i + 1));
|
||||
image.save("../editor/editor-ore-" + item.name + (i + 1));
|
||||
|
||||
//save icons
|
||||
image.save("block-" + ore.name + "-full");
|
||||
for(Cicon icon : Cicon.scaled){
|
||||
Image scaled = new Image(icon.size, icon.size);
|
||||
scaled.drawScaled(image);
|
||||
scaled.save("block-" + ore.name + "-" + icon.name());
|
||||
scaled.save("../ui/block-" + ore.name + "-" + icon.name());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
package mindustry.tools;
|
||||
|
||||
import arc.*;
|
||||
import arc.struct.*;
|
||||
import arc.files.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.graphics.g2d.TextureAtlas.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import arc.util.Log.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.core.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.blocks.*;
|
||||
|
||||
import javax.imageio.*;
|
||||
import java.awt.image.*;
|
||||
@@ -18,7 +23,7 @@ public class ImagePacker{
|
||||
static ObjectMap<String, TextureRegion> regionCache = new ObjectMap<>();
|
||||
static ObjectMap<TextureRegion, BufferedImage> imageCache = new ObjectMap<>();
|
||||
|
||||
public static void main(String[] args){
|
||||
public static void main(String[] args) throws Exception{
|
||||
Vars.headless = true;
|
||||
|
||||
Log.setLogger(new NoopLogHandler());
|
||||
@@ -93,6 +98,42 @@ public class ImagePacker{
|
||||
Log.info("&ly[Generator]&lc Total time to generate: &lg{0}&lcms", Time.elapsed());
|
||||
Log.info("&ly[Generator]&lc Total images created: &lg{0}", Image.total());
|
||||
Image.dispose();
|
||||
|
||||
//format:
|
||||
//character-ID=contentname:texture-name
|
||||
Fi iconfile = Fi.get("../../../assets/icons/icons.properties");
|
||||
OrderedMap<String, String> map = new OrderedMap<>();
|
||||
PropertiesUtils.load(map, iconfile.reader(256));
|
||||
|
||||
ObjectMap<String, String> content2id = new ObjectMap<>();
|
||||
map.each((key, val) -> content2id.put(val.split("\\|")[0], key));
|
||||
|
||||
Array<UnlockableContent> cont = Array.withArrays(Vars.content.blocks(), Vars.content.items(), Vars.content.liquids());
|
||||
cont.removeAll(u -> u instanceof BlockPart || u instanceof BuildBlock || u == Blocks.air);
|
||||
|
||||
int minid = 0xF8FF;
|
||||
for(String key : map.keys()){
|
||||
minid = Math.min(Integer.parseInt(key) - 1, minid);
|
||||
}
|
||||
|
||||
for(UnlockableContent c : cont){
|
||||
if(!content2id.containsKey(c.name)){
|
||||
map.put(minid + "", c.name + "|" + texname(c));
|
||||
minid --;
|
||||
}
|
||||
}
|
||||
|
||||
Writer writer = iconfile.writer(false);
|
||||
for(String key : map.keys()){
|
||||
writer.write(key + "=" + map.get(key) + "\n");
|
||||
}
|
||||
|
||||
writer.close();
|
||||
}
|
||||
|
||||
static String texname(UnlockableContent c){
|
||||
if(c instanceof Block) return "block-" + c.name + "-medium";
|
||||
return c.getContentType() + "-" + c.name + "-icon";
|
||||
}
|
||||
|
||||
static void generate(String name, Runnable run){
|
||||
|
||||
@@ -23,7 +23,7 @@ public class ScriptStubGenerator{
|
||||
public static void main(String[] args){
|
||||
String base = "mindustry";
|
||||
Array<String> blacklist = Array.with("plugin", "mod", "net", "io", "tools");
|
||||
Array<String> nameBlacklist = Array.with("ClientLauncher", "NetClient", "NetServer", "ClassAccess");
|
||||
Array<String> nameBlacklist = Array.with("ClassAccess");
|
||||
Array<Class<?>> whitelist = Array.with(Draw.class, Fill.class, Lines.class, Core.class, TextureAtlas.class, TextureRegion.class, Time.class, System.class, PrintStream.class,
|
||||
AtlasRegion.class, String.class, Mathf.class, Angles.class, Color.class, Runnable.class, Object.class, Icon.class, Tex.class,
|
||||
Sounds.class, Musics.class, Call.class, Texture.class, TextureData.class, Pixmap.class, I18NBundle.class, Interval.class, DataInput.class, DataOutput.class,
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
package mindustry.tools;
|
||||
|
||||
import arc.Core;
|
||||
import arc.files.Fi;
|
||||
import arc.graphics.Color;
|
||||
import arc.graphics.Pixmap;
|
||||
import arc.graphics.g2d.Draw;
|
||||
import arc.graphics.g2d.Fill;
|
||||
import arc.graphics.gl.FrameBuffer;
|
||||
import arc.util.ScreenUtils;
|
||||
import arc.util.Tmp;
|
||||
import arc.*;
|
||||
import arc.files.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.graphics.gl.*;
|
||||
import arc.util.*;
|
||||
|
||||
public class SquareMarcher{
|
||||
final int resolution;
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
package mindustry.tools;
|
||||
|
||||
import arc.*;
|
||||
import arc.backend.sdl.*;
|
||||
import arc.files.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.util.*;
|
||||
import mindustry.ui.*;
|
||||
|
||||
public class Upscaler{
|
||||
public static void main(String[] args){
|
||||
new SdlApplication(new ApplicationListener(){
|
||||
@Override
|
||||
public void init(){
|
||||
scale();
|
||||
}
|
||||
}, new SdlConfig(){{
|
||||
initialVisible = false;
|
||||
}});
|
||||
}
|
||||
|
||||
static void scale(){
|
||||
Core.batch = new SpriteBatch();
|
||||
Core.atlas = new TextureAtlas();
|
||||
Core.atlas.addRegion("white", Pixmaps.blankTextureRegion());
|
||||
Fi file = Core.files.local("");
|
||||
|
||||
Log.info("Upscaling icons...");
|
||||
Time.mark();
|
||||
Fi[] list = file.list();
|
||||
|
||||
for(IconSize size : IconSize.values()){
|
||||
String suffix = size == IconSize.def ? "" : "-" + size.name();
|
||||
SquareMarcher marcher = new SquareMarcher(size.size);
|
||||
|
||||
for(Fi img : list){
|
||||
if(img.extension().equals("png")){
|
||||
marcher.render(new Pixmap(img), img.sibling(img.nameWithoutExtension() + suffix + ".png"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Log.info("Done upscaling icons in &lm{0}&lgs.", Time.elapsed()/1000f);
|
||||
Core.app.exit();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user