Files
Mindustry/tools/src/io/anuke/mindustry/ImageContext.java
2018-10-03 15:53:33 -04:00

116 lines
3.4 KiB
Java

package io.anuke.mindustry;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData;
import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData.Region;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.ObjectMap;
import io.anuke.mindustry.core.ContentLoader;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Atlas;
import io.anuke.ucore.util.Log;
import io.anuke.ucore.util.Log.LogHandler;
import io.anuke.ucore.util.Log.NoopLogHandler;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageContext {
private BufferedImage image;
public void load() throws IOException{
Log.setLogger(new NoopLogHandler());
Vars.content = new ContentLoader();
Vars.content.load();
Log.setLogger(new LogHandler());
String spritesFolder = new File("../../../assets/sprites").getAbsolutePath();
TextureAtlasData data = new TextureAtlasData(new FileHandle(spritesFolder + "/sprites.atlas"),
new FileHandle(spritesFolder), false);
ObjectMap<String, TextureRegion> regionCache = new ObjectMap<>();
for(Region region : data.getRegions()){
int x = region.left, y = region.top, width = region.width, height = region.height;
regionCache.put(region.name, new GenRegion(){
{
name = region.name;
context = ImageContext.this;
}
@Override
public int getRegionX(){
return x;
}
@Override
public int getRegionY(){
return y;
}
@Override
public int getRegionWidth(){
return width;
}
@Override
public int getRegionHeight(){
return height;
}
});
}
Core.atlas = new Atlas(){
@Override
public TextureRegion getRegion(String name){
if(!regionCache.containsKey(name)){
GenRegion region = new GenRegion();
region.name = name;
region.context = ImageContext.this;
region.invalid = true;
return region;
}
return regionCache.get(name);
}
@Override
public boolean hasRegion(String s) {
return regionCache.containsKey(s);
}
};
Core.atlas.setErrorRegion("error");
image = ImageIO.read(new File(spritesFolder + "/sprites.png"));
}
public void generate(String name, Runnable run){
Timers.mark();
run.run();
Log.info("&ly[Generator]&lc Time to generate &lm{0}&lc: &lg{1}&lcms", name, Timers.elapsed());
}
public Image create(int width, int height){
return new Image(image, width, height);
}
public Image get(String name){
return get(Core.atlas.getRegion(name));
}
public Image get(TextureRegion region){
GenRegion.validate(region);
return new Image(image, region);
}
public void err(String message, Object... args){
Log.err(message, args);
System.exit(-1);
}
}