125 lines
2.7 KiB
Java
125 lines
2.7 KiB
Java
package com.danitheskunk.skunkworks;
|
|
|
|
import com.danitheskunk.skunkworks.gfx.Image;
|
|
import com.danitheskunk.skunkworks.gfx.NineSlice;
|
|
import com.danitheskunk.skunkworks.gfx.font.FontTTF;
|
|
import com.danitheskunk.skunkworks.gfx.font.FontTileset;
|
|
import com.danitheskunk.skunkworks.gfx.font.IFont;
|
|
|
|
abstract public class BaseWindow implements IWindow {
|
|
protected final Engine engine;
|
|
|
|
public BaseWindow(Engine engine) {
|
|
this.engine = engine;
|
|
}
|
|
|
|
@Override
|
|
public Engine getEngine() {
|
|
return engine;
|
|
}
|
|
|
|
@Override
|
|
public IFont loadFontTileset(String path) {
|
|
var img = engine.loadImage(path);
|
|
var charSize = Vec2i.div(img.getSize(), 16);
|
|
var tex = loadTextureArray(img, charSize);
|
|
assert tex.size() == 256;
|
|
return new FontTileset(tex);
|
|
}
|
|
|
|
@Override
|
|
public IFont loadFontTTF(String path, float size) {
|
|
var bytes = engine.loadBytes(path);
|
|
|
|
return new FontTTF(bytes, size, this);
|
|
}
|
|
|
|
@Override
|
|
public NineSlice loadNineSlice(Image image) {
|
|
int x1 = -1;
|
|
int x2 = -1;
|
|
int y1 = -1;
|
|
int y2 = -1;
|
|
|
|
for(int i = 1; i < image.getWidth(); ++i) {
|
|
if(image.getPixel(new Vec2i(i, 0)).getA() != 0) {
|
|
x1 = i;
|
|
break;
|
|
}
|
|
}
|
|
for(int i = x1; i < image.getWidth(); ++i) {
|
|
if(image.getPixel(new Vec2i(i, 0)).getA() == 0) {
|
|
x2 = i;
|
|
break;
|
|
}
|
|
}
|
|
for(int i = 1; i < image.getHeight(); ++i) {
|
|
if(image.getPixel(new Vec2i(0, i)).getA() != 0) {
|
|
y1 = i;
|
|
break;
|
|
}
|
|
}
|
|
for(int i = y1; i < image.getHeight(); ++i) {
|
|
if(image.getPixel(new Vec2i(i, 0)).getA() == 0) {
|
|
y2 = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(x1 == -1 || x2 == -1 || y1 == -1 || y2 == -1) {
|
|
throw new RuntimeException("NineSlice error");
|
|
}
|
|
var tl = image.getSubImage(new Recti(1, 1, x1 - 1, y1 - 1));
|
|
var top = image.getSubImage(new Recti(x1, 1, x2 - x1, y1 - 1));
|
|
var tr = image.getSubImage(new Recti(
|
|
x2,
|
|
1,
|
|
image.getWidth() - x2,
|
|
y1 - 1
|
|
));
|
|
var left = image.getSubImage(new Recti(1, y1, x1 - 1, y2 - y1));
|
|
var center = image.getSubImage(new Recti(x1, y1, x2 - x1, y2 - y1));
|
|
var right = image.getSubImage(new Recti(
|
|
x2,
|
|
y1,
|
|
image.getWidth() - x2,
|
|
y2 - y1
|
|
));
|
|
var bl = image.getSubImage(new Recti(
|
|
1,
|
|
y2,
|
|
x1 - 1,
|
|
image.getHeight() - y2
|
|
));
|
|
var bottom = image.getSubImage(new Recti(
|
|
x1,
|
|
y2,
|
|
x2 - x1,
|
|
image.getHeight() - y2
|
|
));
|
|
var br = image.getSubImage(new Recti(
|
|
x2,
|
|
y2,
|
|
image.getWidth() - x2,
|
|
image.getHeight() - y2
|
|
));
|
|
var slice = new NineSlice(loadTexture(tl),
|
|
loadTexture(tr),
|
|
loadTexture(bl),
|
|
loadTexture(br),
|
|
loadTexture(top),
|
|
loadTexture(right),
|
|
loadTexture(bottom),
|
|
loadTexture(left),
|
|
loadTexture(center)
|
|
);
|
|
return slice;
|
|
}
|
|
|
|
@Override
|
|
public NineSlice loadNineSlice(String path) {
|
|
return loadNineSlice(engine.loadImage(path));
|
|
}
|
|
|
|
}
|